Scrapy框架圖:數據庫
scrapy-engine:引擎,負責itemPipeline+Spiders+Scheduler+Downloader間的通信和數據傳遞緩存
scheduler:調度器,負責接收引擎發送過來的Requests請求,並將請求按必定方式排列入隊,以後等待引擎來請求時交給引擎框架
downloader:下載器,負責下載引擎發送的全部Requests請求,並將其捕獲到的Responses交還給引擎,引擎交給spiders來處理dom
spiders:負責處理全部的Responses,從中分析提取數據,獲取item字段須要的數據,並將須要跟進的URL提交給引擎,再次進入調度器scrapy
itempipeline:負責處理spiders中獲取到的item字段,並進行處理(去重/持久化存儲:就是保存數據)ide
downloader middlerwares:下載中間件,是一個自定義擴展下載功能的組件網站
spiders middlewares:spider中間件,操做引擎和spiders之間通訊的中間件(進入spiders的Responses和從spiders出去的Requests)中間件
流程(簡化版):blog
程序開始運行ip
spiders將須要處理的網站URL交給引擎,引擎再將Requests請求交給調度器scheduler進行處理:後者將Requests請求按必定方式排列入隊;
必定時間後(引擎要求取回Resquests)調度器將處理過的Requests交給引擎,引擎按照下載中間件downloader middlewares的設置要求將
Requests交給下載器downloader;下載器處理Requests(若是Requests下載失敗,引擎會告訴調度器,讓後者記錄並在以後從新下載),下
載成功的Resquests能夠捕獲到相應的Responses;下載器將Responses(spider中間件處理過的)交給引擎,隨後引擎將Responses交給spiders
處理;spiders處理Responses,將提取到的item字段數據交給itempipeline,同時將須要跟進的URL交給引擎,引擎再交給調度器,以此循環。
當調度器中不存在Requests請求時,程序運行結束
Scrapy項目實現步驟:
1.創建項目:
-在CMD下輸入scrapy3 startproject item_name(項目名)
-cd item_name>>>scrapy3 genspider spider_name(spider名) domain_name(域名)
2.在items.py文件中定義字段,這些字段用來臨時存儲須要保存的數據(方便之後數據保存到數據庫或本地)
3.在spider_name.py文件下編寫爬蟲腳本
4.在pipelines.py文件下保存數據
5.在settings.py文件下配置相關環境,這一步也不是必須作的
-將ROBOTSTXT_OBAY=True修改成ROBOTSTXT_OBAY=False(ROBOTSTXT協議規定哪些目錄能夠抓取)
-設置Requests頭信息,取消註釋行DEFAULT_REQUEST_HEADERS={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'}
-取消如下注釋:Scrapy能夠緩存已有的Requests,當再次請求時,若是存在緩存文檔則返回緩存文檔,而不用去網站請求,既能夠加快本地緩存速度,也能夠減輕網站壓力