Scrapy框架


原理圖一

 

1,spider打開某網頁,獲取到一個或者多個request,經由scrapy engine傳送給調度器scheduler
request特別多並且速度特別快會在scheduler形成請求隊列queue,由scheduler安排執行
2,schelduler會按照一定的次序取出請求,經由引擎, 下載器中間鍵,發送給下載器dowmloader
這里的下載器中間鍵是設定在請求執行前,因此可以設定代理,請求頭,cookie等
3,下載下來的網頁數據再次經過下載器中間鍵,經過引擎,經過爬蟲中間鍵傳送給爬蟲spiders
這里的下載器中間鍵是設定在請求執行后,因此可以修改請求的結果
這里的爬蟲中間鍵是設定在數據或者請求到達爬蟲之前,與下載器中間鍵有類似的功能
4,由爬蟲spider對下載下來的數據進行解析,按照item設定的數據結構經由爬蟲中間鍵,引擎發送給項目管道itempipeline
這里的項目管道itempipeline可以對數據進行進一步的清洗,存儲等操作
這里爬蟲極有可能從數據中解析到進一步的請求request,它會把請求經由引擎重新發送給調度器shelduler,調度器循環執行上述操作
5,項目管道itempipeline管理着最后的輸出

 原理圖二

Scrapy數據流是由執行的核心引擎(engine)控制,流程是這樣的:

1、爬蟲引擎獲得初始請求開始抓取。
2、爬蟲引擎開始請求調度程序,並准備對下一次的請求進行抓取。
3、爬蟲調度器返回下一個請求給爬蟲引擎。
4、引擎請求發送到下載器,通過下載中間件下載網絡數據。
5、一旦下載器完成頁面下載,將下載結果返回給爬蟲引擎。
6、引擎將下載器的響應通過中間件返回給爬蟲進行處理。
7、爬蟲處理響應,並通過中間件返回處理后的items,以及新的請求給引擎。
8、引擎發送處理后的items到項目管道,然后把處理結果返回給調度器,調度器計划處理下一個請求抓取。
9、重復該過程(繼續步驟1),直到爬取完所有的url請求。

Scrapy各組件的功能

爬蟲引擎(ENGINE)

爬蟲引擎負責控制各個組件之間的數據流,當某些操作觸發事件后都是通過engine來處理。

調度器

調度接收來engine的請求並將請求放入隊列中,並通過事件返回給engine。

下載器

通過engine請求下載網絡數據並將結果響應給engine。

Spider

Spider發出請求,並處理engine返回給它下載器響應數據,以items和規則內的數據請求(urls)返回給engine。

管道項目(item pipeline)

負責處理engine返回spider解析后的數據,並且將數據持久化,例如將數據存入數據庫或者文件。

下載中間件

下載中間件是engine和下載器交互組件,以鈎子(插件)的形式存在,可以代替接收請求、處理數據的下載以及將結果響應給engine。

spider中間件

spider中間件是engine和spider之間的交互組件,以鈎子(插件)的形式存在,可以代替處理response以及返回給engine items及新的請求集。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM