讓爬蟲無障礙抓取上千萬APP資料

王平發表於2019-05-16

爬蟲論抓取難度,一是抓取對內容有加密的,難度很大,尤其是在app端的內容加密。有的可能需要逆向app。二是抓取必須要登陸後才能看的內容,再加上對登陸賬號做IP訪問次數控制的。這可能會難道一大片爬蟲選手。

讓爬蟲抓取上千萬需登入的APP資料

本文不討論app逆向問題,這種問題似乎也不宜公開說,《刑法》第286條中闡述了反編譯軟體屬於破壞計算機資訊系統罪。

逆向抓取app可能觸犯刑法

如果是被舉證了,風險挺大的,尤其是競品之間的抓取行為或者太高調的。我在猿人學Python這兩篇文章中有寫到爬蟲抓資料的法律風險。《寫網路爬蟲的法律邊界》、 《再續:網路爬蟲的法律邊界和資料風險

 

本文討論第二種,內容沒加密,但要登陸才能看的app如何抓取。

寫爬蟲沒有學校教授,所以沒有統一的武功套路,基本是八仙過海,各顯神通。厲害的資料公司各種武功套路的人才齊備,賬號,IP,機器等渠道資源充足。一般的公司資源和人才不夠,又想大規模資料抓取,用取巧的方式是一種可行的辦法。

本文說的取巧抓取方式,就是正確的設計抓取策略,透過制定正確的抓取策略來高效抓取需要登入的APP。

制定正確的抓取策略,包括使用和熟悉被抓物件的產品形態(PC,H5,APP)和功能;測試被抓物件賬號登入後對不同頻道的訪問頻率控制邊界(比如有的只對產品詳細頁做頻率控制,對頻道頁,分類頁的控制較弱)。分析被抓物件分享到微信等渠道後,從微信開啟頁面是否需要授權,需登入等情況。

這是一套通用的抓取策略分析手法,我運用這種策略對多數APP都能做到抓取上千萬條資料。

 

理論說的比較暈,我們拿脈脈APP來舉例,如何來分析和制定抓取策略。

我們的目標是想要抓取脈脈上的個人職業資訊(這類資料不要直接商用,簡歷也算是個人隱私資料)。

按照三面的分析步驟,首先分析脈脈的產品形態。初步分析,脈脈的PC網站需要登入,沒有專門的H5網站,APP也需要登陸才能檢視。初步分析,沒有可以下手的地方。

第二步分析對各版塊的頻率控制情況。這要自己花點時間去點選觀察。測試結果是對個人的詳細頁頻率控制強,還有對搜尋功能控制強。對分類等頻道頁控制很弱。大約一個賬號快速訪問200多次詳細頁,就會有提示了。

 

這就意味著如果一天想抓10萬張脈脈詳細頁,需要註冊10萬/200=500個賬號。如果是一天抓100萬張頁面就要5000個賬號。這樣算下來其實公司出錢買幾百個賬號,也要不到幾個錢,但是好些公司不願意出這個錢。

所以透過批次註冊賬號的方式,就打住了。另外上面說的這種用大量賬號抓取的方式,我簡化了IP問題,一個賬號頻繁變換IP也是有問題的,尤其是IP歸屬地一會是江蘇,一會是江西就更有問題了。

 

上面第一二步都分析了,似乎沒有找到什麼好方法,接著分析第三步,觀察詳細頁的分享功能。我把詳細頁分享到微信後,在微信裡試著開啟看看,發現可以不登陸就能訪問詳細頁。

脈脈app的詳情頁

這下似乎找到了抓取突破口,趕緊抓包具體觀看一下。

透過抓包分享到微信這個過程的資料可以分析出:

fiddler抓包app資料

點選分享到微信,會觸發訪問

https://open.taou.com/maimai/user/v3/share_other?u=xxxxx&access_token=xxxxxxx&u2=xxxxxx 這個URL。

這個URL會返回另一個URL,即https://maimai.cn/contact/share/card?u=2k6qxxxxxxxx (如圖),這個URL可以不用登入就能訪問。

不用登入也能抓脈脈app的資料

而且點選分享這個功能的頻率控制經過測試,是比較弱的。

所以抓取策略慢慢就清晰了:登入APP後,把要抓取的物件分享到微信裡(即,訪問這個URL

https://open.taou.com/maimai/user/v3/share_other?u=xxxxx&access_token=xxxxxxx&u2=xxxxxx)。

得到無需登入就能訪問的這串URL。

https://maimai.cn/contact/share/card?u=2k6qxxxxxxxx。有了這個無需登入的URL,就可以靠我寫的這篇《如何讓爬蟲一天抓一百萬張網頁》的方法,歡快的抓了。

脈脈登入問題很好解決,上面那個分享微信介面的URL引數裡只需傳遞一個ID和access_token就認為你登入了,id和token透過抓包可以很好拿到。

這樣我只需要登入的賬號不停的訪問微信分享功能,其他的抓取事情就可以交給無需登入,只需大量IP就能抓取到了。這樣就大大緩解了對登入賬號的訪問頻率控制。

但是依然要自己註冊一些賬號,只是不用註冊幾百個那麼多,我自己手動註冊二十來個就可以每天抓一百萬個頁面了。

因為註冊要檢查你手機上的電話號碼,電話號碼都是一樣的,註冊會有問題。所以可以用安卓模擬器去註冊賬號。

 

上述介紹的就是一種取巧的抓取策略,不過適用面還挺大的。在一個公司的資源不夠,不肯出錢解決問題時,上述是一種低成本的抓取策略。

但是隨著被抓物件的產品改版,或者頻率控制改變,這種方法會失效。但是一款產品總有能找到的抓取軟肋,因為一個公司的技術和市場部門是分開的。市場承擔的產品日活,訪問量責任更大,所以會傾向於使用者分享到微信的頁面能夠直接開啟。利於他們做拉新,裂變之類的,所以控制力度就不大。

猴賽雷的資料公司不屑於用這個取巧的抓取策略,因為這種抓取方法遇到改版或爬策略改變,就會失效,導致抓取失敗。這些公司是直接賣資料給客戶,要保證服務質量,會使用暴力的方式來抓取,後面可以聊聊這類的爬蟲江湖暗戰。

你懂的,我最近在教爬蟲,一對一教會你如何設計大型爬蟲,我十餘年的經驗傾囊相授。 感興趣的在選單裡你能找到我。

 

近期爬蟲好文推薦

如何讓爬蟲一天抓取100萬張網頁

爬蟲技巧:逆向js程式碼加密,程式碼混淆不是難事

 

猿人學banner宣傳圖

我的公眾號:猿人學 Python 上會分享更多心得體會,敬請關注。

***版權申明:若沒有特殊說明,文章皆是猿人學 yuanrenxue.com 原創,沒有猿人學授權,請勿以任何形式轉載。***

相關文章