爬蟲(chóng)實(shí)戰(zhàn)技巧-抓取源的選擇

爬蟲(chóng)實(shí)戰(zhàn)技巧-抓取源的選擇

抓取源的選擇對(duì)于抓取至關(guān)重要,直接關(guān)係著抓取的可行性與工作量票编。選擇合理的抓取源不僅僅能夠節(jié)約開(kāi)發(fā)時(shí)間褪储,避免很多坑,同時(shí)對(duì)數(shù)據(jù)的質(zhì)量也有一定的保證慧域。

我們要討論的是:對(duì)于同一個(gè)數(shù)據(jù)來(lái)源鲤竹,從哪個(gè)入口進(jìn)行抓取,Web端昔榴,App端辛藻,Wap端?抑或是其他的一些途徑互订。

這里的Wap是于Web形成對(duì)應(yīng)并區(qū)分吱肌,指的是移動(dòng)端Web,并不是狹義的WAP仰禽。

很多同志一說(shuō)到抓取氮墨,就想到Web,HTML吐葵,然后各種Xpath规揪,正則模板。這是比較複雜累人的方桉温峭,實(shí)際上真正的抓取猛铅,還有很多其他的方式,這里我們就即將談到凤藏,希望看完這篇文章對(duì)大家有所幫助奸忽。

總結(jié)與結(jié)論

選擇哪個(gè)數(shù)據(jù)源抓榷槲薄?

  1. 哪個(gè)平臺(tái)方便哪個(gè)
  2. 哪個(gè)看起來(lái)複雜選擇哪個(gè)

一般地月杉,我們選擇的優(yōu)先級(jí)降序排列爲(wèi):

各平臺(tái)內(nèi)置入口 > Wap(手機(jī)瀏覽器) > 自家手機(jī)APP > 自家PC > Web

其中刃跛,PC端與手機(jī)APP無(wú)明顯優(yōu)先級(jí)區(qū)分,這個(gè)排列視抓取團(tuán)隊(duì)對(duì)平臺(tái)Crack的熟悉程度而定苛萎。

怎麼理解上面說(shuō)的兩點(diǎn)呢桨昙?

這個(gè)不用舉例子,就能很好的理解腌歉。我們從兩個(gè)方面來(lái)分析:

  1. 數(shù)據(jù)質(zhì)量的好壞蛙酪,不僅僅指數(shù)據(jù)內(nèi)容的豐富,同時(shí)也包含對(duì)后期抽取工作的友好度
  2. 后期踩坑的多少翘盖,就是所謂的反爬遭遇戰(zhàn)桂塞,越少越好

第二個(gè)標(biāo)題

抓取分類

可分的種類太多了,這里我們按照數(shù)據(jù)請(qǐng)求認(rèn)證的方式簡(jiǎn)單的劃分一下馍驯,以便內(nèi)容后面的梳理阁危。

  1. 需要帳號(hào)和密碼登錄

    • 使用Cookie
    • 使用token
  2. 只需使用第三方登錄(有些是第三方只是綁定作用,仍然需要注冊(cè)帳號(hào)汰瘫,這個(gè)通與第一種類型)

    • 使用token
    • 無(wú)需token(不知道有沒(méi)有這麼不靠譜的)
  3. 無(wú)需登錄

    • 使用token(請(qǐng)求的合法性校驗(yàn)狂打,與帳號(hào)維度的token不一樣)
    • 無(wú)需token

可以看到無(wú)需登錄無(wú)需token的是最有可能大批量抓取數(shù)據(jù),有反爬也最多只能在IP維度來(lái)做混弥,這時(shí)候我們拼IP量就能搞定了趴乡。

需要帳號(hào)和密碼登錄的這種我們要儘量去避免,拋開(kāi)注冊(cè)和登錄時(shí)的驗(yàn)證碼不說(shuō)蝗拿,有帳號(hào)在對(duì)方后臺(tái)的晾捏,你的每一次請(qǐng)求都能被記錄下來(lái),想封你很容易哀托。

