終于有人把Scrapy爬蟲框架講明白了
導(dǎo)讀:Scrapy由Python語(yǔ)言編寫,是一個(gè)快速、高層次的屏幕抓取和Web抓取框架,用于抓取Web站點(diǎn)并從頁(yè)面中提取出結(jié)構(gòu)化的數(shù)據(jù)。Scrapy用途廣泛,可以用于數(shù)據(jù)挖掘、監(jiān)測(cè)和自動(dòng)化測(cè)試等。

# python 3+
pip3 install scrapy
爬蟲中間件(Spider Middleware):位于Scrapy引擎和爬蟲之間的框架,主要用于處理爬蟲的響應(yīng)輸入和請(qǐng)求輸出。 調(diào)度器中間件(Scheduler Middleware):位于Scrapy引擎和調(diào)度器之間的框架,主要用于處理從Scrapy引擎發(fā)送到調(diào)度器的請(qǐng)求和響應(yīng)。 調(diào)度器:用來(lái)接收引擎發(fā)過(guò)來(lái)的請(qǐng)求,壓入隊(duì)列中,并在引擎再次請(qǐng)求的時(shí)候返回。它就像是一個(gè)URL的優(yōu)先隊(duì)列,由它來(lái)決定下一個(gè)要抓取的網(wǎng)址是什么,同時(shí)在這里會(huì)去除重復(fù)的網(wǎng)址。 下載器中間件(Downloader Middleware):位于Scrapy引擎和下載器之間的框架,主要用于處理Scrapy引擎與下載器之間的請(qǐng)求及響應(yīng)。代理IP和用戶代理可以在這里設(shè)置。 下載器:用于下載網(wǎng)頁(yè)內(nèi)容,并將網(wǎng)頁(yè)內(nèi)容返回給爬蟲。 Scrapy引擎(ScrapyEngine):用來(lái)控制整個(gè)系統(tǒng)的數(shù)據(jù)處理流程,并進(jìn)行事務(wù)處理的觸發(fā)。 爬蟲:爬蟲主要是干活的,用于從特定網(wǎng)頁(yè)中提取自己需要的信息,即所謂的項(xiàng)目(又稱實(shí)體)。也可以從中提取URL,讓Scrapy繼續(xù)爬取下一個(gè)頁(yè)面。 項(xiàng)目管道:負(fù)責(zé)處理爬蟲從網(wǎng)頁(yè)中爬取的項(xiàng)目,主要的功能就是持久化項(xiàng)目、驗(yàn)證項(xiàng)目的有效性、清除不需要的信息。當(dāng)頁(yè)面被爬蟲解析后,將被送到項(xiàng)目管道,并經(jīng)過(guò)幾個(gè)特定的次序來(lái)處理其數(shù)據(jù)。
引擎從調(diào)度器中取出一個(gè)URL用于接下來(lái)的抓取; 引擎把URL封裝成一個(gè)請(qǐng)求(request)傳給下載器; 下載器把資源下載下來(lái),并封裝成一個(gè)響應(yīng)(response); 爬蟲解析響應(yīng); 解析出的是項(xiàng)目,則交給項(xiàng)目管道進(jìn)行進(jìn)一步的處理; 解析出的是鏈接URL,則把URL交給調(diào)度器等待下一步的抓取。

引擎打開網(wǎng)站,找到處理該網(wǎng)站的爬蟲并向該爬蟲請(qǐng)求第一個(gè)要爬取的URL。 引擎從爬蟲中獲取到第一個(gè)要爬取的URL,并在調(diào)度器中以請(qǐng)求調(diào)度。 引擎向調(diào)度器請(qǐng)求下一個(gè)要爬取的URL。 調(diào)度器返回下一個(gè)要爬取的URL給引擎,引擎通過(guò)下載中間件轉(zhuǎn)給下載器。 一旦頁(yè)面下載完畢,下載器便會(huì)生成一個(gè)該頁(yè)面的響應(yīng),并通過(guò)下載器中間件將其發(fā)送給引擎。 引擎從下載器中接收到響應(yīng)并通過(guò)爬蟲中間件發(fā)送給爬蟲處理。 爬蟲處理響應(yīng),并返回爬取到的項(xiàng)目及新的請(qǐng)求給引擎。 引擎將爬蟲爬取到的項(xiàng)目傳給項(xiàng)目管道,將爬蟲返回的請(qǐng)求傳給調(diào)度器。 從第2步重復(fù)直到調(diào)度器中沒(méi)有更多的請(qǐng)求,引擎便會(huì)關(guān)閉該網(wǎng)站。
BeautifulSoup:作為程序員間非常流行的網(wǎng)頁(yè)分析庫(kù),它通?;贖TML代碼的結(jié)構(gòu)來(lái)構(gòu)造一個(gè)Python對(duì)象,對(duì)不良標(biāo)記的處理也非常合理,但它有一個(gè)缺點(diǎn),就是“慢”。 lxml:一個(gè)基于ElementTree的Python化的XML解析庫(kù)。


評(píng)論
圖片
表情
