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