標籤:

淺談一下最近使用八爪魚採集器遇到的坑(還有對比其他採集軟體和爬蟲)

首先八爪魚採集器功能比較多,而且對比主流的採集軟體八爪魚採集器不落下風。我個人比較熟悉的主流採集工具有火車採集器、火車瀏覽器、八爪魚、GooSeeker等。而這些軟體之中,火車採集器效率極高,爬取速度快,但是規則配置煩瑣,有一些高級功能必須付費版,甚至高級付費版才能使用,煩死……火車瀏覽器功能強大,但是和採集器不一樣,它以模擬網頁操作的形式來採集或者操作網頁,效率低於火車採集器,和八爪魚差不太多,功能各有千秋,費用就不怎麼樣了,貴到死。GooSeeker只是簡單用了一下,基本功能還可以,規則編製有些繁瑣,部分其他採集工具能實現的高級功能它不太好實現,至少我沒直接看懂怎麼實現。八爪魚作為可視化型的採集工具,算是最折中和方便的,配置規則速度快,比費勁分析寫爬蟲代碼容易。

首先有一些很麻煩的坑我要說一下為什麼其他幾種採集方法會很費勁。AJAX載入技術大家已經比較清楚了,而且已經運用到了很多網站之中,這種技術對傻瓜採集工具和小白用戶來說是致命的,首先你採集不到合適的數據,其次你也無法很好地使用傻瓜軟體翻頁和下拉到頁面底端,麻煩到死。

火車採集器沒有網頁操作能力,能支持的只是通過POST和GET等方式獲得內容詳情頁,再進行採集,這就需要使用到抓包工具Fiddler來抓包分析,好拼配組合出需要採集的網址。中途過程之酸爽,估計讓很多小萌新吐血到死。苦逼的是,一個網站一個樣,也沒什麼太好的通用型教程,小白只能吐血而死。還有就是,如果你只花了幾百塊錢買了個版本,那麼……JSON數據無法解析啊,我就XXX它們……不能解析的話,很多主流新聞網站的評論都廢掉了。火車瀏覽器就不說了,功能很好,就是設置規則繁瑣,免費版只能運行30分鐘,適合有錢和有技術人員的中小企業。

網路爬蟲技術JAVA的我不懂,我只熟悉Python的,基本靜態頁面爬取和分析那簡直是爽歪歪,輕鬆搞定多線程啪啪啪!但是對AJAX最煩人的,最容易遇到的幾個問題:

A,下拉到頁面底端才會載入數據

B,網址不會改變,點擊上下頁只會非同步載入數據(多用於分頁文章或者評論)

C,裡面有加密或者需要js代碼中獲取某些數據之類的

如果偷懶,那就用Selenium+PhantomJS,採取執行部分頁面JS腳本,或者通過DOM定位等形式來載入出來需要的數據。如果想要速度,可以通過抓包工具分析,然後程序拼出網址,最終採集的方式。Python對JSON數據解析還是很給力的,雖然對於數據裡帶「,」的格式解析容易出問題,我到現在也不是太會處理。需要再研究一下。總之程序是萬能的,就看程序猿水平如何了…… _(:з」∠)_(哦,我不是程序猿……我是產品汪啊……)

八爪魚這一點完全是小白化、智能化、傻瓜化的,也許一些公司的領導會覺得這麼簡單就能採集了,找個實習生就解決了,沒技術含量。對此我只能說,這群自以為是領導就不思進取到處忽悠騙錢的SB,他們哪裡知道這軟體的好玩之處。雖然我很想買個企業版,不過公司里有技術人員,又會寫爬蟲,實在不值得掏這個成本了,所以算了。

所謂簡單只是表面的,實際上八爪魚想用好了需要知道HTML語言結構、XPATH規則、正則表達式等基本知識。以下是我遇到和發現的一些問題,簡單分享一下。

我自己最近用雲採集也經常遇到一些問題,採集運行一段時間就停止了,一開始也鬱悶,八爪魚雲採集怎麼這麼不給力。但是後來我仔細分析了一下規則之後,我感覺,除了一些特殊情況,比如八爪魚後台在調整之類的,雲採集出問題的常見原因還是以下的:

