根據北理工網絡公開課《Python網絡爬蟲與信息提取》整理 課程鏈接:http://open.163.com/movie/2019/5/3/4/MEEMCM1NP_MEF8BVC34.html
一、Scrapy爬蟲框架介紹 功能強大的爬蟲框架 安裝:pip install scrapy 可用命令行執行scrapy -h來測試安裝的效果 scrapy 不是一個函數功能庫,而是一個爬蟲框架 爬蟲框架:是實現爬蟲功能的一個軟件結構和功能組件集合 是一個半成品,能幫助用戶實現專業網絡爬蟲 “5+2”部分: SPIDERS ||| INTERNET ||| MIDDLEWARE || ||| \||/ ITEM PIPELINES ENGINE ---- (MIDDLEWARE) DOWNLOADER SCHEDULER 在這五個模塊之間,數據,包括用戶提交的網絡爬蟲請求,以及從網絡上獲取的相關內容在這幾個模塊之間相互流動,形成數據流 scrapy框架包含三條主要數據流路徑 1、從SPIDERS經過ENGINE到達SCHEDULER,其中ENGINE從SPIDERS獲取爬取的用戶請求(REQUESTS,簡單理解爲一個url) SCHEDULER對爬取的請求進行調度 2、從SCHEDULER通過ENGINE到達DOWNLOADER模塊,並且數據最終返回到SPIDERS模塊 ENGINE從SCHEDULER模塊獲得下一個要爬取的請求,這個時候的請求是真實的,要去網絡上爬取的請求, 然後通過中間件發給DOWNLOADER模塊,DOWNLOADER模塊拿到這樣的請求後,真實的去連接互聯網,並且爬取相關的網頁 爬取到網頁後,將爬取的內容形成一個對象(RESPONSE),最終傳回SPIDERS 3、從SPIDERS通過ENGINE到ITEM PIPELINES模塊以及SCHEDULER模塊 首先SPIDERS處理從DOWNLOADER獲得的響應,產生了兩個數據類型,一個爲爬取項(ITEMS),另一個爲新的爬取請求(響應中的連接) ITEMS發給ITEM PIPELINES,REQUESTS發給SCHEDULER 從而爲後期的數據處理以及再次啓動網絡爬蟲請求提供了新的數據來源
見圖:
ENGINE控制各個路徑的數據流,並且從SCHEDULER模塊中獲取真實的爬取請求
入口在SPIDERS,出口在ITEM PIPELINES
其中ENGINE,SCHEDULER,DOWNLOADER爲已有的功能實現,用戶不需要去編寫
用戶需要去編寫和配置的是SPIDERS和ITEM PIPELINES
SPIDERS:向整個框架提供URL鏈接,同時要解析從網頁中的獲得的內容;
ITEM PIPELINES:負責對提取的信息進行後處理
也將這種代碼編寫方式稱爲“配置”
二、Scrapy爬蟲框架解析
1、ENGINE:控制所有模塊之間的數據流;根據條件觸發事件(不需要用戶修改)
2、DOWNLOADER:根據請求下載網頁(不需要用戶修改)
3、SCHEDULER:對所有爬取請求進行調度管理(不需要用戶修改)
4、Downloader Middleware(ENGINE和DOWNLOADER之間的中間件):實施ENGINE、SCHEDULER和DOWNLOADER之間進行用戶可配置的控制
功能:修改、丟棄、新增請求或響應
用戶可編寫配置代碼
5、SPIDERS:解析DOWNLOADER返回的響應(Response);產生爬取項(scraped item);產生額外的爬取請求(Request)
6、ITEM PIPELINES:
以流水線方式處理SPIDER產生的爬取項;
由一組操作順序組成,類似流水線,每個操作是一個ITEM PIPELINE類型;
可能操作包括:清理、檢驗和查重爬取項中的HTNL數據、將數據存儲到數據庫
7、Spider Midllerware(ENGINE和SPIDERS之間的中間件):對請求和爬取項的再處理
功能:修改、丟棄、新增請求或爬取項