在[Scrapy教學2]實用的Scrapy框架安裝指南,開始你的第一個專案文章,完成Scrapy框架的安裝以及專案的建立後,接下來,就可以在其中開發網頁爬蟲,而在開發之前,又有哪些基本的觀念需要知道?本文將一步一步帶大家來進行瞭解,重點包含:
- Scrapy網頁爬蟲建立方法
- Scrapy網頁爬蟲結構
- Scrapy網頁爬蟲執行方法
一、Scrapy網頁爬蟲建立方法
首先,回顧一下[Scrapy教學2]實用的Scrapy框架安裝指南,開始你的第一個專案文章中,在建立Scrapy專案時,可以看到如下圖的執行結果:
其中,提示了建立Scrapy網頁爬蟲的方法,也就是如下指令:$ scrapy genspider 網頁爬蟲檔案名稱 目標網站的網域名稱
舉例來說,本文想要建立一個Scrapy網頁爬蟲,來爬取INSIDE硬塞的網路趨勢觀察網站的AI相關新聞,這時候,就可以開啟Scrapy專案,比照以上的指令來建立網頁爬蟲:
$ scrapy genspider inside www.inside.com.tw
執行結果
成功建立Scrapy網頁爬蟲後,在專案中的spiders資料夾下,就可以看到多了一個inside.py檔案,如下圖:二、Scrapy網頁爬蟲架構
開啟spiders資料夾下的inside.py網頁爬蟲檔案,可以看到Scrapy框架幫我們產生了以下的內容結構:
import scrapy class InsideSpider(scrapy.Spider): name = 'inside' allowed_domains = ['www.inside.com.tw'] start_urls = ['http://www.inside.com.tw/'] def parse(self, response): pass
其中,包含了以下三個屬性(Attribute)及一個方法(Method):
- name屬性:網頁爬蟲的名稱,在專案中必須是唯一的。
- allowed_domains屬性:目標網站的網域名稱清單。
- start_urls屬性:想要爬取的一至多個網頁網址清單。
- parse()方法:撰寫網頁爬蟲程式邏輯的地方,特別注意此方法名稱不得更改。
三、Scrapy網頁爬蟲執行方法
由於本文所要爬取的是INSIDE硬塞的網路趨勢觀察網站的AI相關新聞,所以在start_urls屬性的地方,修改為AI新聞的網頁網址,如下範例第7行:
import scrapy class InsideSpider(scrapy.Spider): name = 'inside' allowed_domains = ['www.inside.com.tw'] start_urls = ['https://www.inside.com.tw/tag/ai'] def parse(self, response): pass
接下來,就可以在parse()方法(Method)中,撰寫網頁爬蟲的邏輯。而在開發之前,先來分析一下INSIDE硬塞的網路趨勢觀察網站的AI新聞網頁,如下圖:
在新聞標題的地方,點擊右鍵,選擇「檢查」,可以看到HTML原始碼如下圖:
從上圖可以看出來,利用<h3>標籤及它的「post_title」樣式類別(class),就可以定位到新聞標題的元素。
回到Scrapy專案中的inside.py檔案,在parse()方法(Method)的地方,利用Scrapy框架的定位元素語法,就可以來撰寫網頁爬蟲,這部分將會在下一篇文章和大家進行分享,本文先以BeautifulSoup模組(Module)為例進行示範,如下範例:
import scrapy import bs4 class InsideSpider(scrapy.Spider): name = 'inside' allowed_domains = ['www.inside.com.tw'] start_urls = ['https://www.inside.com.tw/tag/ai'] def parse(self, response): soup = bs4.BeautifulSoup(response.text, 'lxml') titles = soup.find_all('h3', {'class': 'post_title'}) for title in titles: print(title.text.strip())
首先,需引用bs4模組(Module),在第11行將Scrapy引擎(ENGINE)回應的結果進行解析,接著,爬取網頁的所有新聞標題,並且透過迴圈把取得的每個新聞標題印出來。
完成後,在執行這個Scrapy網頁爬蟲之前,需設定User-Agent(使用者代理),簡單來說,就是瀏覽器的相關資訊,位於settings.py檔案,如下範例:
#USER_AGENT = 'news_scraper (+http://www.yourdomain.com)'
預設是註解的狀態,所以,將註解取消並且加上User-Agent(使用者代理),如下範例:
USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'
最後,就可以利用「scrapy crawl」指令,加上網頁爬蟲的名稱inside,來執行Scrapy網頁爬蟲,如下範例:
$ scrapy crawl inside
執行結果
四、小結
本文分享了Scrapy網頁爬蟲的建立與執行方法,透過實作可以感受到Scrapy框架非常的強大,利用指令即可快速建立類別(Class)結構的網頁爬蟲樣板,透過這樣的物件導向結構,不但能提升未來的維護性,習慣BeautifulSoup語法的朋友,也可以無痛的快速入門。
對於想要利用Scrapy框架開發網頁爬蟲的朋友,希望本文能夠對您有所幫助,有任何的想法都歡迎在底下留言和我分享唷~
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgYqMPD_mPLEileg1IdrsIYhFSWZkYFKYmEnUqWqiqdiJv2XYnkT23CFcXoTN6HBtGCEUylgVoUIVKm6KPRPM_TjcjsSei4lGE_YmZdrWA6Ulw1fp6-o8Cn-bVwr7_FANFoC4tjTe-ak6w-atFYq-a1pipQbZvQzt4wHRNK7tywcSG0dSCnpJpqoMP5wA/s1600/Python%E7%B6%B2%E9%A0%81%E7%88%AC%E8%9F%B2%E5%85%8D%E8%B2%BB%E7%B7%9A%E4%B8%8A%E5%9F%B9%E8%A8%93.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-fK9Da5M7X1lSpbZVan4Eo-PunVnQv-YHw3EDahTUhZr5FayVLaCPqrW44W3_xwQQO-gAWZEwe_A-SxL_nltT__ArbFOgLYAAIsi3RzETT9GqVsfyfN9PXDs-xGTkxZSqj_W1SCxwD2UcrJLqHZSYIrLB-HIU75vSom4YoqoWFUQz_o4PbnvTQUbE6Bab/w640-h426/2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg61JC7N1hyphenhyphenPpzb1hNJauunevoWrOsJxk_Upz0ywnLtIAJ2rdd1ZxChyphenhyphenFPq8GHYfywtHv2mTce5NGdwwxWFWYARhA6In0xlOzkwlRb9kM04mwgdy9Un9JgVCoLQnwV25oUcitQy2OY4TeA3gVIs067wR4StGfkldbykOeL3TfPchWfNClWKhL10ZzWaxFtf/w640-h426/3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh1XFQE0AmkZHSFB0Icq3uY4_FdsIYZ9nUqllOlo9ulRu0ri-LS1OeW2ybKOO2QRg-gyUOUr_3sMLYf7S4Q5ULZpIcXsS1pAkSMPm0OwqpbnLET51WEpQ3EoY5WaEVEWyTixBkRqp2tA7SpePM_MCIY6tnyUvu917rulqbLJTEEPsEho6Q-4Tf74DFdakd/w640-h426/4.png)
留言
張貼留言