Scrapy基礎 第三節:Scrapy框架結構和元件介紹
阿新 • • 發佈:2019-01-30
前置知識:
- 掌握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包下具體的模組
scrapy/core/scheduler.py
1)對每一個引擎傳遞過來的request請求進行指紋驗證 request_seen
2) 在request_seen中會判斷request物件的指紋資訊fp,是否已經存在於集合中,如果已經存在不再請求,去掉重複
3) 如果沒有請求過,就講request物件儲存到佇列mqs中,等待被排程