1,小白傻瓜化點點點,這類的不會寫準確的XPATH,也不會分析頁面源碼,所以一旦頁面數據格式變化了,死板的點擊生成的規則就很容易廢掉;

2,沒有足夠的判斷語句來跳出循環,有些頁面的下一頁直接點擊會出問題,還有一些的下一頁,點擊生成規則就會無限循環,必須有判斷語句判斷是否到了最後一頁,比如汽車之家新聞評論採集就會如此。所以最好的方法就是看源代碼判斷是否可以用傻瓜方式寫翻頁循環,否則就需要自己XPATH定位元素;

3,官方的教程很實用,基本都看完一遍掌握以後,大部分的問題就都能解決了,有一些解決不了的,大多數是不懂HTML結構和XPATH定位原理導致的。

蛋疼的幫很多人改了代碼問題以後的總結就是:好好學看源碼,好好學看源碼,好好學看源碼……重要的事情說三遍!

下面說一個簡單的實例:

採集需求:對汽車之家新聞列表裡所有包含「豐田」關鍵詞的新聞,採集所有下面的評論。

採集分析:需要從新聞列表頁-進入新聞文章頁-進入評論列表頁-採集。形成循環,最終採集一共3300多頁的數據。

如果用點點點和循環大法,很快就可以寫出來代碼,單機執行首先出錯,雲採集更出錯。各種重複採集、重複載入、無限循環。為什麼呢?因為頁面變化了,雖然變化不多,萬幸!首先XPATH定位要精準,需要點擊的元素都需要精準定位,確保循環執行不出錯。其次翻頁循環會遇到無限循環問題,需要看清下一頁A標籤的class內容變化,從而精準定位。

再有就是加入判斷語句,多重嵌套判斷語句沒有問題,雖然看著有些亂,但是最後判斷語句可以幫助流程順利執行下去。非要說起來的話,這種判斷語句比寫python代碼簡單太多了,根本不叫事。

最後我的規則就變成了一大堆框框合併在一起的「東西」……但是這樣的好處就是,我的雲採集完整的執行下來了,而且編寫腳本的時間比python快得多,雖然功能有缺失,但是對於臨時採集項目來說很方便,我對於小型數據分析一般都用這種方法直接採集數據。python主要用於並行多線程採集和複雜數據清洗。

最後,總結一下八爪魚里的坑:

  • 雲採集不是那麼好用的,需要注意規則,盡量別太複雜
  • 雲採集是多ip多節點處理的,所以盡量別採集需要登錄的網站,那是作死
  • 如果沒有ajax載入的頁面,盡量勾選優化非ajax頁面速度選項
  • 單機測試一下,如果可以的話就不載入圖片來採集
  • cookies有很多網站是有效時間並不長,所以別期待cookies可以一直使用
  • 網速和計算機響應速度很大程度決定了單機採集的速度
  • 雲採集會漏數據的,精度要求高的話,盡量規則上做完善,比如加入載入失敗的重試或者判斷是否出現數據的流程
  • 熱門網站比如淘寶、阿里巴巴、企查查、天眼查等,基本上對雲採集的ip都屏蔽了,別想那麼容易……
  • 單機採集可以使用網上的vps伺服器,便宜的大概1天1塊錢,好點的還能自動切換ip,小規模使用應該能解決不少問題
  • 給頁面留一些載入時間,或者循環延遲1秒,別讓請求速度太快,容易漏數據
  • 八爪魚數據是沒有計算功能的,所以只能採集和判斷
  • 學好Xpath,否則你就是從入門到放棄!重要的事情放在最後說……

我的數據採集交流群:462346024


推薦閱讀:

知乎上的用戶評論數據如何用八爪魚獲取?
獲取歷史(過去幾年)的全網輿情數據有些(購買)渠道?
燃氣抄表為什麼沒有大規模採用無線通信模式?

TAG:数据采集 |