前置知識:
- 掌握Python的基礎知識
- 對爬蟲基礎有一定了解
說明: 運行環境
Win10,Python3 64位
目錄:
1 Scrapy框架組成結構
2 Scapry數據流程
Scrapy中的數據流由執行引擎控制,其過程如下:
- 引擎打開一個網站(open a domain),找到處理該網站的Spider並向該spider請求第一個要爬取的URL(s)。
- 引擎從Spider中獲取到第一個要爬取的URL並在調度器(Scheduler)以Request調度
- 引擎向調度器請求下一個要爬取的URL。
- 調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
- 一旦頁面下載完畢,下載器生成一個該頁面的Response,並將其通過下載中間件(返回(response)方向)發送給引擎。
- 引擎從下載器中接收到Response並通過Spider中間件(輸入方向)發送給Spider處理。
- Spider處理Response並返回爬取到的Item及(跟進的)新的Request給引擎。
- 引擎將(Spider返回的)爬取到的Item給Item Pipeline,將(Spider返回的)Request給調度器。
- (從第二步)重複直到調度器中沒有更多地request,引擎關閉該網站。
3 Scrapy組件概覽
4 擴展源碼瞭解
只是瞭解一些用法還不夠,更深入一點需要去看源碼,scrapy也是託管在github上,項目主頁
源碼這麼多怎麼看,最根本的還是要掌握5大核心模塊是怎麼實現的,它們在源碼中的位置:
(1) Engine:scrapy/scrapy/core/engine.py
(2) Scheduler:scrapy/scrapy/core/scheduler.py
(3) Downloader:scrapy/scrapy/core/downloader/
(4) Spider:scrapy/scrapy/spider.py
(5) Item pipeline:scrapy/scrapy/pipelines/
scrapy入口:
從scrapy_home/bin/scrapy/cmdline.py這個模塊的execute()函數開始
每個具體的命令對應於一個scrapy_home/scrapy/commands包下具體的模塊
調度器(scheduler.py)
scrapy/core/scheduler.py
1)對每一個引擎傳遞過來的request請求進行指紋驗證 request_seen
2) 在request_seen中會判斷request對象的指紋信息fp,是否已經存在於集合中,如果已經存在不再請求,去掉重複
3) 如果沒有請求過,就講request對象保存到隊列mqs中,等待被調度