PySpider詳細介紹
PySipder是一個Python爬蟲程序
演示地址:http://demo.pyspider.org/
l使用Python編寫腳本,提供強大的API
lPython 2&3
l強大的WebUI和腳本編輯器、任務監控和項目管理和結果查看
l支持JavaScript頁面
l后端系統支持:MySQL,MongoDB, SQLite, Postgresql
l支持任務優先級、重試、定期抓取等
l分布式架構
下載地址:https://github.com/binux/pyspider
Scrapy
Scrapy是一套基于基于Twisted的異步處理框架,純python實現的爬蟲框架,用戶只需要定制開發幾個模塊就可以輕松的實現一個爬蟲,用來抓取網頁內容以及各種圖片
下載鏈接:
https://github.com/scrapy/scrapy
Scrapy是一個為了爬取網站數據,提取結構性數據而編寫的應用框架。可以應用在包括數據挖掘,信息處理或存儲歷史數據等一系列的程序中。
所謂網絡爬蟲,就是一個在網上到處或定向抓取數據的程序,當然,這種說法不夠專業,更專業的描述就是,抓取特定網站網頁的HTML數據。抓取網頁的一般方法是,定義一個入口頁面,然后一般一個頁面會有其他頁面的URL,于是從當前頁面獲取到這些URL加入到爬蟲的抓取隊列中,然后進入到新頁面后再遞歸的進行上述的操作,其實說來就跟深度遍歷或廣度遍歷一樣。
Scrapy使用Twisted這個異步網絡庫來處理網絡通訊,架構清晰,并且包含了各種中間件接口,可以靈活的完成各種需求。
l引擎(Scrapy
Engine),用來處理整個系統的數據流處理,觸發事務。
l調度器(Scheduler),用來接受引擎發過來的請求,壓入隊列中,并在引擎再次請求的時候返回。
l下載器(Downloader),用于下載網頁內容,并將網頁內容返回給蜘蛛。
l蜘蛛(Spiders),蜘蛛是主要干活的,用它來制訂特定域名或網頁的解析規則。編寫用于分析response并提取item(即獲取到的item)或額外跟進的URL的類。每個spider負責處理一個特定(或一些)網站。
l項目管道(Item
Pipeline),負責處理有蜘蛛從網頁中抽取的項目,他的主要任務是清晰、驗證和存儲數據。當頁面被蜘蛛解析后,將被發送到項目管道,并經過幾個特定的次序處理數據。
l下載器中間件(Downloader
Middlewares),位于Scrapy引擎和下載器之間的鉤子框架,主要是處理Scrapy引擎與下載器之間的請求及響應。
l蜘蛛中間件(Spider
Middlewares),介于Scrapy引擎和蜘蛛之間的鉤子框架,主要工作是處理蜘蛛的響應輸入和請求輸出。
l調度中間件(Scheduler
Middlewares),介于Scrapy引擎和調度之間的中間件,從Scrapy引擎發送到調度的請求和響應。
爬取流程
上圖綠線是數據流向,首先從初始URL開始,Scheduler會將其交給Downloader進行下載,下載之后會交給Spider進行分析,Spider分析出來的結果有兩種:一種是需要進一步抓取的鏈接,例如之前分析的“下一頁”的鏈接,這些東西會被傳回Scheduler;另一種是需要保存的數據,它們則被送到Item Pipeline那里,那是對數據進行后期處理(詳細分析、過濾、存儲等)的地方。另外,在數據流動的通道里還可以安裝各種中間件,進行必要的處理。
數據流
Scrapy中的數據流由執行引擎控制,其過程如下:
引擎打開一個網站(open a domain),找到處理該網站的Spider并向該spider請求第一個要爬取的URL(s)。
引擎從Spider中獲取到第一個要爬取的URL并在調度器(Scheduler)以Request調度。
引擎向調度器請求下一個要爬取的URL。
調度器返回下一個要爬取的URL給引擎,引擎將URL通過下載中間件(請求(request)方向)轉發給下載器(Downloader)。
一旦頁面下載完畢,下載器生成一個該頁面的Response,并將其通過下載中間件(返回(response)方向)發送給引擎。
引擎從下載器中接收到Response并通過Spider中間件(輸入方向)發送給Spider處理。
Spider處理Response并返回爬取到的Item及(跟進的)新的Request給引擎。
引擎將(Spider返回的)爬取到的Item給Item
Pipeline,將(Spider返回的)Request給調度器。(從第二步)重復直到調度器中沒有更多地request,引擎關閉該網站。
官方教程
http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/tutorial.html
安裝
最快方式是如下命令:
pipinstall scrapy
當然前提需要時有PIP命令了。
Portia
Portia是scrapyhub開源的一款可視化的爬蟲規則編寫工具。它提供可視化的Web頁面,你只需要通過點擊標注頁面上你需要抽取的數據,不需要任何編程知識即可完成規則的開發。
這些規則可以在#Scrapy#中使用,用于抓取頁面。
https://github.com/scrapinghub/portia
感謝打賞~~