python的scramy架构_Scrapy的架构初探
1. 引言
本文簡(jiǎn)單講解一下Scrapy的架構(gòu)。沒錯(cuò),GooSeeker開源的通用提取器gsExtractor就是要集成到Scrapy架構(gòu)中,最看重的是Scrapy的事件驅(qū)動(dòng)的可擴(kuò)展的架構(gòu)。除了Scrapy,這一批研究對(duì)象還包括ScrapingHub,Import.io等,把先進(jìn)的思路、技術(shù)引進(jìn)來。
請(qǐng)注意,本文不想復(fù)述原文內(nèi)容,而是為了開源Python爬蟲的發(fā)展方向找參照,而且以9年來開發(fā)網(wǎng)絡(luò)爬蟲經(jīng)驗(yàn)作為對(duì)標(biāo),從而本文含有不少筆者主觀評(píng)述,如果想讀Scrapy官方原文,請(qǐng)點(diǎn)擊Scrapy官網(wǎng)的Architecture。
2. Scrapy架構(gòu)圖
Spiders就是針對(duì)特定目標(biāo)網(wǎng)站編寫的內(nèi)容提取器,這是在通用網(wǎng)絡(luò)爬蟲框架中最需要定制的部分。使用Scrapy創(chuàng)建一個(gè)爬蟲工程的時(shí)候,就會(huì)生成一個(gè)Spider架子,只需往里面填寫代碼,按照它的運(yùn)行模式填寫,就能融入Scrapy整體的數(shù)據(jù)流中。GooSeeker開源網(wǎng)絡(luò)爬蟲的目標(biāo)是節(jié)省下程序員一半以上的時(shí)間,關(guān)鍵就是提高Spider的定義和測(cè)試速度,解決方案參看《1分鐘快速生成網(wǎng)頁內(nèi)容提取器》,讓整個(gè)Scrapy爬蟲系統(tǒng)實(shí)現(xiàn)快速定制的目標(biāo)。
3. Scrapy的數(shù)據(jù)流(Data Flow)
Scrapy中的數(shù)據(jù)流由執(zhí)行引擎控制,下面的原文摘自Scrapy官網(wǎng),我根據(jù)猜測(cè)做了點(diǎn)評(píng),為進(jìn)一步開發(fā)GooSeeker開源爬蟲指示方向:
The Engine gets the first URLs to crawl from the Spider and schedules
them in the Scheduler, as Requests.
URL誰來準(zhǔn)備呢?看樣子是Spider自己來準(zhǔn)備,那么可以猜測(cè)Scrapy架構(gòu)部分(不包括Spider)主要做事件調(diào)度,不管網(wǎng)址的存儲(chǔ)。看起來類似GooSeeker會(huì)員中心的爬蟲羅盤,為目標(biāo)網(wǎng)站準(zhǔn)備一批網(wǎng)址,放在羅盤中準(zhǔn)備執(zhí)行爬蟲調(diào)度操作。所以,這個(gè)開源項(xiàng)目的下一個(gè)目標(biāo)是把URL的管理放在一個(gè)集中的調(diào)度庫(kù)里面
The Engine asks the Scheduler for the next URLs to crawl.
看到這里其實(shí)挺難理解的,要看一些其他文檔才能理解透。接第1點(diǎn),引擎從Spider中把網(wǎng)址拿到以后,封裝成一個(gè)Request,交給了事件循環(huán),會(huì)被Scheduler收來做調(diào)度管理的,暫且理解成對(duì)Request做排隊(duì)。引擎現(xiàn)在就找Scheduler要接下來要下載的網(wǎng)頁地址
The Scheduler returns the next URLs to crawl to the Engine and the
Engine sends them to the Downloader, passing through the Downloader
Middleware (request direction).
從調(diào)度器申請(qǐng)任務(wù),把申請(qǐng)到的任務(wù)交給下載器,在下載器和引擎之間有個(gè)下載器中間件,這是作為一個(gè)開發(fā)框架的必備亮點(diǎn),開發(fā)者可以在這里進(jìn)行一些定制化擴(kuò)展
Once the page finishes downloading the Downloader generates a Response
(with that page) and sends it to the Engine, passing through the
Downloader Middleware (response direction).
下載完成了,產(chǎn)生一個(gè)Response,通過下載器中間件交給引擎。注意,Response和前面的Request的首字母都是大寫,雖然我還沒有看其它Scrapy文檔,但是我猜測(cè)這是Scrapy框架內(nèi)部的事件對(duì)象,也可以推測(cè)出是一個(gè)異步的事件驅(qū)動(dòng)的引擎,對(duì)于高性能、低開銷引擎來說,這是必須的
The Engine receives the Response from the Downloader and sends it to
the Spider for processing, passing through the Spider Middleware
(input direction).
再次出現(xiàn)一個(gè)中間件,給開發(fā)者足夠的發(fā)揮空間
The Spider processes the Response and returns scraped items and new
Requests (to follow) to the Engine.
每個(gè)Spider順序抓取一個(gè)個(gè)網(wǎng)頁,完成一個(gè)就構(gòu)造另一個(gè)Request事件,開始另一個(gè)網(wǎng)頁的抓取
The Engine passes scraped items and new Requests returned by a spider
through Spider Middleware (output direction), and then sends processed
items to Item Pipelines and processed Requests to the Scheduler.
引擎作事件分發(fā)
The process repeats (from step 1) until there are no more requests
from the Scheduler.
持續(xù)不斷地運(yùn)行
4. 接下來的工作
接下來,我們將進(jìn)一步研讀Scrapy的文檔,實(shí)現(xiàn)GooSeeker開源Python爬蟲與Scrapy的集成
5. 文檔修改歷史
2016-06-11:V1.0,首次發(fā)布
總結(jié)
以上是生活随笔為你收集整理的python的scramy架构_Scrapy的架构初探的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python获取数据库的存储过程_pyt
- 下一篇: suse系统_你知道吗,Artifact