微信電競和王者營地爬取經驗總結

一、首先是微信電競,就是微信小程序里面的,本來看這是一個小程序,感覺應該很好爬。但是在實際爬取的時候,出現了一些問題,最終沒有爬取成功,主要總結自己在爬取過程中所做的事情和策略。

首先因為是小程序,所以第一個方法是用fiddler抓取請求,這個過程順利,很快就找到了拉取信息的請求鏈接。

"https://game.weixin.qq.com/cgi-bin/videoareawap/gametag?session_id="+session_id

其中session_id是一段時間內,每次請求都不會變的。所以直接通過fiddler抓取就可以了,然后formdata是:?{"is_preview":False,"game_app_id":"wx95a3a4d7c627e07d","data_type":0,"page_idx":0,"target_video_id":0}

通過這個請求,很順利的就拿到了數據:

所要抓取的數據內容都是視頻,所以所有信息都在這里可以獲取到。然后就是要找分頁的方式。結果在這里卡住,因為沒有在返回也找到任何翻頁的字段,重復請求的時候發現請求的數據是相同的。所以只能考慮實現翻頁機制有幾種可能。(1)本身是沒有翻頁機制的,每次請求都是相當于一次刷新,后臺記錄請求狀態,自動刷新推送新的內容給前端。(2)前端通過另外一條請求,刷新數據,然后再次請求,得到新的數據。

簡而言之就是前端肯定會有一條請求是告訴后臺要刷新數據的,通過這個邏輯,我找到前端向后臺請求的所有url,逐一進行分析。

"https://game.weixin.qq.com/cgi-bin/videoareawap/videolist?session_id="+session_id

第一個是這個,解析之后發現這是將視頻信息打包向后臺請求的,并不知道這是什么操作。請求之后并沒有刷新請求數據。

"https://game.weixin.qq.com/cgi-bin/comm/videostat?session_id="+session_id

第二個是這個,上面的請求是向后端發送多條視頻信息,這條請求則是發送單條視頻信息。依然不知道有什么卵用。


https://game.weixin.qq.com/cgi-bin/comm/pagestat?op=batch&session_id="+session_id

formdata 是:#msg ="GameId=wx95a3a4d7c627e07d&SceneId=3&UIArea=304&PositionId=1&ActionId=3&SsId=1089&GiftId=0&GeneralID=wx95a3a4d7c627e07d&VideoQuality=0&Type=13&TypeId=1&VideoID="+str(videoid)+"&Time=0&Videotime="+str(videotime)+"&depth=0&AnchorType=0&Device=2&ClientVersion=6703&ConnectType=0&SourceID=0&sdkVersion=2404&DeviceBrand=HONOR&DeviceModel=KNT-AL20&ExternInfo=%7B%7D&extVersion=0&devInfo=&Abt=0"

第三條是這個,這條可能行最大,因為有pagestat這個關鍵字,重點研究了一下這個請求,通過拼接等方法嘗試之后,發現依然不行。

還有其他請求,但明確知道其用途,不單獨理出。

?????? 所以感覺此方法行不通,就想嘗試用新的方法。希望能夠獲取小程序前端源碼進行分析。而小程序前端前端源碼是經過編譯之后上線的,同時如何獲取小程序源碼,就成了問題。經過百度發現,還真有方法。

?????? 簡單點說,小程序源文件其實就存在手機里面,但是這個目錄正常進入是找不到的。基本所有手機都會將系統目錄設置成不可見,用root 也不行。所以就考慮可以使用手機模擬器的方式進行查詢。

?????? 這里使用了夜神手機模擬器,


模擬登陸微信之后,點開微信電競小程序,但是程序沒有打開,總是閃退,程序沒有運行成功。然后我再進入

/data/data/com.tencent.mm/MicroMsg/{一串16進制字符}/appbrand/pkg/

這個目錄,過然發現有xxxx.wxapkg文件。

然后就是想辦法拷貝出來,用夜神自帶的文件管理器拷貝,總會出現權限問題,按照網上說法通過qq文件管理系統傳輸發現也無法拿到。然后再找其他途徑,最后發現,用re文件管理器(分兩種,要選擇藍色的確定帶root權限的那種),通過root權限配合qq就能夠拿到文件,



