1.scrapy框架的概念:
文檔地址:http://scrapy-chs.readthedocs.io/zh_CN/1.0/intro/overview.html
Scrapy 使用了Twisted['twɪstɪd]異步網絡框架,可以加快我們的下載速度。
Scrapy是一個爲了爬取網站數據,提取結構性數據而編寫的應用框架,我們只需要實現少量的代碼,就能夠快速的抓取。
2.異步和非阻塞的區別
- 異步:調用在發出之後,這個調用就直接返回,不管有無結果;異步是過程。
- 非阻塞:關注的是程序在等待調用結果(消息,返回值)時的狀態,指在不能立刻得到結果之前,該調用不會阻塞當前線程。
3.scrapy的工作流程
3.1 爬蟲流程
3.2 上面的流程可以改寫爲
3.3 scrapy的流程
其流程可以描述如下:
- 調度器把requests–>引擎–>下載中間件—>下載器
- 下載器發送請求,獲取響應---->下載中間件---->引擎—>爬蟲中間件—>爬蟲
- 爬蟲提取url地址,組裝成request對象---->爬蟲中間件—>引擎—>調度器
- 爬蟲提取數據—>引擎—>管道
- 管道進行數據的處理和保存
注意:
- 圖中綠色線條的表示數據的傳遞
- 注意圖中中間件的位置,決定了其作用
- 注意其中引擎的位置,所有的模塊之前相互獨立,只和引擎進行交互
3.4 scrapy中每個模塊的具體作用
scrapy中每個模塊的作用:
- 引擎(engine):負責數據和信號在不腰痛模塊間的傳遞
- 調度器(scheduler):實現一個隊列,存放引擎發過來的request請求對象
- 下載器(downloader):發送引擎發過來的request請求,獲取響應,並將響應交給引擎
- 爬蟲(spider):處理引擎發過來的response,提取數據,提取url,並交給引擎
- 管道(pipeline):處理引擎傳遞過來的數據,比如存儲 下載中間件(downloader middleware):可以自定義的下載擴展,比如設置代理ip 爬蟲中間件(spider middleware):可以自定義request請求和進行response過濾