在上一篇文章《一篇文章了解爬蟲技術(shù)現(xiàn)狀》中,我們總結(jié)了目前后臺(tái)爬蟲所面臨的交互困難、javascript解析麻煩、以及ip限制三大問題。本期,我們不妨換一種思路來重新思考,說不定會(huì)別開生面、柳暗花明。
承上
書接上文,我們說明了目前后臺(tái)爬蟲所面臨的三大問題,此三點(diǎn)對(duì)于后臺(tái)爬蟲來說基本條條都是硬傷,當(dāng)然,現(xiàn)在有些網(wǎng)站安全性考慮的不夠,安全策略并非太過復(fù)雜,在有些場景下,對(duì)后端爬蟲來說不至于會(huì)致命,但是,一旦有個(gè)新的需求遇到了這三座大山的其中一個(gè),那將會(huì)是很麻煩的一件事。既然如此,在窮途陌路的時(shí)候,我們何不換個(gè)思路?
山重水復(fù)疑無路,柳暗花明又一村,千呼萬喚始出來,驀然回首,猶抱琵琶半遮面!
障礙,不一定非得正面跨過去,有時(shí)候,繞過去會(huì)更容易。
再思
遇到交互困難的場景有哪些?
上文中我們提到,后臺(tái)爬蟲說面臨的第一座大山就是交互困難。但是,不是所有的網(wǎng)頁都會(huì)有復(fù)雜的交互,其實(shí),和爬蟲(會(huì)對(duì)爬取結(jié)果產(chǎn)生重要影響)相關(guān)90%的網(wǎng)頁交互都是驗(yàn)證碼!而這些驗(yàn)證碼通常都在登錄頁。比如我們要爬取某人的所有微博評(píng)論、qq空間留言、郵件列表等等。對(duì)于這些場景,我們爬蟲必須要進(jìn)行登錄,否則無法獲取內(nèi)容。而對(duì)于搜索引擎的爬蟲來說,這些內(nèi)容是沒有必要的,百度谷歌不可能取爬取用戶這些信息。也就是說,無論是在怎樣的需求場景下,我們遇到這種交互問題之前,都是都是需要用戶告訴我們用戶明和密碼,然后我們?cè)偃ヅ?,然后才能遇到?yàn)證碼問題。所以,這種需求場景必然有個(gè)用戶授權(quán)/登錄的過程,那么在你們的產(chǎn)品當(dāng)中,一般的交互會(huì)是這樣:產(chǎn)品中會(huì)提供一個(gè)讓用戶授權(quán)/登錄頁面,用戶授權(quán)/登錄后,將賬戶信息加密發(fā)送到后臺(tái),后臺(tái)拿到賬戶信息后,啟動(dòng)爬蟲去嘗試登錄,如果遇到驗(yàn)證碼,后臺(tái)再返回給端上,由用戶手動(dòng)完成,然后后臺(tái)獲取到用戶輸入的驗(yàn)證碼(可以是一組操作值),再繼續(xù)進(jìn)行登錄驗(yàn)證,這樣才能完成整個(gè)流程,大家想想12306的搶票軟件的流程,正是如此。可見這樣的產(chǎn)品交互是很復(fù)雜的。好了,我們總結(jié)一下,遇到這種情況的本質(zhì)原因是爬蟲在執(zhí)行過程中需要用戶通過端(app或網(wǎng)頁)進(jìn)行手動(dòng)授權(quán),而授權(quán)的過程需要端和后臺(tái)一次或多次交互。
如何才能突破ip限制?
其實(shí),這是最容易得出結(jié)論的一個(gè)問題,我們稍加思考,就會(huì)意識(shí)到,只要爬取是在后臺(tái)進(jìn)行,那么ip就永遠(yuǎn)有限,這個(gè)問題就不可能徹底解決!
行文至此,今天要介紹的主角已經(jīng)呼之欲出了,想必你也已經(jīng)猜到了。在揭開它面紗之前我們先來看看近幾年業(yè)務(wù)需求發(fā)生的變化。
新的需求場景
眾所周知,近年來隨著P2P的快速發(fā)展,互聯(lián)網(wǎng)金融更是處于風(fēng)口浪尖,這個(gè)萬億級(jí)的市場,吸引了一大批公司,像螞蟻金服、陸金所、愛錢進(jìn)、理財(cái)通、百度金融等等。而互聯(lián)網(wǎng)金融的本質(zhì)主要是風(fēng)險(xiǎn)控制、所以一個(gè)強(qiáng)大征信平臺(tái)至關(guān)重要。從業(yè)務(wù)角度來看,互聯(lián)網(wǎng)金融公司一般都會(huì)分為兩塊:資產(chǎn)端和資金端,也就是貸款方和投資方,而這里最具風(fēng)險(xiǎn)的就是對(duì)貸款方的資質(zhì)審核,這和傳統(tǒng)的金融沒什么區(qū)別,而所謂互聯(lián)網(wǎng)金融,無非是將認(rèn)證流程提到了線上,借款時(shí)通過相應(yīng)平臺(tái)的的app完成。而認(rèn)證流程往往需要獲取用戶信息,如信用卡代還的借款需要爬取用戶信用卡賬單郵箱、通話記錄,有的甚至要爬支付寶交易記錄、京東淘寶購買記錄等等,這些都是需要用戶授權(quán)/登錄的,而這些網(wǎng)站通常為了安全期間,對(duì)ip請(qǐng)求的次數(shù)、頻率都有著嚴(yán)格的限制,這導(dǎo)致傳統(tǒng)的后臺(tái)爬蟲不能勝任,此時(shí)急需一種新的解決方案。
客戶端爬取方案
經(jīng)過之前的諸多鋪墊,換個(gè)思路想想,如果能在用戶端完成數(shù)據(jù)獲取,像后臺(tái)爬蟲面臨的三座大山還會(huì)存在嗎?對(duì)于ip限制,由于數(shù)據(jù)獲取是在用戶端完成的,我們每一個(gè)用戶的ip可以大致認(rèn)為是不同的,那么ip限制則不攻自破;對(duì)于動(dòng)態(tài)驗(yàn)證,需要爬取用戶登錄后的信息時(shí),我們肯定需要用戶授權(quán),所以對(duì)于驗(yàn)證碼,我們可以引導(dǎo)用戶自己操作,而無需和后臺(tái)進(jìn)行交互;而對(duì)于javascript解析的問題,如果爬取是在客戶端進(jìn)行,那么我們能否引入瀏覽器的javascript虛擬機(jī)呢?可不可以用v8? 如果可以,那么我們的爬取腳本是不是也能用javascript去寫?如果可以,那么我們的爬取腳本中是不是可以用jQuery解析網(wǎng)頁,直接發(fā)起ajax請(qǐng)求?如果可以,那怎一個(gè)爽字了得,不可能有比這更容易的寫的爬蟲了!從此,javascript真的要一統(tǒng)天下了呀,好可怕。。。
換個(gè)行!我們平復(fù)一下激動(dòng)的心情!
好,我們回過頭來看一下,如果采用客戶端方案,之前后臺(tái)遇到到的三大問題是否都可以解決。
- 交互復(fù)雜;客戶端爬取是在端上進(jìn)行,無需再和后臺(tái)交互,用戶登錄成功后再爬取,最終只需要將爬取的數(shù)據(jù)上報(bào)給后臺(tái)就行。
- Javascript解析問題;如果爬取是在端上,所以沒有后臺(tái)高并發(fā)吞資源的情況,我們完全可以引入和瀏覽器一樣的javascript運(yùn)行環(huán)境。
- ip限制問題;徹底解決了!
客戶端爬取方案可能遇到的問題
事無巨細(xì),我們先關(guān)注以下幾點(diǎn):
-
腳本放在哪
傳統(tǒng)后臺(tái)爬取的程序是在后臺(tái),如果目標(biāo)網(wǎng)站發(fā)生變化,可以隨時(shí)更新爬取程序。但客戶端爬取將會(huì)有問題,爬取腳本保存在客戶端,那么就麻煩了??磥砟_本是不能保存在端上,那么必須有一套腳本下發(fā)、更新的機(jī)制。
-
如何進(jìn)行錯(cuò)誤收集
如果目標(biāo)網(wǎng)站發(fā)生變化導(dǎo)致我們腳本不能正常工作或拋出異常,如果是在后臺(tái),我們可以有服務(wù)器打點(diǎn)、報(bào)警等及時(shí)發(fā)現(xiàn)處理,如果在端上我們應(yīng)該如何及時(shí)應(yīng)對(duì)錯(cuò)誤?
-
如何進(jìn)行版本管理
版本管理分為爬取腳本版本和sdk版本,腳本支持的sdk版本范圍如何匹配?
-
怎么寫腳本
用什么語言?如何控制爬取流程?如何和端通信?
完整的客戶端爬取平臺(tái)
綜上所述,下面,我們想想,一個(gè)完整、友好的、理想的的客戶端爬取平臺(tái)應(yīng)該是什么樣子的。
- 跨平臺(tái);在移動(dòng)互聯(lián)網(wǎng)時(shí)代,最起碼支持ios/android.
- 云管理平臺(tái);主要用于配置腳本參數(shù)、更新腳本、統(tǒng)計(jì)腳本爬取狀態(tài)、錯(cuò)誤分析等。如果你是開發(fā)者,那么云管理平臺(tái)同時(shí)也是發(fā)布、管理自己腳本的地方。
- 爬取腳本使用javascript語言;一來前端程序員可以很快上手,二來,javascript天生和網(wǎng)頁更配。這樣會(huì)降低開發(fā)難度和成本,學(xué)習(xí)成本很低。
- 腳本商店;互聯(lián)網(wǎng)上的網(wǎng)頁浩如煙海,開發(fā)者可以有償或無償?shù)陌炎约旱哪_本發(fā)布到腳本商店,供其它人使用、共享。
最后
本文本想打算直接介紹客戶端爬取平臺(tái),但我覺得在介紹新的事物之前應(yīng)該要弄明白緣起,只有了解了它的誕生環(huán)境,才能更好的理解它的價(jià)值。下一篇我們將隆重介紹全球第一個(gè)開放的客戶端爬取平臺(tái)。,如依然有興趣,敬請(qǐng)關(guān)注。
本文章允許免費(fèi)轉(zhuǎn)載,但請(qǐng)注明原作者及原文鏈接。