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
感謝打賞~~