爬蟲技術(二)-客戶端爬蟲

wendux發表於2017-03-14

在上一篇文章《一篇文章瞭解爬蟲技術現狀》中,我們總結了目前後臺爬蟲所面臨的互動困難、javascript解析麻煩、以及ip限制三大問題。本期,我們不妨換一種思路來重新思考,說不定會別開生面、柳暗花明。

承上

書接上文,我們說明了目前後臺爬蟲所面臨的三大問題,此三點對於後臺爬蟲來說基本條條都是硬傷,當然,現在有些網站安全性考慮的不夠,安全策略並非太過複雜,在有些場景下,對後端爬蟲來說不至於會致命,但是,一旦有個新的需求遇到了這三座大山的其中一個,那將會是很麻煩的一件事。既然如此,在窮途陌路的時候,我們何不換個思路?

山重水複疑無路,柳暗花明又一村,千呼萬喚始出來,驀然回首,猶抱琵琶半遮面!

障礙,不一定非得正面跨過去,有時候,繞過去會更容易。

再思

遇到互動困難的場景有哪些?

上文中我們提到,後臺爬蟲說面臨的第一座大山就是互動困難。但是,不是所有的網頁都會有複雜的互動,其實,和爬蟲(會對爬取結果產生重要影響)相關90%的網頁互動都是驗證碼!而這些驗證碼通常都在登入頁。比如我們要爬取某人的所有微博評論、qq空間留言、郵件列表等等。對於這些場景,我們爬蟲必須要進行登入,否則無法獲取內容。而對於搜尋引擎的爬蟲來說,這些內容是沒有必要的,百度谷歌不可能取爬取使用者這些資訊。也就是說,無論是在怎樣的需求場景下,我們遇到這種互動問題之前,都是都是需要使用者告訴我們使用者明和密碼,然後我們再去爬,然後才能遇到驗證碼問題。所以,這種需求場景必然有個使用者授權/登入的過程,那麼在你們的產品當中,一般的互動會是這樣:產品中會提供一個讓使用者授權/登入頁面,使用者授權/登入後,將賬戶資訊加密傳送到後臺,後臺拿到賬戶資訊後,啟動爬蟲去嘗試登入,如果遇到驗證碼,後臺再返回給端上,由使用者手動完成,然後後臺獲取到使用者輸入的驗證碼(可以是一組操作值),再繼續進行登入驗證,這樣才能完成整個流程,大家想想12306的搶票軟體的流程,正是如此。可見這樣的產品互動是很複雜的。好了,我們總結一下,遇到這種情況的本質原因是爬蟲在執行過程中需要使用者通過端(app或網頁)進行手動授權,而授權的過程需要端和後臺一次或多次互動

如何才能突破ip限制?

其實,這是最容易得出結論的一個問題,我們稍加思考,就會意識到,只要爬取是在後臺進行,那麼ip就永遠有限,這個問題就不可能徹底解決!

行文至此,今天要介紹的主角已經呼之欲出了,想必你也已經猜到了。在揭開它面紗之前我們先來看看近幾年業務需求發生的變化。

新的需求場景

眾所周知,近年來隨著P2P的快速發展,網際網路金融更是處於風口浪尖,這個萬億級的市場,吸引了一大批公司,像螞蟻金服、陸金所、愛錢進、理財通、百度金融等等。而網際網路金融的本質主要是風險控制、所以一個強大徵信平臺至關重要。從業務角度來看,網際網路金融公司一般都會分為兩塊:資產端和資金端,也就是貸款方和投資方,而這裡最具風險的就是對貸款方的資質稽核,這和傳統的金融沒什麼區別,而所謂網際網路金融,無非是將認證流程提到了線上,借款時通過相應平臺的的app完成。而認證流程往往需要獲取使用者資訊,如信用卡代還的借款需要爬取使用者信用卡賬單郵箱、通話記錄,有的甚至要爬支付寶交易記錄、京東淘寶購買記錄等等,這些都是需要使用者授權/登入的,而這些網站通常為了安全期間,對ip請求的次數、頻率都有著嚴格的限制,這導致傳統的後臺爬蟲不能勝任,此時急需一種新的解決方案。

