【我在黑盒學py】如何獲取CSGO飾品數據


3樓貓 發佈時間:2022-04-14 12:00:30 作者:王守義拾叄香 Language

0x00 寫在前面

簡單彙報一下最近拾叄香比價平臺的開(mo)發(yu)進度,上週末三天爬完了四個平臺的全部飾品ID(不包括貼紙等,加上那些肝受不了,實用性也不高),共五萬餘條數據。整合後數據如下

【我在黑盒學py】如何獲取CSGO飾品數據-第0張

四個平臺的飾品ID

今天準備給皮膚編號,方便API調用,思路如下

【我在黑盒學py】如何獲取CSGO飾品數據-第1張

大編號

具體到每一種武器的每一個皮膚就是這樣的:

1    01            001   B      S

刀  鮑伊獵刀  皮膚 略磨 暗金

上面的001這個是根據我這個皮膚在我爬下來的數據裡面的位置來定的,嶄新到破損分別對應字母A-E,暗金就在末尾加一個S,紀念品就加個J

下面是做測試的時候簡單跑了一下

【我在黑盒學py】如何獲取CSGO飾品數據-第2張

僅供參考

0x01 理論部分

先大概看看四個平臺的飾品Url的結構(以普通嶄新九頭金蛇作為例子):

A:/goods/871801

B:/product/730/664271

C:/goodInfo?id=62268

D:/csgo/914680597258567680/S.html

不難發現,想要獲取飾品信息就需要構造Url,而鏈接裡面最重要的參數便是該飾品對應的ID,並且每個平臺皮膚所對應的ID都不一樣,那麼要做四個平臺的聯合搜索的話就免不了要把每種皮膚在每個平臺上的ID給找出來。像我這樣二十歲的男子大學牲,怎麼能把寶貴的時間浪費在複製數據這種事情上?陪對象不香?人生苦短,我用Python。

如何獲取飾品信息可以參考上一篇學py的帖子,有較為詳細的分析:

【我在黑盒學py】CSGO飾品價格監控工具

0x01_1 獲取A平臺的數據

要批量獲取,並且按照種類進行儲存的話,飾品平臺提供了很貼心的按照武器種類進行篩選的功能,大大方便了腳本的編寫。

【我在黑盒學py】如何獲取CSGO飾品數據-第3張

分析思路和上一篇帖子差不多,打開控制欄,隨便選擇一種槍械,分析數據包。

【我在黑盒學py】如何獲取CSGO飾品數據-第4張

這個good開頭的包很可疑

根據多年的瞎蒙經驗,一眼可疑發現這個很特別的good開頭的請求,點開看看

【我在黑盒學py】如何獲取CSGO飾品數據-第5張

這個items裡面東西很多

【我在黑盒學py】如何獲取CSGO飾品數據-第6張

找到你了

果然有飾品信息,那麼來康康他的請求是什麼樣的

【我在黑盒學py】如何獲取CSGO飾品數據-第7張

首先看看請求Url,可以發現紅色框中這三個參數有點意思。第一個框相信只要學過小學英語都能知道這是第一頁的意思;第二個就比較有意思了,這個應該是CSGO中鮑伊獵刀對應的id,那麼由此可以推斷得出想要獲取其他種類的皮膚只要得到他對應的這個大類ID即可;最後一個方框這個不難判斷是時間戳,畢竟市場都具有時效性嘛,剩下的一些參數填不填都不影響,在構造請求Url的時候可以省略。

先直接get一下這個url看看行不行

【我在黑盒學py】如何獲取CSGO飾品數據-第8張

從返回結構可以看出,他需要登錄才能請求這個API,那麼嘗試直接帶Cookie請求行不行

【我在黑盒學py】如何獲取CSGO飾品數據-第9張

【我在黑盒學py】如何獲取CSGO飾品數據-第10張

帶上Cookie再次請求就有了

友情提示:對於這種需要Cookie才能請求的API,一定記得加延遲,否則請求太頻繁了直接號都給揚了。

稍微分析一下返回的數據,我們需要的是飾品名稱,飾品磨損,飾品ID,最後實現在代碼中(篇幅問題這裡只截圖主要部分,詳細代碼可以在文末下載代碼自己看):

【我在黑盒學py】如何獲取CSGO飾品數據-第11張

主函數

0x01_2 獲取B平臺的數據

同上,先打開一個頁面進行分析,只有一個孤零零的數據包

【我在黑盒學py】如何獲取CSGO飾品數據-第12張

點進去康康,發現是Post請求,那麼必然就有提交的數據表單

【我在黑盒學py】如何獲取CSGO飾品數據-第13張

找找提交的數據長啥樣

【我在黑盒學py】如何獲取CSGO飾品數據-第14張