第二種惦辛,其實(shí)可以作爲(wèi)最優(yōu)選擇,第一數(shù)據(jù)基本都是序列化過(guò)的仓手,第二依附第三方(騰訊胖齐,新浪等)做認(rèn)證的自身處理會(huì)相對(duì)薄弱。

來(lái)源詳解

Web端

這個(gè)應(yīng)該是大家最爲(wèi)熟悉的俗或,也是范圍最廣市怎,最容易發(fā)現(xiàn)的抓取來(lái)源岁忘⌒廖浚基本輸入網(wǎng)址后,我們就能找到想要的數(shù)據(jù)干像,這可能是數(shù)據(jù)規(guī)劃或者產(chǎn)品提出來(lái)的帅腌,仍你一張圖驰弄,然后上面圈出哪些數(shù)據(jù)需要被抓取到。

一般地速客,數(shù)據(jù)會(huì)通過(guò)兩種方式從后臺(tái)展示給用戶:

  1. 后臺(tái)直接將數(shù)據(jù)內(nèi)容渲染在HTML中
  2. AJAX異步請(qǐng)求獲得數(shù)據(jù)戚篙,在前端渲染

區(qū)別方式很簡(jiǎn)單,右鍵查看源碼溺职,或者在瀏覽器網(wǎng)址前面岔擂,鍵入:view-source:,在HTML源碼中能找到你想要的數(shù)據(jù)的話那就是第一種方式浪耘,如果要抓乱灵,那直接拼上URL就完事。

第二種方式又可分為兩種形式七冲,第一種是返回的以JSON形式序列化好的數(shù)據(jù)痛倚;還有一種是比較坑的后臺(tái)程序員寫(xiě)的(這個(gè)鍋其實(shí)后臺(tái)同學(xué)不背,主要是前端同學(xué)偷懶澜躺,想直接要HTML)蝉稳,返回的依然是HTML的片段。對(duì)于抓取而言掘鄙,這兩者的區(qū)別主要是在數(shù)據(jù)抽取的階段耘戚,同時(shí)對(duì)遭遇反爬的判斷,或者接口變動(dòng)的發(fā)現(xiàn)都有著很明顯的優(yōu)勢(shì)通铲。

實(shí)際上毕莱,我們左右不了人后臺(tái)數(shù)據(jù)的返回形式,但是我們可以當(dāng)作參考颅夺,用來(lái)篩選對(duì)我們抓取工作最有利的途徑朋截。

這里無(wú)論數(shù)據(jù)是一次性直接從HTML中返回回來(lái)的,還是異步加載的吧黄,他們走的都是對(duì)方Web端對(duì)外接口部服,通常情況下,這里會(huì)有比較嚴(yán)格反爬策略拗慨,稍微異常就直接跳轉(zhuǎn)給你驗(yàn)證碼廓八。

當(dāng)然,異步返回?cái)?shù)據(jù)的這種方式赵抢,有些會(huì)在這里做請(qǐng)求合法性的驗(yàn)證剧蹂,你直接把數(shù)據(jù)請(qǐng)求從瀏覽器發(fā)出去,并不能得到真正的數(shù)據(jù)烦却。

從某個(gè)角度來(lái)說(shuō)宠叼,這其實(shí)是件好事情,因?yàn)橐话阍隍?yàn)證方面做足了工作的,大部分不太會(huì)在反爬上投入太多的精力冒冬,這也就是意味著伸蚯,我們的抓取速度從某個(gè)角度來(lái)說(shuō),是能夠得到保證简烤。

順便提下剂邮,不要看到異步加載的數(shù)據(jù)第一反應(yīng)就是上headless瀏覽器這種去渲染出html然后又去抽內(nèi)容。與其花個(gè)把小時(shí)去寫(xiě)腳本横侦,還不如花些時(shí)間挥萌,研究研究他后臺(tái)數(shù)據(jù)的接口,有沒(méi)有數(shù)據(jù)請(qǐng)求的驗(yàn)證枉侧,是怎麼驗(yàn)證瑞眼,然后用代碼去實(shí)現(xiàn),直接請(qǐng)求接口的數(shù)據(jù)棵逊。不但能大大提高抓取速度伤疙,同時(shí)還節(jié)省了一大堆資源,帶寬辆影、cpu徒像、內(nèi)存。想想你爲(wèi)了請(qǐng)求一條幾個(gè)字節(jié)的評(píng)論數(shù)蛙讥,你非得多請(qǐng)求人家服務(wù)器幾百Kb的數(shù)據(jù)下來(lái)锯蛀,何必呢,傷人傷己次慢。

