王者榮耀五周年,爬取102個英雄+326款皮膚,分析上線時間

本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理

1.概述

《王者榮耀》上線至今5個年頭了,作為這些年國內最熱門的手游(沒有之一),除了帶來游戲娛樂之外,我們在這五周年之際,試著從他們的官網找點樂趣,學習一下Python爬蟲的一些簡單基礎操作。

本篇將主要介紹簡單的Python爬蟲,包括網頁分析、數據請求、數據解析和數據保存,適用于基本不帶反爬的一些網站,旨在進行學習交流,請勿用作任何商業非法用途。

網頁分析其實就是打開你需要請求數據的網頁,然后「F12」看下這個網頁源數據長啥樣(如果你會web知識會更好處理,不過我沒系統學過,操作多了就熟悉一點);

數據請求我們用人見人愛的「requests」庫,關于該庫的更詳細用法大家可以去查詢該鏈接了解(https://requests.readthedocs.io/zh_CN/latest/);

數據解析一般視請求的數據格式而定,如果請求的數據是html格式,我將介紹「bs4」和「xpath」兩種方式進行解析,若請求的數據是json格式,我將介紹json和eval兩種方式進行解析;

數據保存這里分為兩種情況,如果是圖片類會用到「open」和「write」函數方法,若是文本類的我會用到pandas的「to_excel」保存為表單格式。

2.網頁分析

我們在概述說提到請求的數據會有html格式或者json格式,兩種情況下其實對應的真實請求地址是有差異的,怎么判斷呢,作為初學者我的個人經驗就是去試試,本章節兩種嘗試方案都會介紹,大家在實操中視情況而選吧!

2.1.html頁面源數據

以下面這張英雄列表頁面為例,按住“「F12」”,然后點一下開發者模式中左上角的那個有鼠標箭頭的圖標,再在左側選取你需要的數據區域,在開發者模式區域就會出現這個數據區域的數據信息,比如這里的“詳情頁地址”、“頭像圖片地址”和“名稱”,我們需要的也算這些信息,所以可以直接請求該鏈接即可。


2.2.json源數據

對于局內道具列表數據,我們發現上述方案無法獲取,那么這種情況下我們可以選擇開發者模式中的「Network——>XHR」,然后刷新頁面,在name里找啊找,一般就能到了某個數據是我們需要的。


點「Preview」發現里面正是我們需要的源數據,然后在「Headers」里可以找到請求到該源數據的真實鏈接地址,這里數據請求方式為「get」,我們下一節會介紹。


3.數據請求

我們提到這里用 requests 庫進行數據請求,requests 有兩種比較常用的請求方式:post和get。剛好這里我們用的到就是get一種即可,另外請求的時候可帶很多參數,比如請求頭、cookie等等,具體大家查概述中鏈接文檔了解吧。

簡單的例子:

importrequests#英雄列表頁地址url?='https://pvp.qq.com/web201605/herolist.shtml'resp?=?requests.get(url)#設置解碼方式(由于請求的數據中文亂碼,這里進行解碼)resp.encoding=resp.apparent_encoding


請求到的html源數據

importrequests#局內道具詳情頁地址url?='https://pvp.qq.com/web201605/js/item.json'resp?=?requests.get(url)#設置解碼方式(由于請求的數據中文亂碼,這里進行解碼)resp.encoding=resp.apparent_encoding


局內道具json數據

4.數據解析

對于不同的源數據解析方式不同,html數據解析這里介紹兩種比較常用的入門級方式「bs4」和「xpath」,對于「json」數據其實相對來說更好處理,這里介紹兩種簡單的方式利用「json」和「eval」。

4.1.html數據解析

4.1.1.bs4

Beautiful Soup 是一個可以從HTML或XML文件中提取數據的Python庫,它能夠通過你喜歡的轉換器實現慣用的文檔導航、查找、修改文檔的方式。

更多操作詳情大家可以去看(https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/)~

看html數據結構,我們可以找到想要的數據在「ul」節點,滿足「class="herolist clearfix"「下的全部」li」節點中。對于bs4來說,可以用「find_all」方法去定位。(更多解釋見代碼注釋哦)


#?bs4?解析frombs4importBeautifulSoup#?先將請求到的數據轉化為BeautifulSoup對象soup?=?BeautifulSoup(resp.text,'html.parser')#?定位全部的滿足?class?=?"herolist?clearfix",由于class是關鍵字所以這里用class_#?返回結果只有1個的列表,因此取索引0ul?=?soup.find_all('ul',?class_="herolist?clearfix")[0]#?定位?ul?下面全部的?li,li中藏著我們需要的數據信息lis?=?ul.find_all('li')#?創建一個空表用于存儲數據herolists?=?[]#?遍歷全部的liforliinlis:#?創建空字典,用于存儲?英雄列表信息herolist?=?{}#?get_text()?獲取節點下面的文案部分herolist['英雄名稱']?=?li.get_text()#?get()?獲取?具體值,英雄詳情頁地址在?li節點的子節點a下面herolist['英雄詳情頁']?=?li.find('a').get('href')????herolist['英雄頭像']?=?li.find('a').find('img').get('src')????herolists.append(herolist)


數據解析結果

4.1.2.xpath

XPath 是一門在 XML 文檔中查找信息的語言,可用來在 XML 文檔中對元素和屬性進行遍歷。更多語法操作可以查看(https://www.w3school.com.cn/xpath/xpath_syntax.asp )。

由于本質過程上和bs4差不多,只是語法函數操作不太同,這里不做詳細介紹,直接看代碼了解下先。

#?xpath?解析fromlxmlimportetreehtml?=?etree.HTML(resp.text)html_ul?=?html.xpath('//ul[@class="herolist?clearfix"]')[0]html_lis?=?html_ul.xpath('./li')herolists?=?[]forhtml_liinhtml_lis:????herolist?=?{}????herolist['英雄名稱']?=?html_li.xpath('./a/text()')[0]????herolist['英雄詳情頁']?=?html_li.xpath('./a/@href')[0]????herolist['英雄頭像']?=?html_li.xpath('./a/img/@src')[0]????herolists.append(herolist)

4.2.json數據解析

在請求的數據是json格式時,直接查看數據類型發現是str,如下:


我們可采用json.loads()和eval方法將其轉化為列表的形式,該列表和上面html數據解析后的結果格式一樣。

import?jsonjs?=?resp.text#?json.loads()?處理li?=?json.loads(js)#?直接?eval()?處理lis?=?eval(js)


json數據解析

5.數據保存

對于圖片類數據,請求圖片數據然后寫入本地保存;對于文本數據表單,轉化為dataframe類型存為excel文件(需要用到pandas庫)。

5.1.存儲圖片類數據

我們在英雄列表中有英雄頭像數據,這里演示將英雄頭像數據存入本地。

#?遍歷數據解析中?英雄列表forliinherolists:#?獲取英雄頭像網頁地址#?如'//game.gtimg.cn/images/yxzj/img201606/heroimg/506/506.jpg'head_url?=?li['英雄頭像']#?組合 https:url?=?f'https:{head_url}'#?獲取該英雄名稱,用于賦值給圖片文件名稱head_name?=?li['英雄名稱']#?請求圖片數據head_data?=?requests.get(url)#?設置存儲圖片的全路徑head_path?=?f'保存地址'#?打開空文件寫入圖片數據open(head_path,'wb').write(head_data.content)


英雄頭像圖片數據存儲

5.2.文本數據表單存儲

importpandasaspd#?列表轉化為dataframe類型df?=?pd.DataFrame(li)


數據預覽

#?由于數據中存在一些網頁符號,作為?菜鳥的我只會用replace簡單替換df['des1']?=?df['des1'].str.replace('<br>',',').str.replace('<p>','').str.replace('</p>','')df['des2']?=?df['des2'].str.replace('<br>',',').str.replace('<p>','').str.replace('</p>','')#?存為表格,頁簽取名為“裝備數據信息list”df.to_excel(r'地址',index=False,sheet_name='裝備數據信息list')


道具文本數據表單

6.你也來玩一玩

標題中我們提到王者榮耀五周年,有102個英雄和326個皮膚。其實,在英雄列表中我們抓取的html數據中只有93個,如何獲取全部的呢?大家可以參考json數據請求的方式去找一找,如何根據相關數據的特點(比如英雄頭像地址里變動的其實是 英雄的id,英雄詳情頁也是)。

大家可以看看新英雄和新皮膚,如何爬取相關數據試試。

?

https://pvp.qq.com/coming/v2/

?

6.1.英雄新皮膚數

上線五年,一共93個英雄新出過皮膚,其中貂蟬、花木蘭和孫悟空新增皮膚最多,高達5個!!


在93個英雄中,大部分只新增過1個皮膚~

6.2.新增皮膚上線時間

從上線月份來看,1月是英雄上線高峰,這個和1月大部分為春節月有關,畢竟這款產品春節也是最賺錢的。


從上線年份來看,2015年其實10月底產品才上線,所以整體新增皮膚不多,16及17年游戲高速增長期吧,團隊產能并沒有明顯提高?所以在18年之后,團隊大了,新增皮膚蹭的飛漲!


6.3.王者英雄產能

2015年10月28日王者首發時,有33個英雄,大家熟悉的亞瑟、項羽、安琪拉等都是第一批。截止到現在,5年時間內新增英雄69個。

從上線月份來看,2、8、11和1月份是新英雄出的最多的,為啥啊?


從上線年份來看,2015年上線2個月內上線7個新英雄,很快,畢竟存了很多量嘛。隨后可以看到2016年新英雄產出是高峰,隨后逐年降低的趨勢,為啥?「畢竟英雄設計是非常非常費腦袋的啊!!」

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