不難發現,最後一行是刀的代碼,這裡是蝴蝶刀,倒數第三個pageSize是他返回的數據量一次請求返回多少種飾品,可以適當加大這個值,其他的參數信息都不是很重要可以不管。

【我在黑盒學py】如何獲取CSGO飾品數據-第15張

這裡我們發起一個請求,發現可以成功返回回來數據,但是要注意一點,我們提交的表單數據是Json格式的,所以響應的我們在使用requests模塊進行提交數據的時候也應該以json格式提交表單,如下

res = requests.post(url, json=form_data)

通常情況下我們使用post方法提交表單都是這樣的

res = requests.post(url, data=form_data)

在這種指定表單格式的API上是必須按照對應格式進行提交的,否則將出現問題

【我在黑盒學py】如何獲取CSGO飾品數據-第16張

這裡更換了表單格式

由於有pageSize參數,我們在構造表單的時候可以適當加大這個值,以減少請求次數

【我在黑盒學py】如何獲取CSGO飾品數據-第17張

原理同8F

0x01_3 獲取C平臺的數據

有一說一,我以前從來沒用過這個平臺,第一次打開的時候屬實給我驚到了,這什麼牛皮癬網站,不知道的還以為是什麼菠菜開箱網,也不知道前端在設計的時候在想啥。

老規矩,隨便點開一頁看看數據包

【我在黑盒學py】如何獲取CSGO飾品數據-第18張

非常多

該說不說,他的請求就跟他的頁面一樣花裡胡哨的,非常多,有一定的迷惑性,但是還是能夠找到相關的數據包,先來看看請求部分

【我在黑盒學py】如何獲取CSGO飾品數據-第19張

這個請求的Url倒是意外的乾淨,通過嘗試不難發現,第一個ctg_id對應的就是他網頁上面那一欄武器篩選欄的順序,比如1就是手槍,2是重型武器,以此類推。第二個type_id也類似,是武器在總的排序中的順序(不得不說這一點設計倒是和我想到一塊兒去了),第三個page_size的參數我試了一下,只能設置為20,改大會報錯,不是很能理解他的意義在哪。

由於是get請求,所以我們直接嘗試請求這個Url看看結果

【我在黑盒學py】如何獲取CSGO飾品數據-第20張

發現返回回來的直接是一個網頁,但是裡面也有想要的飾品信息(其實是我懶得去看那些奇奇怪怪的請求,發現他的網頁也是直接請求來的,索性直接從網頁裡面找東西)

由於需要處理網頁,那麼人民群眾喜聞樂見的BeautifulSoup就上場了,也沒啥難度,主函數貼出來了,不懂可以自己下載代碼康康

【我在黑盒學py】如何獲取CSGO飾品數據-第21張

主函數

0x01_4 獲取D平臺的數據

好像這個平臺是重慶的一家公司在運營,但是感覺用的人沒前面三個多

老規矩,看看數據包

【我在黑盒學py】如何獲取CSGO飾品數據-第22張

雖然這家平臺的設計理念與上一家的菠菜網站設計理念不謀而合,但是在請求裡面就與上一家不一樣了,並沒有我們想要的東西。那麼換個思路,直接Get請求這個網頁Url看看行不行

【我在黑盒學py】如何獲取CSGO飾品數據-第23張

直接拿下

掘沙!於是和上一家的腳本一樣,用BeautifulSoup解析一下就好了,這裡直接快進到代碼實現

【我在黑盒學py】如何獲取CSGO飾品數據-第24張

原理基本和上一家的一樣

0x02 小結

通過獲取這四大平臺的信息,已經初步形成了一個數據庫,可以通過名字找到該飾品對應四個平臺的id,有的皮膚YYYP和C5沒有上架就沒有ID,後續會進一步完善。

在編寫腳本的時候,獲取的皮膚都是以武器類別命名的單獨的一個一個的.xlsx文件最後還用到了一個合併數據的小腳本,這裡不多贅述,也放在附件裡面,感興趣的話可以自己研究一下,也是非常簡單的。

【我在黑盒學py】如何獲取CSGO飾品數據-第25張

0x03 附件

由於一些原因,不便放出獲取到的數據,僅提供代碼。下圖中第一個dealcsv就是處理合併數據表格的代碼。

【我在黑盒學py】如何獲取CSGO飾品數據-第26張

藍奏雲:mrdeng.lanzouj.康姆/igwzs032cz9c

如果覺得本文對你有用的話,就請動動發財的小手來個一鍵三連叭~

拾叄香比價平臺也已經進入到最後的開發階段了,不出意外的話月底或者下個月初就能正式上線,請緊張的期待!

【我在黑盒學py】如何獲取CSGO飾品數據-第27張


© 2022 3樓貓 下載APP 站點地圖 廣告合作:asmrly666@gmail.com