1.安裝抓包工具(filder)和模擬器(夜神模擬器),可參考博文:https://blog.csdn.net/weixin_42223833/article/details/110009432。安裝包和詳細配置都有。
注意:抖音有ssl驗證,夜神模擬器安裝xposed和JustTrustMe之后,才能正常抓包,不然打開抖音是沒有網的。
2.破解X-grogon簽名算法。因為抖音有簽名驗證機制,要想直接使用抖音接口,必須破解簽名算法!這里有能力的大佬可以通過反編譯APP去破解,當然我是沒有這個能力的,只能通過抓包工具把數據下載下來。
配置filder下載數據包:
static function OnBeforeResponse(oSession: Session) { if (m_Hide304s && oSession.responseCode == 304) { oSession["ui-hide"] = "true"; } //將關鍵接口標紅 if (oSession.HostnameIs("aweme.snssdk.com")) { oSession["ui-color"] = "red"; } //抓取接口的數據 if (oSession.uriContains("https://aweme.snssdk.com/aweme/v2/comment/list/")){ var strBody=oSession.GetResponseBodyAsString(); var sps = oSession.PathAndQuery.slice(-58,); var host=oSession.PathAndQuery; var begin=host.indexOf('aweme_id'); var end=host.indexOf('&count=20'); var name=host.Substring(begin,end); var date = new Date(); var seperator1 = "-"; var year = date.getFullYear(); var month = date.getMonth() + 1; var strDate = date.getDate(); if (month >= 1 && month <= 9) { month = "0" + month; } if (strDate >= 0 && strDate <= 9) { strDate = "0" + strDate; } var currentdate = year + seperator1 + month + seperator1 + strDate; var filetitle=currentdate + '_' + name; //FiddlerObject.alert(currentdate); var filename = "E:/www/phpstudy_pro/WWW/douyin/commend" + "/" + filetitle + ".json"; var curDate = new Date(); var sw : System.IO.StreamWriter; if (System.IO.File.Exists(filename)){ sw = System.IO.File.AppendText(filename); sw.Write(strBody); } else{ sw = System.IO.File.CreateText(filename); sw.Write(strBody); } sw.Close(); sw.Dispose(); } }
注意:因為抖音每次只顯示20條評論,所以需要通過模擬器的宏操作不斷下拉獲取下一頁數據:
錄制一段下拉 的操作,不斷執行就好。
3.處理數據
數據已經下載好了,接下來只要處理,提取出自己需要的數據就行了。
這里我使用的是php語言處理數據。
<?php $dir=dirname(__FILE__); $dir=str_replace('\\','/',$dir); $listArr = glob($dir.'/commend/*.json'); $arr=[]; foreach ($listArr as $k=>$file){ $json=file_get_contents($file); $data=json_decode($json,true); //評論 if (!empty($data['comments'])){ $comments=$data['comments']; foreach ($comments as $id=>$comment){ //評論 $text=$comment['text']; //評論的用戶 $user=$comment['user']; $nickname=$user['nickname'];//昵稱 $signature=$user['signature'];//簽名 $avatar=$user['avatar_168x168']['url_list'][1];//頭像 $lable=$comment['label_text'];//身份 //評論id $cid=$comment['cid']; //評論時間 $createTme=$comment['create_time']; //視頻id $awemeId=$comment['aweme_id']; //數據整合 $arr[$cid]=[ 'awemeId'=>$awemeId, 'text'=>$text, 'nickname'=>$nickname, 'signature'=>$signature, 'avatar'=>$avatar, 'lable'=>$lable, 'createTme'=>$createTme, ]; } } //評論為空則跳出循環 continue; } echo "<pre>"; print_r($arr); echo "</pre>";