1. Scrapy組件
ENGINE:引擎,是Scrpy框架的核心,其他所有的組件都是在其控制寫工作的。引擎屬於內部組件,通常並不需要開發者去實現。
SCHEDULER:調度器負責對SPIDER提交的下載請求進行調度。調度器也是內部組件。
DOWNLOADER:下載器,負責下載頁面,即發送HTTP請求和接收HTTP響應。下載器也是內部組件。
SPIDER:爬蟲,負責從頁面解析和提取數據,以及生成新的HTTP請求。爬蟲屬於用戶組件,必須由開發者去實現。
MIDDLEWARE:中間件,負責對HTTP請求和接收HTTP響應進行處理。中間件屬於
可選組件,開發者可根據需要開發。ITEM PIPELINE:數據管道,負責對爬取的數據進行處理,如去重、寫入數據庫等,數據管道也是可選組件。
對於開發者來說,Spider是最核心的組件,Scrapy項目的開發都是圍繞著Spider展開的。
2. Scrapy框架數據流
Scrapy數據流中涉及到三種對象:
Request:Scrapy框架中的HTTP請求對象。
Response:Scrapy框架中的HTTP響應框架。
Item:從頁面中提取的數據對象。
以上幾種對象在框架中的流動過程:
當Spider要爬取某URL地址的頁面時,首先用該URL構造一個Request對象,提交給Engine(圖中1)
隨後Request對象隨後進入Scheduler,按照某種調度算法排隊,之後的某個時候從隊列中出來,遊Engine提交給Downloader(圖中的2、3、4)。
Downloader根據Request對象中的URL地址發送一次HTTP請求到目標網站服務器,並接受服務器返回的HTTP響應,構建一個Response對象(圖中的5),並有Engine將Response提交給Spider(圖中的6)
Spider提取Response中的數據,構造出Item對象或者根據新的連接構造出Request對象。分別由Engine提交給Item Pipeline或者Scheduler(圖中的7、8)
這個過程反覆進行,直至爬完所有的數據。同時,數據對象在出入Spider和Downloader時可能會經過Middleware進行進一步的處理。
用一個不太恰當的比喻,Scrapy的組件可以比作人的器官,Request和Response對象是血液,Item則是代謝產物。
閱讀更多 初沏的茶 的文章