當(dāng)然有一種情況除外旁涤,對(duì)方的反爬系統(tǒng)使用靜態(tài)資源的請(qǐng)求比例來(lái)分析是否是爬蟲(chóng),那咱得上phantomjs之流迫像,但也只限于需要帳號(hào)才能抓的數(shù)據(jù)劈愚,并且你的帳號(hào)數(shù)量還極其有限的情況才考慮去用。如果是這種情況闻妓,其實(shí)也沒(méi)必要死磕在從Web端抓了菌羽。

Wap端

這個(gè)并不是所有你想抓的站點(diǎn)都會(huì)有的,像一些政府的基本沒(méi)有由缆,好在大部分的商業(yè)公司都有這條產(chǎn)品線注祖,畢竟這是流量最高,入侵性最低的流量入口了均唉;比如是晨,新浪微博、雪球舔箭、喜馬拉雅等等罩缴,他們都有自己手機(jī)Wap端產(chǎn)品。

那Wap端對(duì)比Web端優(yōu)勢(shì)在哪里呢?
答案是靴庆,結(jié)構(gòu)化的數(shù)據(jù)接口的存在可能性更大!

由于移動(dòng)端網(wǎng)絡(luò)的特殊性怒医,所以一般只要稍微靠譜點(diǎn)的產(chǎn)品炉抒,都會(huì)將Wap端涉及成異步加載數(shù)據(jù)的方式,儘量減小請(qǐng)求的大小稚叹,降低請(qǐng)求的發(fā)送頻率焰薄,

在抓取前期,做抓取源的選擇時(shí)扒袖,要區(qū)分到底有沒(méi)有Wap端其實(shí)很簡(jiǎn)單塞茅,兩種方式:

  1. 手機(jī)瀏覽器直接打開(kāi)
  2. 瀏覽器調(diào)試工具,選擇模擬移動(dòng)設(shè)備

這個(gè)時(shí)候你看到的頁(yè)面如果很“友好”季率,那基本上就可以說(shuō)明他是獨(dú)立與Web端的野瘦,存在數(shù)據(jù)接口的可能性會(huì)更大。當(dāng)然飒泻,也有響應(yīng)式的前端設(shè)計(jì)鞭光,就一套前端代碼,基本這種肯定有單獨(dú)的數(shù)據(jù)接口泞遗,和Web端一樣惰许。

上面提到了,這個(gè)的優(yōu)點(diǎn)就是史辙,可能具有結(jié)構(gòu)化的數(shù)據(jù)接口汹买,方便抓取與抽取工作。與此同時(shí)聊倔,從反反爬的角度來(lái)說(shuō)晦毙,我據(jù)經(jīng)驗(yàn)猜測(cè)IP的次數(shù)上線會(huì)稍高與Web端,這一點(diǎn)沒(méi)有可靠的依據(jù)耙蔑,畢竟在反爬引擎中结序,這隻是一個(gè)配置的事情,甚至是動(dòng)態(tài)的無(wú)需人爲(wèi)干預(yù)纵潦,做反爬的同志們可以斧正徐鹤。

不管怎樣,具有單獨(dú)的數(shù)據(jù)接口邀层,這一點(diǎn)已經(jīng)足夠支撐我們從這里著手抓取的工作返敬。

手機(jī)端

按照主流平臺(tái),一般我們特指iOS與Android寥院,我們不會(huì)像搞安全的同志們一樣劲赠,都去研究,我們選擇成本最低的方向來(lái)做,所以一般地凛澎,Android的APP是我們的首選霹肝。

