2-----Scrapy框架架構和原理

這一篇文章主要是爲了對scrapy框架的工做流程以及各個組件功能的介紹python

Scrapy目前已經能夠很好的在python3上運行
Scrapy使用了Twisted做爲框架,Twisted有些特殊的地方是它是事件驅動的,而且比較適合異步的代碼。對於會阻塞線程的操做包含訪問文件、數據庫或者Web、產生新的進程並須要處理新進程的輸出(如運行shell命令)、執行系統層次操做的代碼(如等待系統隊列),Twisted提供了容許執行上面的操做但不會阻塞代碼執行的方法。shell

crapy data flow(流程圖)

Scrapy數據流是由執行的核心引擎(engine)控制,流程是這樣的:
一、爬蟲引擎ENGINE得到初始請求開始抓取。 
二、爬蟲引擎ENGINE開始請求調度程序SCHEDULER,並準備對下一次的請求進行抓取。 
三、爬蟲調度器返回下一個請求給爬蟲引擎。 
四、引擎請求發送到下載器DOWNLOADER,經過下載中間件下載網絡數據。 
五、一旦下載器完成頁面下載,將下載結果返回給爬蟲引擎ENGINE。 
六、爬蟲引擎ENGINE將下載器DOWNLOADER的響應經過中間件MIDDLEWARES返回給爬蟲SPIDERS進行處理。 
七、爬蟲SPIDERS處理響應,並經過中間件MIDDLEWARES返回處理後的items,以及新的請求給引擎。 
八、引擎發送處理後的items到項目管道,而後把處理結果返回給調度器SCHEDULER,調度器計劃處理下一個請求抓取。 
九、重複該過程(繼續步驟1),直到爬取完全部的url請求。
數據庫

各個組件介紹

爬蟲引擎(ENGINE)
爬蟲引擎負責控制各個組件之間的數據流,當某些操做觸發事件後都是經過engine來處理。網絡

調度器(SCHEDULER)
調度接收來engine的請求並將請求放入隊列中,並經過事件返回給engine。框架

下載器(DOWNLOADER)
經過engine請求下載網絡數據並將結果響應給engine。異步

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

管道項目(item pipeline)
負責處理engine返回spider解析後的數據,而且將數據持久化,例如將數據存入數據庫或者文件。ide

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

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

如何建立Scrapy項目

建立Scrapy項目

建立scrapy項目的命令是scrapy startproject 項目名,建立一個爬蟲
進入到項目目錄scrapy genspider 爬蟲名字 爬蟲的域名,例子以下:

python3 -m scrapy startproject test1

tems.py 負責數據模型的創建,相似於實體類。middlewares.py 本身定義的中間件。pipelines.py 負責對spider返回數據的處理。settings.py 負責對整個爬蟲的配置。spiders目錄 負責存放繼承自scrapy的爬蟲類。scrapy.cfg scrapy基礎配置

相關文章
相關標籤/搜索