客戶端爬取方案

經過之前的諸多鋪墊,換個思路想想,如果能在使用者端完成資料獲取,像後臺爬蟲面臨的三座大山還會存在嗎?對於ip限制,由於資料獲取是在使用者端完成的,我們每一個使用者的ip可以大致認為是不同的,那麼ip限制則不攻自破;對於動態驗證,需要爬取使用者登入後的資訊時,我們肯定需要使用者授權,所以對於驗證碼,我們可以引導使用者自己操作,而無需和後臺進行互動;而對於javascript解析的問題,如果爬取是在客戶端進行,那麼我們能否引入瀏覽器的javascript虛擬機器呢?可不可以用v8? 如果可以,那麼我們的爬取指令碼是不是也能用javascript去寫?如果可以,那麼我們的爬取指令碼中是不是可以用jQuery解析網頁,直接發起ajax請求?如果可以,那怎一個爽字了得,不可能有比這更容易的寫的爬蟲了!從此,javascript真的要一統天下了呀,好可怕。。。

換個行!我們平復一下激動的心情!

好,我們回過頭來看一下,如果採用客戶端方案,之前後臺遇到到的三大問題是否都可以解決。

  1. 互動複雜;客戶端爬取是在端上進行,無需再和後臺互動,使用者登入成功後再爬取,最終只需要將爬取的資料上報給後臺就行。
  2. Javascript解析問題;如果爬取是在端上,所以沒有後臺高併發吞資源的情況,我們完全可以引入和瀏覽器一樣的javascript執行環境。
  3. ip限制問題;徹底解決了!

客戶端爬取方案可能遇到的問題

事無鉅細,我們先關注以下幾點:

  1. 指令碼放在哪

    傳統後臺爬取的程式是在後臺,如果目標網站發生變化,可以隨時更新爬取程式。但客戶端爬取將會有問題,爬取指令碼儲存在客戶端,那麼就麻煩了。看來指令碼是不能儲存在端上,那麼必須有一套指令碼下發、更新的機制。

  2. 如何進行錯誤收集

    如果目標網站發生變化導致我們指令碼不能正常工作或丟擲異常,如果是在後臺,我們可以有伺服器打點、報警等及時發現處理,如果在端上我們應該如何及時應對錯誤?

  3. 如何進行版本管理

    版本管理分為爬取指令碼版本和sdk版本,指令碼支援的sdk版本範圍如何匹配?

  4. 怎麼寫指令碼

    用什麼語言?如何控制爬取流程?如何和端通訊?

完整的客戶端爬取平臺

綜上所述,下面,我們想想,一個完整、友好的、理想的的客戶端爬取平臺應該是什麼樣子的。

  1. 跨平臺;在移動網際網路時代,最起碼支援ios/android.
  2. 雲管理平臺;主要用於配置指令碼引數、更新指令碼、統計指令碼爬取狀態、錯誤分析等。如果你是開發者,那麼雲管理平臺同時也是釋出、管理自己指令碼的地方。
  3. 爬取指令碼使用javascript語言;一來前端程式設計師可以很快上手,二來,javascript天生和網頁更配。這樣會降低開發難度和成本,學習成本很低。
  4. 指令碼商店;網際網路上的網頁浩如煙海,開發者可以有償或無償的把自己的指令碼釋出到指令碼商店,供其它人使用、共享。

最後

本文字想打算直接介紹客戶端爬取平臺,但我覺得在介紹新的事物之前應該要弄明白緣起,只有瞭解了它的誕生環境,才能更好的理解它的價值。下一篇我們將隆重介紹全球第一個開放的客戶端爬取平臺。如依然有興趣,敬請關注。

本文章允許免費轉載,但請註明原作者及原文連結。

相關文章