毋庸置疑,99%的APP都是有單獨(dú)的數(shù)據(jù)接口塑煎,其中對(duì)于我們想要的數(shù)據(jù)90%d的是通過(guò)HTTP方式進(jìn)行傳輸沫换,其馀的是TCP。TCP這個(gè)涉及協(xié)議分析這一塊最铁,耗時(shí)耗力讯赏,基本抓取不會(huì)考盧直接從請(qǐng)求中去拿數(shù)據(jù),后面我會(huì)詳細(xì)地介紹這種的數(shù)據(jù)應(yīng)該怎麼去拿冷尉。

基本上漱挎,HTTP接口的數(shù)據(jù),咱們抓個(gè)包就能知道接口是什麼樣子雀哨,需要哪些驗(yàn)證參數(shù)磕谅。
一般情況下,不會(huì)直接一個(gè)光著的HTTP露在外面雾棺,請(qǐng)求里面會(huì)帶著各種Key怜庸,Token什麼的,這些邏輯的處理都是在APP的代碼里垢村,所以咱們得花時(shí)間去逆向他的代碼割疾。

上面說(shuō)的還是理想情況下,絕大多數(shù)的商業(yè)公司的產(chǎn)品嘉栓,數(shù)據(jù)接口都走的是HTTPS宏榕,如果僅僅是如此那也不打緊,咱們?cè)撟ググ值瑁坏峭勐橹纾心屈N一波靠譜的系統(tǒng)設(shè)計(jì)在一些公司里,給這些接口套了雙向驗(yàn)證馋辈,咱沒(méi)法通過(guò)中間人的方式去抓包了抚芦,因爲(wèi)證書(shū)不對(duì),他不認(rèn)迈螟,直接拒絕連接叉抡,這個(gè)時(shí)候我們必定只有一條逆向之路了。

上面羅嗦了半天答毫,無(wú)非就是褥民,APP端有接口好,封IP可能性較低洗搂,但是哇消返,耗時(shí)耗力载弄,但是如果能一天夠定各種驗(yàn)證,找到接口的請(qǐng)求方式那還是很劃算的撵颊。

平臺(tái)入口

最典型的微信里面的入口宇攻,很多公司的產(chǎn)品會(huì)使用微信登錄,或者直接在公衆(zhòng)號(hào)里面提供入口倡勇。從一個(gè)角度來(lái)說(shuō)逞刷,這等同于Wap端的產(chǎn)品,但是區(qū)別在于译隘,很多產(chǎn)品是直接通過(guò)微信去登錄驗(yàn)證的,直接可以避免注冊(cè)登錄的過(guò)程洛心。微信小程序這個(gè)我目前還沒(méi)有涉及到過(guò)固耘,暫時(shí)不做討論。

優(yōu)點(diǎn)還是那兩個(gè)词身,數(shù)據(jù)格式好厅目,被封概率低;缺點(diǎn)也很明顯法严,走大平臺(tái)的驗(yàn)證邏輯损敷,Crack起來(lái)很不好做,但是深啤,大廠是靠譜拗馒,可是小公司可能會(huì)是豬隊(duì)友,人騰訊明明給了那麼幾進(jìn)無(wú)懈可擊的認(rèn)證方桉溯街,愣是在自己后臺(tái)有涉及漏洞诱桂,那這個(gè)絕對(duì)是數(shù)據(jù)最優(yōu)的選擇。

比如呈昔,微信用于認(rèn)證跳轉(zhuǎn)的URL類似于https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxe74839f******&redirect_uri=http://xx.xxx.com&response_type=code&scope=snsapi_base&state=456&connect_redirect=1#wechat_redirect挥等,經(jīng)過(guò)這個(gè)URL認(rèn)證過(guò)的請(qǐng)求,就相當(dāng)于登錄過(guò)了〉涛玻現(xiàn)在有不少公司的產(chǎn)品,從微信入口進(jìn)去會(huì)獲得比Web端更好的內(nèi)容體驗(yàn),這自然也會(huì)是抓取的福音檀何,畢竟傳統(tǒng)Web登錄繁瑣廷蓉,反爬嚴(yán)格。

對(duì)比分析

