爬蟲框架:Scrapy
01
爬蟲框架:Scrapy
按照官方的說法,Scrapy是一個“為了爬取網站數據,提取結構性數據而編寫的Python/ target=_blank class=infotextkey>Python應用框架,可以應用在包括數據挖掘、信息處理或存儲歷史數據等各種程序中”。Scrapy最初是為了網頁抓取而設計的,也可以應用在獲取API所返回的數據或者通用的網絡爬蟲開發之中。作為一個爬蟲框架,可以根據自己的需求十分方便地使用Scrapy編寫出自己的爬蟲程序。畢竟要從使用Requests(請求)訪問URL開始編寫,把網頁解析、元素定位等功能一行行寫進去,再編寫爬蟲的循環抓取策略和數據處理機制等其他功能,這些流程做下來,工作量其實也是不小的。使用特定的框架有助于更高效地定制爬蟲程序。作為可能是最流行的Python爬蟲框架,掌握Scrapy爬蟲編寫是在爬蟲開發中邁出的重要一步。從構件上看,Scrapy這個爬蟲框架主要由以下組件組成。
① 引擎(Scrapy): 用來處理整個系統的數據流處理, 觸發事務,是框架的核心。
② 調度器(Scheduler): 用來接收引擎發過來的請求, 將請求放入隊列中, 并在引擎再次請求的時候返回。它決定下一個要抓取的網址, 同時擔負著網址去重這一項重要工作。
③ 下載器(Downloader): 用于下載網頁內容, 并將網頁內容返回給爬蟲。下載器的基礎是twisted,一個Python網絡引擎框架。
④ 爬蟲(Spiders): 用于從特定的網頁中提取自己需要的信息, 即Scrapy中所謂的實體(Item)。也可以從中提取出鏈接,讓Scrapy繼續抓取下一個頁面。
⑤ 管道(Pipeline): 負責處理爬蟲從網頁中抽取的實體,主要的功能是持久化信息、驗證實體的有效性、清洗信息等。
⑥ 下載器中間件(Downloader Middlewares): Scrapy引擎和下載器之間的框架,主要處理Scrapy引擎與下載器之間的請求及響應。
⑦ 爬蟲中間件(Spider Middlewares): Scrapy引擎和爬蟲之間的框架,主要工作是處理爬蟲的響應輸入和請求輸出。
⑧ 調度中間件(Scheduler Middewares): Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
它們之間的關系示意如圖1-6所示。
■ 圖1-6Scrapy架構
可以通過pip十分輕松地安裝Scrapy,安裝Scrapy首先要使用以下命令安裝lxml庫:pip install lxml。
如果已經安裝lxml,那就可以直接安裝Scrapy:pip install scrapy。
在終端中執行命令(后面的網址可以是其他域名,如www.bAIdu.com):scrapy shell www.douban.com。
可以看到Scrapy shell的反饋,如圖1-7所示。
■ 圖1-7Scrapy shell的反饋
為了在終端中創建一個Scrapy項目,首先進入自己想要存放項目的目錄下,也可以直接新建一個目錄(文件夾),這里在終端中使用命令創建一個新目錄并進入:
之后執行Scrapy框架的對應命令:
會發現目錄下多出了一個新的名為newcrawler的目錄。其中items.py定義了爬蟲的“實體”類,middlewares.py是中間件文件,pipelines.py是管道文件,spiders文件夾下是具體的爬蟲,scrapy.cfg則是爬蟲的配置文件。然后執行新建爬蟲的命令:
輸出為:
不難發現,genspider命令就是創建一個名為DoubanSpider的新爬蟲腳本,這個爬蟲對應的域名為douban.com。在輸出中發現了一個名為basic的模板,這其實是Scrapy的爬蟲模板。進入DoubanSpider.py中查看(見圖1-8)。
■ 圖1-8DoubanSpider.py
可見它繼承了 scrapy.Spider 類,其中還有一些類屬性和方法。name用來標識爬蟲。它在項目中是唯一的,每一個爬蟲有一個獨特的name。parse是一個處理 response 的方法,在Scrapy中,response 由每個 request 下載生成。作為parse方法的參數,response是一個 TextResponse 的實例,其中保存了頁面的內容。start_urls列表是一個代替start_requests方法的捷徑,所謂的start_requests方法,顧名思義,其任務就是從 url生成 scrapy.Request 對象,作為爬蟲的初始請求。之后會遇到的Scrapy爬蟲基本都有著類似這樣的結構。
為了定制Scrapy爬蟲,要根據自己的需求定義不同的Item,例如,創建一個針對頁面中所有正文文字的爬蟲,將Items.py中的內容改寫為:
之后編寫DoubanSpider.py:
這個爬蟲會先進入start_urls列表中的頁面(在這個例子中就是豆瓣網的首頁),收集信息完畢后就會停止。response.xpath('//a/text').extract這行語句將從response(其中保存著網頁信息)中使用xpath語句抽取出所有“a”標簽的文字內容(text)。下一句會將它們逐一打印。
運行爬蟲的命令是:
其中,spidername是爬蟲的名稱,即爬蟲類中的name屬性。
程序運行并進行爬取后,可以看到Scrapy爬取時的Log輸出,通過Log內容可以看到爬取的進度以及結果。由于爬取目標網站的一些反爬措施,如限制USER_AGENT,因此在允信之前可能還需要在setting.py中修改一些配置,如USER_AGENT等。
值得一提的是,除了簡單的scrapy.Spider,Scrapy還提供了諸如CrawlSpider、csvfeed等爬蟲模板,其中CrawlSpider是最為常用的。另外,Scrapy的Pipeline和Middleware都支持擴展,配合主爬蟲類使用將取得很流暢的抓取和調試體驗。
當然,Python爬蟲框架當然不止Scrapy一種,在其他諸多爬蟲框架中,還值得一提的是PySpider、Portia等。PySpider是一個“國產”的框架,由國內開發者編寫,擁有一個可視化的Web界面來編寫調試腳本,使得用戶可以進行諸多其他操作,如執行或停止程序、監控執行狀態、查看活動歷史等。除了Python,JAVA語言也常常用于爬蟲的開發,比較常見的爬蟲框架包括Nutch、Heritrix、WebMagic、Gecco等。爬蟲框架流行的原因,就在于開發者需要“多、快、好、省”地完成一些任務,如爬蟲的URL管理、線程池之類的模塊,如果自己從零做起,勢必需要一段時間的實驗、調試和修改。爬蟲框架將一些“底層”的事務預先做好,開發者只需要將注意力放在爬蟲本身的業務邏輯和功能開發上。有興趣的讀者可以繼續了解如PySpider這樣的新框架。
02
參考書籍
↑ 點擊圖片官方旗艦店優惠購書 ↑
Python爬蟲案例實戰(微課視頻版)
提供源碼、380分鐘視頻,基礎知識與豐富的Python爬蟲實戰案例相結合
呂云翔 韓延剛 張揚 主編
謝吉力 楊壯 王淥汀 王志鵬 楊瑞翌 副主編
定價:59.90元
ISBN:9787302633778
出版日期:2023.07.01
內容簡介
本書將以Python語言為基礎,由淺入深地探討網絡爬蟲技術,同時,通過具體的程序編寫和實踐來幫助讀者了解和學習Python爬蟲。
本書共包含20個案例,從內容上分為四部分,分別代表不同的爬蟲階段及場景,包括了Python爬蟲編寫的基礎知識,以及對爬蟲數據的存儲、深入處理和分析。
第一部分爬蟲基礎篇。該部分簡單介紹了爬蟲的基本知識,便于讀者掌握相關知識,對爬蟲有基本的認識。
第二部分實戰基礎篇(9個案例)。該部分既有簡單、容易實現的入門案例,也有改進的進階案例。豐富的內容包括爬蟲常用的多種工具及方法,覆蓋了爬蟲的請求、解析、清洗、入庫等全部常用流程,是入門實踐的最佳選擇。
第三部分框架應用篇(5個案例)。該部分內容從爬蟲框架的角度出發,介紹了幾個常用框架的案例,重點介紹了Scrapy框架,以及基于Python 3后的新特性的框架,如Gain和PySpider等,同時也對高并發應用場景下的異步爬蟲做了案例解析,是不容錯過的精彩內容。
第四部分爬蟲應用場景及數據處理篇(6個案例)。該部分內容從實際應用的角度出發,通過不同的案例展示了爬蟲爬取的數據的應用場景以及針對爬蟲數據的數據分析,可以讓讀者體會到爬蟲在不同場景上的應用,從另一個角度展示了爬蟲的魅力,可以給讀者帶來一些新的思考。
這四部分由淺入深地介紹了爬蟲常用的方法和工具,以及對爬蟲數據處理的應用和實現。但需要注意的是,爬蟲的技術棧不僅僅包含這幾部分,而且在實際工作中的細分方法也不盡相同。本書只是對目前爬蟲技術中最為常見的一些知識點,用案例的形式進行了分類和講解,而更多的應用也值得讀者在掌握一定的基礎技能后進一步探索。