如何實現APP數據採集,還有應該注意哪些點

最近半年,我們八爪魚陸續接到好幾個APP數據採集的項目需求,我在群裡面,偶爾也看到有些用戶在問,有沒有APP數據採集的工具。鑒於我們做過的幾個APP數據採集項目的經驗,我可以告訴大家,現在APP數據採集,市面上還沒有通用的工具。我們八爪魚內部是有一套工具,但由於使用的難度較高,需要編寫腳本,所以不對普通用戶公開,我們僅接受項目定製。

雖然不對外公開,但並不妨礙我們將技術分享出來,APP數據採集,一般走以下兩種方式:

1.兩種思路

  1. 抓包
  2. HOOK

2.抓包

有代碼經驗或APP開發的同學都很容易理解,其實很多APP,走的都是webservice通訊協議的方式,並且由於是公開數據,而且大部分是無加密的。所以只要對網路埠進行監測,對APP進行模擬操作,即可知道APP裡面的數據是如何獲取的。

我們只需要寫代碼模擬其請求,無論POST還是GET,即可得到該請求所返回的信息。再通過對返回的信息結構化解析,即可得到我們想要的數據。

public static void main(String[] args) { Spider.create(new GithubRepoPageProcessor()) //從https://github.com/****開始抓 .addUrl("https://github.com/****") //設置Scheduler,使用Redis來管理URL隊列 .setScheduler(new RedisScheduler("localhost")) //設置Pipeline,將結果以json方式保存到文件 .addPipeline(new JsonFilePipeline("D:\data\webmagic")) //開啟5個線程同時執行 .thread(5) //啟動爬蟲 .run();}

以模擬採集「meizu」應用市場為例

應用市場產品

抓包返回參數

整個抓包過程

3.HOOK技術

HOOK技術是一種走操作系統內核的技術,由於安卓系統是開源的,所以可以藉助一些框架修改內核,從而實現你要的功能。HOOK的形式,我們走的是Xposed框架。Xposed是一款可以在不修改任何其他開發者開發的應用(包括系統服務)的情況下,改變程序運行的一個開源框架服務。基於它可以製作出許多功能強大的模塊,以此來達到應用程序按照你的意願運行的目的。

如果把安卓手機看做一座城堡,那Xposed可以讓你擁有一個上帝視角,城裡的運作細節盡收你眼底,還能讓你插一手改變城堡的運作規律。

什麼意思呢?簡單的說就是你可以通過他,自動化的控制你的APP。如果將我們的APP開在模擬器上,我們可以通過編碼,通過他告訴APP這一步幹什麼,下一步幹什麼。你把它理解成類似按健精靈或遊戲打怪外掛就可以了。

而他每走一步,APP與服務端交互的數據,均可獲取下來。這種方式廣泛用於一些成熟的APP。比如某信採集。

public class HookActivity implements IXposedHookLoadPackage { @Override public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable { final String packageName = lpparam.packageName; XposedBridge.log("--------------------: " + packageName); try { XposedBridge.hookAllMethods (Activity.class, "onCreate", new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { XposedBridge.log("=== Activity onCreate: " + param.thisObject); } }); } catch (Throwable error) { XposedBridge.log("xxxxxxxxxxxx: " + error); } }}

其實我們八爪魚曾經也想開發一款通用的APP數據採集工具,並且兩年前在這塊投入研究了小半年,我們做出了一款APP採集腳本編輯工具,可以讓一款APP的數據採集項目縮減到3-5天即可開發完成。但我們認為,這個工具需要編寫腳本一般用戶是比較難上手的,所以僅作為內部項目使用。

以HOOK某APP為例

HOOK指令打開某APP

HOOK指令獲取數據

4.這些年走過的坑

聊完APP採集的思路,我們跟大家分享一些遇過的坑吧,讓大家樂一樂

坑一:簽名演算法

以某信的文章列表頁及某信息頁為例,對其http訪問進行抓包,會發現其url的一個核心參數是我們無法知道如何生成的,這就導致,我們不可能直接用該url進行信息爬取;簽名演算法如果無法破解,HTTP這條路就是死路了。

坑二:http爬取回來的信息和頁面顯示不一致

以某信的某信息頁為例,對比直接訪問某信頁面及http爬取的信息,可明顯發現http爬取到的信息較少。造成得兩種方式都用,才能既照顧速度又照顧完整性。

坑三:模擬器中的坑

APP自動識別你的運行環境進行屏蔽,最厲害的還是某信,連你是用模擬器打開還是真機打開,是什麼內核的,全部進行限制。曾經見過牛人,找某手機廠商專門定做真機來配合。

坑四:帳號的坑

這個坑就有點大了,要找號、養號,都不是件容易的事情,更慘的是封號,真真讓你一夜回到解放前。

最後,2018新年已開始工作,全年無休,歡迎隨時找我聊工作。


推薦閱讀:

八爪魚五周年活動,到底做了啥?
The 1st Year at Octoparse: 300% Growth
寫於八爪魚五周年:行百里者半於九十

TAG:採集 | 數據採集 | 八爪魚採集器 |