這里用一個(gè)表格記錄各項(xiàng)指標(biāo)分?jǐn)?shù)粘室,以做對(duì)比:

數(shù)據(jù)完整性[越多越好] 開(kāi)發(fā)友好度[越多越好] 實(shí)現(xiàn)難度[越少越好] 耗時(shí)[越少越好] 反爬力度[越低越好]
PC Web端
移動(dòng)Web端
移動(dòng)客戶端
第三方平臺(tái)
PC客戶端 - - - - -

PC客戶端個(gè)人暫時(shí)還沒(méi)有遇到真正的數(shù)據(jù)抓取催蝗,之前幾款要麼是內(nèi)嵌WebView的,要麼是直接讀取臨時(shí)文件就能搞定的育特,這里不納入個(gè)人評(píng)價(jià)丙号。

論述結(jié)束

這一篇算是囉哩囉唆半天喳魏,實(shí)際沒(méi)有說(shuō)到什麼很技巧的東西怀薛,后面會(huì)從這里談到的內(nèi)容,從實(shí)際例子出發(fā)去分析,怎麼做畦攘,如何做。

前言

根據(jù)前面所列的大綱,我們即將會(huì)講到《數(shù)據(jù)抓包的方式與方法》静盅。希望我繼續(xù)寫(xiě)的請(qǐng)自行處理杯矩,不希望的請(qǐng)通過(guò)一些方式聯(lián)繫我:

  1. 微信: rustgolang
  2. 微博[當(dāng)作IM]: 我愛(ài)問(wèn)財(cái)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泌射,一起剝皮案震驚了整個(gè)濱河市孤紧,隨后出現(xiàn)的幾起案子臭猜,更是在濱河造成了極大的恐慌揽碘,老刑警劉巖劫灶,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凛俱,死亡現(xiàn)場(chǎng)離奇詭異岸啡,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)蟀拷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人亭螟,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵羡宙,是天一觀的道長(zhǎng)狸剃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)钞馁,這世上最難降的妖魔是什么匿刮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任绩鸣,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驳遵。我一直安慰自己淫奔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著唐责,像睡著了一般鳞溉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼠哥,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天熟菲,我揣著相機(jī)與錄音,去河邊找鬼朴恳。 笑死抄罕,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的于颖。 我是一名探鬼主播呆贿,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼森渐!你這毒婦竟也來(lái)了做入?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤同衣,失蹤者是張志新(化名)和其女友劉穎竟块,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乳怎,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡彩郊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年前弯,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚪缀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恕出,死狀恐怖询枚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浙巫,我是刑警寧澤金蜀,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站的畴,受9級(jí)特大地震影響渊抄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜丧裁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一护桦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧煎娇,春花似錦二庵、人聲如沸贪染。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杭隙。三九已至,卻和暖如春因妙,著一層夾襖步出監(jiān)牢的瞬間痰憎,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工攀涵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留信殊,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓汁果,卻偏偏與公主長(zhǎng)得像涡拘,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子据德,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理鳄乏,服務(wù)發(fā)現(xiàn),斷路器棘利,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • iOS網(wǎng)絡(luò)架構(gòu)討論梳理整理中橱野。。善玫。 其實(shí)如果沒(méi)有APIManager這一層是沒(méi)法使用delegate的水援,畢竟多個(gè)單...
    yhtang閱讀 5,188評(píng)論 1 23
  • 簡(jiǎn)介 用簡(jiǎn)單的話來(lái)定義tcpdump,就是:dump the traffic on a network茅郎,根據(jù)使用者...
    保川閱讀 5,956評(píng)論 1 13
  • Memory NN https://deepmind.com/about/
    重新出發(fā)_砥礪前行閱讀 163評(píng)論 0 0
  • 文/三尺晴 ? 進(jìn)站系冗,檢票奕扣,提著沉重的行李登上歸鄉(xiāng)列車,在狹窄的過(guò)道一寸一寸挪動(dòng)掌敬,雙眼緊盯著數(shù)字一個(gè)個(gè)閃過(guò)惯豆,尋找自...
    三尺晴閱讀 661評(píng)論 19 19