Scrapy 使用了 Twisted 異步非阻塞網絡庫來處理網絡通信,總體架構大體以下(綠線是數據流向):json
簡單敘述一下每層圖的含義吧:網絡
Scrapy執行流程圖:架構
用scrapy框架的時候,必定要先明白執行的順序,代碼已寫好,程序開始運行~框架
注意!只有當調度器中不存在任何request了,整個程序纔會中止,(也就是說,對於下載失敗的URL,Scrapy也會從新下載。)異步
過程描述:scrapy
1.引擎:Hi!Spider, 你要處理哪個網站? 2.Spider:老大要我處理xxxx.com(初始URL)。 3.引擎:你把第一個須要處理的URL給我吧。 4.Spider:給你,第一個URL是xxxxxxx.com。 5.引擎:Hi!調度器,我這有request請求你幫我排序入隊一下。 6.調度器:好的,正在處理你等一下。 7.引擎:Hi!調度器,把你處理好的request請求給我。 8.調度器:給你,這是我處理好的request 9.引擎:Hi!下載器,你按照老大的下載中間件的設置幫我下載一下這個request請求。 10.下載器:好的!給你,這是下載好的東西。(若是失敗:sorry,這個request下載失敗了。而後引擎告訴調度器,這個request下載失敗了,你記錄一下,咱們待會兒再下載) 11.引擎:Hi!Spider,這是下載好的東西,而且已經按照老大的下載中間件處理過了,你本身處理一下(注意!這兒responses默認是交給def parse()這個函數處理的) 12.Spider:(處理完畢數據以後對於須要跟進的URL),Hi!引擎,我這裏有兩個結果,這個是我須要跟進的URL,還有這個是我獲取到的Item數據。 13.引擎:Hi !管道 我這兒有個item你幫我處理一下!調度器!這是須要跟進URL你幫我處理下。而後從第四步開始循環,直到獲取完老大須要所有信息。 14.管道、調度器:好的,如今就作!
建立項目:scrapy startproject proname
進入項目:cd proname
建立爬蟲:scrapy genspider spiname(爬蟲名) xxx.com (爬取域)
建立規則爬蟲:scrapy genspider -t crawl spiname(爬蟲名) xxx.com (爬取域)
運行爬蟲:scrapy crawl spiname -o file.jsonide
至此。轉載請註明出處。函數