1.python爬蟲——開源項(xiàng)目scrapy

PySpider

PySpider詳細(xì)介紹

PySipder是一個(gè)Python爬蟲程序

演示地址:http://demo.pyspider.org/

l使用Python編寫腳本,提供強(qiáng)大的API

lPython 2&3

l強(qiáng)大的WebUI和腳本編輯器、任務(wù)監(jiān)控和項(xiàng)目管理和結(jié)果查看

l支持JavaScript頁面

l后端系統(tǒng)支持:MySQL,MongoDB, SQLite, Postgresql

l支持任務(wù)優(yōu)先級(jí)、重試、定期抓取等

l分布式架構(gòu)

下載地址:https://github.com/binux/pyspider

Scrapy

Scrapy是一套基于基于Twisted的異步處理框架,純python實(shí)現(xiàn)的爬蟲框架,用戶只需要定制開發(fā)幾個(gè)模塊就可以輕松的實(shí)現(xiàn)一個(gè)爬蟲,用來抓取網(wǎng)頁內(nèi)容以及各種圖片

下載鏈接:

https://github.com/scrapy/scrapy

Scrapy是一個(gè)為了爬取網(wǎng)站數(shù)據(jù),提取結(jié)構(gòu)性數(shù)據(jù)而編寫的應(yīng)用框架??梢詰?yīng)用在包括數(shù)據(jù)挖掘,信息處理或存儲(chǔ)歷史數(shù)據(jù)等一系列的程序中。

所謂網(wǎng)絡(luò)爬蟲,就是一個(gè)在網(wǎng)上到處或定向抓取數(shù)據(jù)的程序,當(dāng)然,這種說法不夠?qū)I(yè),更專業(yè)的描述就是,抓取特定網(wǎng)站網(wǎng)頁的HTML數(shù)據(jù)。抓取網(wǎng)頁的一般方法是,定義一個(gè)入口頁面,然后一般一個(gè)頁面會(huì)有其他頁面的URL,于是從當(dāng)前頁面獲取到這些URL加入到爬蟲的抓取隊(duì)列中,然后進(jìn)入到新頁面后再遞歸的進(jìn)行上述的操作,其實(shí)說來就跟深度遍歷或廣度遍歷一樣。

Scrapy使用Twisted這個(gè)異步網(wǎng)絡(luò)庫來處理網(wǎng)絡(luò)通訊,架構(gòu)清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。

l引擎(Scrapy

Engine),用來處理整個(gè)系統(tǒng)的數(shù)據(jù)流處理,觸發(fā)事務(wù)。

l調(diào)度器(Scheduler),用來接受引擎發(fā)過來的請(qǐng)求,壓入隊(duì)列中,并在引擎再次請(qǐng)求的時(shí)候返回。

l下載器(Downloader),用于下載網(wǎng)頁內(nèi)容,并將網(wǎng)頁內(nèi)容返回給蜘蛛。

l蜘蛛(Spiders),蜘蛛是主要干活的,用它來制訂特定域名或網(wǎng)頁的解析規(guī)則。編寫用于分析response并提取item(即獲取到的item)或額外跟進(jìn)的URL的類。每個(gè)spider負(fù)責(zé)處理一個(gè)特定(或一些)網(wǎng)站。

l項(xiàng)目管道(Item

Pipeline),負(fù)責(zé)處理有蜘蛛從網(wǎng)頁中抽取的項(xiàng)目,他的主要任務(wù)是清晰、驗(yàn)證和存儲(chǔ)數(shù)據(jù)。當(dāng)頁面被蜘蛛解析后,將被發(fā)送到項(xiàng)目管道,并經(jīng)過幾個(gè)特定的次序處理數(shù)據(jù)。

l下載器中間件(Downloader

Middlewares),位于Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請(qǐng)求及響應(yīng)。

l蜘蛛中間件(Spider

Middlewares),介于Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的響應(yīng)輸入和請(qǐng)求輸出。

l調(diào)度中間件(Scheduler

Middlewares),介于Scrapy引擎和調(diào)度之間的中間件,從Scrapy引擎發(fā)送到調(diào)度的請(qǐng)求和響應(yīng)。

爬取流程

上圖綠線是數(shù)據(jù)流向,首先從初始URL開始,Scheduler會(huì)將其交給Downloader進(jìn)行下載,下載之后會(huì)交給Spider進(jìn)行分析,Spider分析出來的結(jié)果有兩種:一種是需要進(jìn)一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會(huì)被傳回Scheduler;另一種是需要保存的數(shù)據(jù),它們則被送到Item Pipeline那里,那是對(duì)數(shù)據(jù)進(jìn)行后期處理(詳細(xì)分析、過濾、存儲(chǔ)等)的地方。另外,在數(shù)據(jù)流動(dòng)的通道里還可以安裝各種中間件,進(jìn)行必要的處理。

數(shù)據(jù)流

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)。

一旦頁面下載完畢,下載器生成一個(gè)該頁面的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)站。

官方教程

http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html

安裝

最快方式是如下命令:

pipinstall scrapy

當(dāng)然前提需要時(shí)有PIP命令了。

Portia

Portia是scrapyhub開源的一款可視化的爬蟲規(guī)則編寫工具。它提供可視化的Web頁面,你只需要通過點(diǎn)擊標(biāo)注頁面上你需要抽取的數(shù)據(jù),不需要任何編程知識(shí)即可完成規(guī)則的開發(fā)。

這些規(guī)則可以在#Scrapy#中使用,用于抓取頁面。

https://github.com/scrapinghub/portia

感謝打賞~~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容