1. 組件(Component)
Scrapy一共有七個(gè)主要組件
No. | 組件 | 功能 | 說明 |
---|---|---|---|
1 | 爬蟲引擎(Scrapy Engine) | 負(fù)責(zé)控制數(shù)據(jù)流在系統(tǒng)中所有組件中流動(dòng) | 相當(dāng)于發(fā)動(dòng)機(jī) |
2 | 調(diào)度器(Scheduler) | 從引擎接受request 并將他們?nèi)腙?duì)近范,以便之后引擎請(qǐng)求他們時(shí)提供給引擎 |
相當(dāng)于request 管家 |
3 | 下載器(Downloader) | 負(fù)責(zé)獲取頁(yè)面數(shù)據(jù)并提供給引擎,而后提供給spider 。 |
|
4 | 爬蟲(Spiders) | 分析response 并提取item 匿又,或者發(fā)出新的請(qǐng)求。 |
|
5 | 項(xiàng)目管道(Item Pipelines) | 負(fù)責(zé)處理被spider 提取出來(lái)的item 称勋,保存處理數(shù)據(jù) |
|
6 | 爬蟲中間件(Spider middlewares) | 引擎及Spider 之間的特定鉤子藐翎,處理spider的輸入(response )和輸出(items 及requests ) |
|
7 | 下載中間件(Downloader middlewares) | 引擎及下載器之間的特定鉤子,處理Downloader 傳遞給引擎的response 紫岩。 |
2. 數(shù)據(jù)流(Data flow)
Scrapy中的數(shù)據(jù)流由執(zhí)行引擎控制规惰,其過程如下:
- 引擎打開一個(gè)網(wǎng)站(open a domain),找到處理該網(wǎng)站的Spider并向該spider請(qǐng)求第一個(gè)要爬取的URL(s)泉蝌。
- 引擎從Spider中獲取到第一個(gè)要爬取的URL并在調(diào)度器(Scheduler)以Request調(diào)度歇万。
- 引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的URL。
- 調(diào)度器返回下一個(gè)要爬取的URL給引擎勋陪,引擎將URL通過下載中間件(請(qǐng)求(request)方向)轉(zhuǎn)發(fā)給下載器(Downloader)贪磺。
- 一旦頁(yè)面下載完畢,下載器生成一個(gè)該頁(yè)面的Response诅愚,并將其通過下載中間件(返回(response)方向)發(fā)送給引擎寒锚。
- 引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發(fā)送給Spider處理。
- Spider處理Response并返回爬取到的Item及(跟進(jìn)的)新的Request給引擎违孝。
- 引擎將(Spider返回的)爬取到的Item給Item Pipeline刹前,將(Spider返回的)Request給調(diào)度器。
- (從第二步)重復(fù)直到調(diào)度器中沒有更多地request雌桑,引擎關(guān)閉該網(wǎng)站喇喉。
3. 中間件
No. | 中間件 | 輸入 | 輸出 |
---|---|---|---|
1 | 爬蟲中間件(Spider Middleware) | process_spider_input() |
process_spider_output() |
2 | 下載器中間件(Download Middleware) | process_request() |
process_response() |