拷貝出來之后,就要做反編譯的事情。

?????? 網上只有一個大神寫了一套微信反編譯的工具,看了一下,部分網友反編譯之后過然成功了,所以我把代碼clone下來進行嘗試。




結果是出現報錯,然后我通過報錯信息去找對應文件的內容。連$gwx都沒有找到,請教身邊前端同事,他們也沒辦法找出問題所在。

?????? 但是好在有目錄生成。


????????把這個目錄拷貝下來,放到微信web開發者工具中運行。然后出現報錯,


請教前端同事,是不是一個小程序可能存在多個源文件,同事回答說是的。

然后問題就回到了最開始的微信電競運行沒有運行起來的問題,猜測可能就是因為沒有加載到更多的源文件倒是啟動失敗。

至此,能嘗試的爬取策略都嘗試過了,考慮到就算爬下來,整個視頻資訊內容也才1800+條,所以決定放棄爬取。


二、然后就是爬取王者營地的資訊。手機app的,這個爬取的時候,比我想象的又要順利很多,同樣是使用fiddler,抓取請求,查看返回內容。


https://ssl.kohsocialapp.qq.com:10001/game/listinfov2

首先通過這個鏈接,可以獲取文章列表,

而formdata 直接抄取:

{"gameId":"20001","pos1":1,"page":page,"feedNum":"0","type":"25818","cChannelId":"3","cClientVersionCode":"2018122401","cClientVersionName":"3.41.202","cCurrentGameId":"20001","cDeviceCPU":"armeabi-v7a$armeabi","cDeviceId":"8c8aa874108e85574768a5c85d8fbcfcc24c061d","cDeviceImei":"862537035682515","cDeviceMac":"02:00:00:00:00:00","cDeviceMem":"55505","cDeviceModel":"KNT-AL20","cDeviceNet":"WIFI","cDevicePPI":"640","cDeviceSP":"中國聯通","cDeviceScreenHeight":"2416","cDeviceScreenWidth":"1440","cGameId":"20001","cGzip":"1","cRand":"1546950860974","cSystem":"android","cSystemVersionCode":"26","cSystemVersionName":"8.0.0","gameAreaId":"0","gameId":"20001","gameServerId":"0","gameUserSex":"0","token":"9F8xsuAW","userId":"541905524"}

就可以了,很容易看到里面的相關信息所代表的意思,通過page進行翻頁操作,模擬請求之后,過然獲取到了文章列表。然后就是單頁面數據請求

視頻在文章列表里就能夠請求到vid,title,閱讀量,評論量和喜歡數,所以很簡單的就請求到了所有的數據。文章則可以通過url:

https://ssl.kohsocialapp.qq.com:10001/game/detailinfov3

請求獲取到數據,

Data則是:

