一般想要自動化蒐集網頁上的資料時,普遍都會使用像BeautifulSoup或Selenium套件開發Python網頁爬蟲來取得,但是,如果所要爬取的資料量較大,擁有複雜的邏輯處理及效率的要求,這時候就會建議使用Scrapy框架,來幫助開發人員建立一個維護性較好的Python網頁爬蟲。
而要使用Scrapy框架來開發大型的Python網頁爬蟲專案前,本文就先來帶大家瞭解一下Scrapy框架。
Q:Scrapy框架是什麼?
Srapy是一個網頁爬蟲「框架」,擁有完整的Python網頁爬蟲開發功能,也提供開發人員能夠進行客製化,並且,有一定的專案架構及執行流程,所以在未來的維護上較為容易。
Q:Scrapy框架模組包含哪些?
Scrapy框架是由以下5個主要模組結合而成,各自有負責的職責,來達成有效率的非同步Python網頁爬蟲,其中每個模組的功能說明如下:
1.SPIDERS(爬蟲程式):撰寫Python網頁爬蟲程式碼的地方,向ENGINE(引擎)發送網頁請求,以及將ENGINE(引擎)所接收的回應結果進行解析與爬取。
2.ENGINE(引擎):Scrapy框架的核心模組,就像汽車的引擎一樣,負責控制各個模組、傳遞請求及資料。
3.SCHEDULER(調度器):將ENGINE(引擎)所接收的SPIDERS(爬蟲程式)請求進行列隊,也就是排隊的意思,來調度請求的順序。
4.DOWNLOADER(下載器):負責下載ENGINE(引擎)接收到SCHEDULER(調度器)調度請求的網頁HTML原始碼,提供回應結果給ENGINE(引擎)。
5.ITEM PIPELINE(資料模型管道):將SPIDERS(爬蟲程式)所取得的資料進行後續處理,像是資料清理、存入資料庫(例:MySQL)或存入檔案文件(例:CSV、JSON)等。
Q:Scrapy框架執行流程是如何運作的?
對Scrapy框架的5個主要模組有一個基本的認識後,各個模組間的關係及執行流程又是什麼呢?
1.ENGINE(引擎)接收SPIDERS(爬蟲程式)所發送的一至多個請求。
2.ENGINE(引擎)將請求傳遞給SCHEDULER(調度器)進行列隊。
3.ENGINE(引擎)向SCHEDULER(調度器)提取下一個所要發送的請求。
4.ENGINE(引擎)將請求傳遞給DOWNLOADER(下載器)。
5.DOWNLOADER(下載器)將ENGINE(引擎)傳遞的請求網頁HTML原始碼下載下來,並且回應結果給ENGINE(引擎)。
6.ENGINE(引擎)將回應的結果傳遞給SPIDERS(爬蟲程式)。
7.SPIDERS(爬蟲程式)進行結果的解析及資料的爬取,組成ITEMS,傳遞給ENGINE(引擎)或發送新的請求。
8.ENGINE(引擎)判斷SPIDERS(爬蟲程式)所傳遞過來的如果是ITEMS(資料),就會傳遞給ITEM PIPELINES(資料模型管道),進行後續的資料清理及儲存等。反之,如果傳遞過來的是新的請求,也就是相當於第一個步驟,接著,傳遞給SCHEDULER(調度器),以此類推,重覆這樣的流程,直到SCHEDULER(調度器)沒有請求為止。
本文簡單介紹了Scrapy是一個功能完整與快速的Python網頁爬蟲框架,包含5個主要模組,各司其職,藉由ENGINE(引擎)來進行整合,並且依照一定的執行流程,來達成非同步的網頁資料爬取,適用於大型且複雜的Python網頁爬蟲專案,希望接下來的系列教學內容能夠幫助大家對Scrapy框架有一個基本的認識。