如何做好一款爬虫产品
https://www.jianshu.com/p/00dc7e0bb3d6
爬蟲產(chǎn)品分析
國(guó)內(nèi)外優(yōu)秀爬蟲產(chǎn)品
國(guó)外
- kimono labs,已經(jīng)被palantir收購(gòu),目前服務(wù)已經(jīng)暫停,desktop版本可用。
- import.io
國(guó)內(nèi)
- 集搜客,目前只能以插件的形式安裝在火狐瀏覽器上
- 八爪魚
試用分析
kimono
目前kimono labs服務(wù)以及暫停,但是kimono desktop版本依舊可以用,下面是兩個(gè)版本的對(duì)比情況。
從一個(gè)爬蟲產(chǎn)品來看,desktop版本的功能已經(jīng)是全的了。
kimono產(chǎn)品從完整意義上來說并不完全是一個(gè)爬蟲產(chǎn)品,爬取頁面信息只是其中一個(gè)環(huán)節(jié),它的目的是將整個(gè)
互聯(lián)網(wǎng)作為一個(gè)完整的數(shù)據(jù)庫(kù)來使用,簡(jiǎn)化應(yīng)用的開發(fā)流程。它的著眼點(diǎn)是應(yīng)用,而不是數(shù)據(jù)。后面會(huì)做介紹。
先看看kimono desktop版本如何使用:
其中第三步(安裝firebase)是可選的,這里可以科普一下firebase的基本知識(shí),具體使用因?yàn)榕廊?shù)據(jù)
關(guān)系不大,此處不做詳細(xì)介紹
Firebase攻克了實(shí)時(shí)性這一難關(guān),自動(dòng)響應(yīng)數(shù)據(jù)變化,為用戶帶來全新的交互體驗(yàn)。用戶可以使用JavaScript 直接從客戶端訪問Firebase中存儲(chǔ)的數(shù)據(jù),無需運(yùn)行自有數(shù)據(jù)庫(kù)或網(wǎng)絡(luò)服務(wù)器即可構(gòu)建動(dòng)態(tài)的、數(shù)據(jù)驅(qū)動(dòng)的網(wǎng)站,且與用戶現(xiàn)有后臺(tái)工具并行不悖。用戶無需購(gòu)置服務(wù)器,也不需要編寫服務(wù)器代碼,只需應(yīng)用HTML 和JavaScript技術(shù)就可創(chuàng)建交互性極強(qiáng)的應(yīng)用。Firebase簡(jiǎn)化了編碼工作,使用戶可以專注問題本身,節(jié)省開發(fā)時(shí)間,迅速完成應(yīng)用。
從上面也可以看出:kimono主要的用途還是快速開發(fā)應(yīng)用。盡量簡(jiǎn)化用戶獲取數(shù)據(jù)的過程。
以zhihu為例,探索一下kimono的數(shù)據(jù)收集和服務(wù)提供過程:
安裝插件
中間的k字圖標(biāo)就是安裝好的chrome瀏覽器插件,目前看Kimono只支持chrome瀏覽器,desktop版本支持mac版本和windows版本。
安裝chrome插件需要用到vpn
屬性字段定義
kimono抓取數(shù)據(jù)的過程比較直觀,如圖所示,左上角有屬性框,可以定義要抓取的屬性的名字,屬性的內(nèi)容可以直接用鼠標(biāo)在頁面上點(diǎn)選,其中黃色的部分就是點(diǎn)選的結(jié)果。
可以定義多個(gè)屬性,在上面的插件欄中每個(gè)屬性都用一個(gè)圓形圖標(biāo)表示,圓形圖標(biāo)中的數(shù)字表明在頁面內(nèi)容中獲取到了幾個(gè)數(shù)據(jù)。
*** 注意:***
- 如果鼠標(biāo)點(diǎn)選的時(shí)候,選中了多個(gè)內(nèi)容,可以通過x按鈕去掉不想要的內(nèi)容
- 選擇的力度有時(shí)候并沒有那么細(xì),比如只想要某個(gè)數(shù)量,但是會(huì)把放在一起的漢字選上
通過插件中的預(yù)覽按鈕,可以看到當(dāng)前頁面的屬性選取情況。這里從當(dāng)前的問題頁中選了四個(gè)字段,可以看到字段的名稱和內(nèi)容。
這里選取頁面屬性是通過頁面中的dom樹來實(shí)現(xiàn)的,在高級(jí)模式下,可以看到每個(gè)屬性對(duì)應(yīng)的dom樹路徑,并可以按需來進(jìn)行修改路徑。
這也是為什么某一些內(nèi)容會(huì)多選的原因,最細(xì)的粒度只能到dom樹的一個(gè)葉子節(jié)點(diǎn)。
因?yàn)閗imono是一個(gè)快速構(gòu)建api的系統(tǒng),所以也提供了api常用的幾種數(shù)據(jù)傳輸格式,主要是json,csv和rss,這里看一下就可以,不用太關(guān)注。
當(dāng)把頁面中所有的屬性都選取完畢之后,就可以點(diǎn)擊插件上的done按鈕,完成屬性字段的定義了。這時(shí)候會(huì)彈出一個(gè)api的定義框,可以定義api的名稱。
api創(chuàng)建完畢后,可以看到kimono desktop上也有了剛剛創(chuàng)建的api。kimono desktop在啟動(dòng)之后會(huì)在本地啟動(dòng)一個(gè)服務(wù)器,插件會(huì)在創(chuàng)建api的時(shí)候?qū)?br /> 內(nèi)容同步到kimono desktop app中。
數(shù)據(jù)抓取
上面只是從頁面中定義了要抓取的屬性,相當(dāng)于定義了一個(gè)頁面的抓取規(guī)則,并沒有開始實(shí)際頁面抓取的過程。從kimono desktop中點(diǎn)開創(chuàng)建的api可以看到下面三部分內(nèi)容:
Data View/Crawl Setup/Modify Result。對(duì)應(yīng)了完整的數(shù)據(jù)爬取過程。
- Data View
Data View中是用不同的格式來顯示最終的獲取結(jié)果,目前這個(gè)api還沒有啟動(dòng),只有在定義字段的時(shí)候獲取到的一條結(jié)果。
- Crawl Setup
Crawl Setup部分的內(nèi)容比較重要,爬蟲系統(tǒng)中最基礎(chǔ)的有兩部分,一部分是屬性字段的定義,一部分是url的生成,
Crawl Setup定義了四種url的生成規(guī)則:Source URL Only/Manual URL List/Generated URL List/Source URL API. 前兩種很好理解,第三種是根據(jù)特別的規(guī)則生成URL。規(guī)則有三種:缺省值,普通列表和隨機(jī)值。隨機(jī)值的時(shí)候可以是一個(gè)范圍。
通過隨機(jī)值生成的URL列表如下,從41181466-41191466,共有9981個(gè)pages:
- Modify Result
前面說過獲取的結(jié)果的最小的粒度只是dom樹的葉子節(jié)點(diǎn)。這樣有一些數(shù)據(jù)就比較粗糙。這里提供了修改獲取的結(jié)果的機(jī)會(huì),可以對(duì)獲取到的原始數(shù)據(jù)做二次處理。
kimono只支持通過JavaScript修改結(jié)果數(shù)據(jù)
根據(jù)上面的配置,最終的爬取結(jié)果如下:
這里因?yàn)闆]有注冊(cè)kimono的賬戶,也沒有配置自己的firebase服務(wù),所以沒有繼續(xù)測(cè)試通過網(wǎng)絡(luò)調(diào)用創(chuàng)建的api獲取數(shù)據(jù)。因?yàn)楸敬沃饕治雠老x產(chǎn)品,不關(guān)注如何作為一個(gè)快速app的服務(wù),所以api的可用性部分不再驗(yàn)證。
總結(jié)
梳理了一下kimono的整體架構(gòu):
從上圖可以看出kimono的一些設(shè)計(jì)思路:
-
爬取規(guī)則(屬性字段)和爬蟲是分離的,整體來說可以分為三部分:規(guī)則定義、調(diào)度規(guī)則、爬蟲系統(tǒng)部分。
-
因?yàn)榕廊∫?guī)則部分是和網(wǎng)頁緊密相關(guān)的,所以這部分直接以瀏覽器插件的形式嵌入到瀏覽器中,方便用戶直觀地定義個(gè)性化的爬取規(guī)則。
-
調(diào)度規(guī)則主要是url的定義,這部分也需要用戶自定義,不同網(wǎng)站的規(guī)則往往不同,這里通過一個(gè)桌面軟件能方便使用,當(dāng)然也可以直接放在網(wǎng)站上,現(xiàn)在不能使用的kimono labs應(yīng)該就是這樣,可以節(jié)省用戶下載app的開銷,但是不好的地方是要保持聯(lián)網(wǎng),這樣才能保證瀏覽器插件和網(wǎng)站的通信。目前kimono提供了桌面端程序和網(wǎng)絡(luò)端程序,還是很全面的。
-
提供了修改結(jié)果的接口,允許用戶對(duì)直接抓取的結(jié)果進(jìn)行修改,這樣直接可以輸出最終數(shù)據(jù)了。當(dāng)然kimono本質(zhì)上輸出的是接口,不是數(shù)據(jù)。
-
爬蟲系統(tǒng)我們是看不到的,完全隱藏在kimono服務(wù)器后面。
優(yōu)點(diǎn)
-
簡(jiǎn)潔直觀,也相對(duì)靈活。對(duì)前端知識(shí)了解較少也可以使用。同時(shí)也提供了高級(jí)模式供高端用戶進(jìn)行個(gè)性化的配置。
-
完全屏蔽爬蟲細(xì)節(jié),用戶只需要按照自己的需求考慮業(yè)務(wù)邏輯即可,不用關(guān)心技術(shù)細(xì)節(jié)。
-
ui界面做得比較美觀易用。
缺點(diǎn)
-
目前只支持不需要登陸的頁面,沒有提供配置cookie或者其他的繞過登陸的機(jī)制。
-
某些情況下用頁面點(diǎn)選的方式會(huì)導(dǎo)致一些元素獲取不到,不過有高級(jí)模式可以彌補(bǔ)。
-
url的生成規(guī)則比較簡(jiǎn)單,一些設(shè)計(jì)復(fù)雜的頁面會(huì)比較難以生成有效的url。
-
界面過于簡(jiǎn)潔,用戶可以控制的部分比較少,碰到一些反爬蟲機(jī)制的時(shí)候用戶可能不好調(diào)整。易用性和靈活性兩難全。
import.io
import.io的magic很神奇,直接在輸入一個(gè)網(wǎng)址,直接就能自動(dòng)分析出來要爬的字段。雖然有冗余,也已經(jīng)很神奇了。
import.io也有app,沒有瀏覽器插件,app有windows/mac/linux平臺(tái)的。通過app可以使用全部的功能,這點(diǎn)和kimono不同,kimono的桌面端程序的功能比網(wǎng)絡(luò)端的少。
完整版的import.io包含下面四個(gè)組件:
Magic
magic功能和網(wǎng)頁版的一樣,能智能解析網(wǎng)頁上的內(nèi)容,但是沒有辦法編輯獲取的數(shù)據(jù)字段的內(nèi)容。具體技術(shù)不太清楚,猜測(cè)是用了類似于自然語言解析之類的技術(shù),這個(gè)是importio的比較酷的功能,但是目前看實(shí)用性并不大。
Extractor
import的extractor和kimono的功能比較類似,可以實(shí)現(xiàn)爬取規(guī)則的定義和修改,定義爬取路線(URL的生成規(guī)則),并提供結(jié)果的導(dǎo)出,或者作為一個(gè)API存在。Extractor通過xpath來定義爬取規(guī)則的,沒有用jquery.同時(shí)也不提供對(duì)結(jié)果數(shù)據(jù)的修改。
Crawler
Crawler在Extractor的基礎(chǔ)上,實(shí)現(xiàn)了自動(dòng)翻頁功能。假設(shè)要采集頁面數(shù)為100的網(wǎng)頁數(shù)據(jù),通過 http://import.io 的Crawler功能就能一鍵將這100頁的信息采集下來,那么具體的采集過程是如何實(shí)現(xiàn)的,下面筆者帶你簡(jiǎn)單了解一下Crawler的采集過程。
Connector
就是在網(wǎng)頁上做動(dòng)作,主要是針對(duì)網(wǎng)址無變化,但信息在深層次頁面上。需要做了動(dòng)作以后才能顯示出來,但是頁面的網(wǎng)址又不發(fā)生變化,這就大大增加了采集數(shù)據(jù)的難度,因?yàn)榧词古渲煤昧艘?guī)則,結(jié)果爬蟲進(jìn)入的頁面是初始頁面,無法采集到目標(biāo)信息,而Connector的存在就是為了解決此類問題。Connector可以記錄這一點(diǎn)擊過程,進(jìn)而采集到目標(biāo)頁面的信息。
對(duì)import.io和集搜客的詳細(xì)分析,集搜客的CTO已經(jīng)做了很詳細(xì)的分析,可以參考下面的引用:
import.io和集搜客
從分析文章中可以看出gooseeker只能針對(duì)一些網(wǎng)站預(yù)先定義好爬取規(guī)則,然后公布給別人用。
這個(gè)過程只是將爬取過程進(jìn)行了自動(dòng)化,簡(jiǎn)化了爬蟲的環(huán)境配置工作,在通用性上并沒有太多亮點(diǎn),
相比來說,import.io做得更好,在通用性上已經(jīng)比較智能了,這個(gè)應(yīng)該是一個(gè)優(yōu)秀爬蟲產(chǎn)品的方向。
http://www.zhihu.com/question/41392315/answer/90929603?from=profile_answer_card
總結(jié)
importio的主要功能也是集中在定義爬取規(guī)則和定義爬取路線上。功能做得更復(fù)雜,相比kimono來說,上手的難度更大一些,但是功能更強(qiáng)大一些,相比來說也更加靈活。
集搜客沒有用過,需要使用指定版本的firefox瀏覽器才能使用(不是最新版本的),用戶體驗(yàn)并不好。
importio和集搜客因?yàn)橐呀?jīng)有人做過分析,所以這里分析的就比較簡(jiǎn)略,如果感興趣的可以看上面知乎上華天清的分析。
八爪魚
八爪魚是國(guó)內(nèi)一款很好的爬蟲工具,只有windows版本,并且需要安裝在pc上注冊(cè)之后使用,收費(fèi)版會(huì)開放一些更高級(jí)的功能。
從八爪魚的宣傳來看,目前已有很大的用戶群了。
八爪魚和kimono和importio相比,是一個(gè)純粹的爬蟲產(chǎn)品。專注于替企業(yè)和個(gè)人爬取數(shù)據(jù),而且目前已經(jīng)做得相當(dāng)好了,八爪重對(duì)于爬蟲生態(tài)也有涉及,有社區(qū)可以交易爬取規(guī)則,如我們先前爬取的58的頁面在社區(qū)中就有現(xiàn)成的規(guī)則。這也是一種好的方式,可以避免簡(jiǎn)單重復(fù)的工作。也有一部分人在社區(qū)上交易數(shù)據(jù)
八爪魚的界面雖然不夠美觀簡(jiǎn)介,但是功能比較聚焦,一個(gè)單頁面的完整爬取過程如下:
爬取規(guī)則的定義沒有亮點(diǎn),都是通過鼠標(biāo)點(diǎn)擊獲取要爬取的內(nèi)容,然后生成爬取規(guī)則。這里做得不好的是,爬取規(guī)則不能修改。但是提供了一些常用的字段,比如url和爬取時(shí)間等等。有小改進(jìn)。
八爪魚在生成爬取路線的時(shí)候,不易用,沒有像kimono和importio那樣簡(jiǎn)單易用的url生成規(guī)則。
總結(jié)
相比其他爬蟲產(chǎn)品,八爪魚在做爬蟲產(chǎn)品的同時(shí)也涉及了一部分爬蟲生態(tài)的內(nèi)容。可以提取和交易爬蟲規(guī)則是一個(gè)亮點(diǎn)。其他的比較實(shí)用的功能并沒有。
思考
根據(jù)上面不同爬蟲產(chǎn)品的試用,從用戶角度來看好用的爬蟲產(chǎn)品應(yīng)該有下面幾個(gè)特點(diǎn):
-
規(guī)則提取簡(jiǎn)單,能通過可視化的簡(jiǎn)潔的方式來提取規(guī)則,這方面kimono做得最好。
-
要提供修改規(guī)則的高級(jí)模式,允許用戶對(duì)規(guī)則進(jìn)行修改,滿足少部分用戶的需求。
-
爬取路線要清晰,可以提供多種配置url的方式,而且要清晰簡(jiǎn)明,kimono和importio都比較清晰,kimono有4種方式配置url,importio有3種,八爪魚簡(jiǎn)單試用了一下只看到2種且不清晰。
-
可以對(duì)爬取之后的數(shù)據(jù)進(jìn)行修改,這樣可以將一些費(fèi)時(shí)的操作在數(shù)據(jù)處理的過程中就完成了,不用到應(yīng)用部分再處理。
-
對(duì)用戶屏蔽盡量多的細(xì)節(jié),對(duì)于分布式爬取,數(shù)據(jù)存儲(chǔ)過程,不同組件之間的通信等都要盡量屏蔽掉,讓用戶能集中于數(shù)據(jù)獲取過程。
-
能自動(dòng)識(shí)別頁面中有用的信息,給出一些模糊的數(shù)據(jù)并支持后續(xù)修改。importio的magic支持智能獲取信息字段,但是不支持對(duì)識(shí)別出來的數(shù)據(jù)進(jìn)行處理。網(wǎng)上看到有個(gè)教程上面有修改數(shù)據(jù)字段的操作,但是實(shí)際試用過程中并沒有看到該功能。
另外一些沒有被其他爬蟲實(shí)現(xiàn),但是可能是重要的功能
-
用戶登錄,對(duì)登錄過程的支持,復(fù)雜的情況下要可以識(shí)別驗(yàn)證碼。
-
支持選取不同的數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù),目前的幾款產(chǎn)品都將數(shù)據(jù)存儲(chǔ)在他們自己的服務(wù)器上,對(duì)外提供導(dǎo)出等接口,數(shù)據(jù)量很龐大的時(shí)候并不合適。
-
如果必要能開放更靈活和復(fù)雜的功能給用戶,如能調(diào)整爬取速率,配置代理等來規(guī)避一些反爬蟲機(jī)制
-
支持增量爬取,目前看上述幾種爬蟲產(chǎn)品都不支持增量爬取。
作者:Endzzz
鏈接:https://www.jianshu.com/p/00dc7e0bb3d6
來源:簡(jiǎn)書
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/davidwang456/articles/8360981.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的如何做好一款爬虫产品的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网主要安全威胁解读及应对方案大讨论
- 下一篇: 阿里异地多活与同城双活的架构演进