{"gameId":"20001","apiVersion":"1","recommendId":"","pos":"2","algoType":"","pos1":"1","pos2":"0","iInfoId":iInfoId,"type":"25818","goPickComment":"0","taskId":"","cChannelId":"3","cClientVersionCode":"2018122401","cClientVersionName":"3.41.202","cCurrentGameId":"20001","cDeviceCPU":"armeabi-v7a%24armeabi","cDeviceId":"5502acf8109e4a66a4e443912ace3821014b0ca9","cDeviceImei":"868695033078799","cDeviceMac":"02:00:00:00:00:00","cDeviceMem":"113917","cDeviceModel":"MI

8

UD","cDeviceNet":"WIFIi","cDevicePPI":"440","cDeviceSP":"中國聯通","cDeviceScreenHeight":"2028","cDeviceScreenWidth":"1080","cGameId":"20001","cGzip":"1","cRand":"1547003489109","cSystem":"android","cSystemVersionCode":"28","cSystemVersionName":"9","gameAreaId":"3","gameId":"20001","gameOpenId":"owanlssxkyCn-iJMttt7KG0jZObs","gameServerId":"3181","gameUserSex":"1","token":"HzzdRrGA","userId":"491132695"}


通過iInfoid就能拿到全部數據。


三、下面就是分析則么通過vid獲取騰訊視頻具體內容。

'https://av.video.qq.com/getinfo?callback=JsonpCallBack&&charge=0&defaultfmt=auto&otype=json&guid=c05f836b267c173e684cec6410185d3b&platform=70201&sdtfrom=v1104&defnpayver=0&appVer=3.3.128&host=v.qq.com&ehost=https%3A%2F%2Fv.qq.com%2F&_rnd=1507969615&spwm=4&vid={}&_qv_rmt=ZHrqJgF6A10991DBb%3D&_qv_rmt2=y%2FlweBl0157665zsQ%3D&_1507969615506='.format(vid)

起始url請求,返回一堆json數據,里面的keyid,preurl,vkey,都是拼接視頻源地址的信息。通過這部分信息,最后拼接之后,鏈接即可獲取視頻播放源碼。

順利爬取到數據。


四、查找獲取王者榮耀玩家段位信息的方式

?????? 由于英雄聯盟開放了玩家游戲段位查詢接口,所以英雄聯盟玩家的段位信息很容易拿到。而王者榮耀則在這方面并沒有做開放。我想了幾個策略方式。

[if !supportLists](1)?????[endif]通過官網web看是否能夠拿到數據。

[if !supportLists](2)?????[endif]王者榮耀小程序能夠拿到玩家自己的游戲數據

[if !supportLists](3)?????[endif]王者營地有一個用戶搜索的方式查詢

[if !supportLists](4)?????[endif]通過王者榮耀游戲客戶端獲取數據。


第一個方法,通過王者榮耀官網獲取數據,發現其是需要有登陸態的,登陸之后才能獲取自己的段位數據,而且不能查詢其他人。我把這個結果告訴馬里奧,馬里奧說不行。他需要的是直接獲取其他人的段位信息。

然后去看微信小程序的,需要拿到用戶的code,馬里奧說這個更不要想,太難了。遂放棄。

然后準備通過王者榮耀游戲客戶端獲取,結果發現根本抓不到fiddler請求啊~還把手機搞得不能夠正常使用代理了。

最后一個方法,王者營地。

這個真的可以獲取,但是呢,最后才發現,依然需要用戶登陸,然后王者營地會給用戶一個id,通過這個王者營地的用戶id,王者營地app后臺去請求到王者榮耀的數據庫玩家段位數據。但是這個id是不會暴露給用戶的,所以不會抓包的人根本不能知道自己的用戶id是多少,同時沒有登陸過王者營地app的用戶,王者營地是拿不到用戶數據的,同時王者營地時可以將戰績設置成隱身的。

因此這多方限制,雖然我們可以通過搜索的方式拿到部分用戶的段位信息,但是這種方式未免太過雞肋。用處不大。


經驗總結:

[if !supportLists]1.?????[endif]雖然微信電競最終沒有爬取到數據,但是通過爬取的過程中,我找到了很多種爬取資訊的策略方法,總結了一些經驗,

[if !supportLists]2.?????[endif]王者營地雖然是個用戶量很大的app,但是可以說完全沒有做反爬工作。所有有時候爬起數據,不能還是有很多意想不到的收獲。

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,572評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,071評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,409評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,569評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,360評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,895評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,979評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,123評論 0 286
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,643評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,559評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,742評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,250評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,981評論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,363評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,622評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,354評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,707評論 2 370

推薦閱讀更多精彩內容

  • 會話(Session)跟蹤是Web程序中常用的技術,用來跟蹤用戶的整個會話。常用的會話跟蹤技術是Cookie與Se...
    chinariver閱讀 5,645評論 1 49
  • 今天是2018年12月6號陰有小雪 昨晚下了一晚上的雪,早上起來先去涼臺瞅瞅外面的天,感覺好冷,屋頂,樹枝上都是雪...
    翟藝萌媽閱讀 113評論 0 0
  • 看著鏡子里油頭垢面的自己,好想把鏡子打破。其實,想打破的僅僅是現實而已。 ...
    蕭颯的獨白閱讀 192評論 0 0
  • 又到旅游嗨翻天的節奏,一直比較推崇這種品質游。 它可以讓我們在小范圍,增強旅友們之間的交流,也便于與導游或者旅游線...
    雪韻_蓮心閱讀 797評論 10 29
  • 他是我的室友。其實他早已不是孩子,但我總拿他當孩子一樣寵溺。不自覺地,想起了我和他相識的那天,11月17號。我去換...
    cxibei閱讀 218評論 0 1