手把手教你使用Python網(wǎng)絡(luò)爬蟲獲取王者榮耀英雄出裝說明并自動(dòng)化生成markdown文件
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是Python進(jìn)階者。
一、前言
玩過王者榮耀游戲的小伙伴們都知道英雄出裝是十分重要的事情,一個(gè)合理的出裝,再加上銘文,可以讓你在王者戰(zhàn)場(chǎng)上勢(shì)如破竹,unstoppable!
前幾天在【明佬】群里看到他分享了一個(gè)使用Python網(wǎng)絡(luò)爬蟲獲取王者榮耀英雄出裝說明,并使用線程池的方式下載了出裝圖片,之后還自動(dòng)化生成了markdown文件,干貨內(nèi)容很多,這里拿出來分享給大家,歡迎大家積極嘗試。
二、數(shù)據(jù)獲取
這里我們的目標(biāo)網(wǎng)站是王者榮耀官網(wǎng),如下圖所示。
之后依次點(diǎn)擊首頁右側(cè)中的【英雄/皮膚】的【更多】按鈕,可以進(jìn)入到詳情頁,如下圖所示,點(diǎn)擊【局內(nèi)道具】就可以看到出裝信息了,里邊包含了我們想要的目標(biāo)信息。
通過瀏覽器抓包,可以獲取到具體的信息,可以看到存放在json格式中。
下圖是數(shù)據(jù)詳情截圖,可以看到有中文亂碼,這個(gè)不影響,起碼數(shù)據(jù)是可以拿到的。

代碼實(shí)現(xiàn)過程
找到數(shù)據(jù)源之后,接下來就是代碼實(shí)現(xiàn)了,一起來看看吧,這里直接套用【明佬】代碼,在jupyter notebook中跑的。
獲取裝備數(shù)據(jù)
import?requests
import?pandas?as?pd
headers?=?{
????'User-Agent':?'Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?'
??????????????????'Chrome/88.0.4324.104?Safari/537.36?'
}
target?=?'https://pvp.qq.com/web201605/js/item.json'
item_list?=?requests.get(target,?headers=headers).json()
item_df?=?pd.DataFrame(item_list)
item_df.sort_values(["item_type",?"price",?"item_id"],?inplace=True)
item_df.fillna("",?inplace=True)
item_df.des1?=?item_df.des1.str.replace("?p>",?"",?regex=True)
item_df.des2?=?item_df.des2.str.replace("?p>",?"",?regex=True)
item_df
結(jié)果如下圖所示:

多線程下載圖片
接下來使用線程池的方法下載圖片,圖片的拼接方法也很簡(jiǎn)單,看下圖就一目了然了。
下面是代碼實(shí)現(xiàn):
import?os
from?concurrent.futures?import?ThreadPoolExecutor
def?download_img(item_id):
????if?os.path.exists(f"imgs/{item_id}.jpg"):
????????return
????imgurl?=?f"http://game.gtimg.cn/images/yxzj/img201606/itemimg/{item_id}.jpg"
????res?=?requests.get(imgurl)
????with?open(f"imgs/{item_id}.jpg",?"wb")?as?f:
????????f.write(res.content)
os.makedirs("imgs",?exist_ok=True)
with?ThreadPoolExecutor(max_workers=8)?as?executor:
????nums?=?executor.map(download_img,?item_df.item_id)
下載速度很快,幾秒鐘的事情,結(jié)果如下圖所示:

接下來,我們將數(shù)據(jù)自動(dòng)化生成Markdown文檔,一起來看看吧。
生成Markdown文檔
代碼如下,前面部分是數(shù)據(jù)的預(yù)處理,后面是寫入文件:
item_type_dict?=?{1:?'攻擊',?2:?'法術(shù)',?3:?'防御',?4:?'移動(dòng)',?5:?'打野',?7:?'游走'}
item_ids?=?item_df.item_id.values
item_df.item_id?=?item_df.item_id.apply(
????lambda?item_id:?f"")
item_df.item_type?=?item_df.item_type.map(item_type_dict)
item_df.columns?=?["圖片",?"裝備名稱",?"類型",?"售價(jià)",?"總價(jià)",?"基礎(chǔ)描述",?"擴(kuò)展描述"]
item_df
寫入文件的代碼,生成Markdown文檔:
with?open("王者裝備說明.md",?"w")?as?f:
????for?item_type,?item_split?in?item_df.groupby("類型",?sort=False):
????????f.write(f"#?{item_type}\n")
????????item_split.drop(columns="類型",?inplace=True)
????????f.write(item_split.to_markdown(index=False))
????????f.write("\n\n")
結(jié)果如下圖所示:

之后在本地還會(huì)生成一個(gè)名為【王者裝備說明.md】的Markdown文檔,雙擊文件打開,內(nèi)容如下圖所示:
真是直呼好家伙!我在這一步實(shí)現(xiàn)的時(shí)候,遇到了一個(gè)報(bào)錯(cuò),如下所示:
Missing?optional?dependency?'tabulate'.??Use?pip?or?conda?to?install?tabulate.
提示卻少依賴庫,只需要在cmd下進(jìn)行安裝即可pip install tabulate,之后就可以正常運(yùn)行了。

生成Excel表格
不過Markdown的表格無法任意調(diào)整,圖片需要點(diǎn)擊后才會(huì)放大,下面我們考慮生成Excel表格:首先需要整理數(shù)據(jù),代碼如下:
item_df.圖片?=?""
item_df.基礎(chǔ)描述?=?item_df.基礎(chǔ)描述.str.replace("
",?"\n")
item_df.擴(kuò)展描述?=?item_df.擴(kuò)展描述.str.replace("
",?"\n")
item_df
生成結(jié)果如下圖所示:
之后將結(jié)果寫入到Excel中去,代碼如下所示:
#?寫入Excel表格
from?openpyxl.drawing.image?import?Image
from?openpyxl.styles?import?Alignment
with?pd.ExcelWriter("王者裝備說明.xlsx",?engine='openpyxl')?as?writer:
????item_df.to_excel(writer,?sheet_name='裝備說明',?index=False)
????worksheet?=?writer.sheets['裝備說明']
????worksheet.column_dimensions["A"].width?=?11
????for?item_id,?(cell,)?in?zip(item_ids,?worksheet.iter_rows(2,?None,?1,?1)):
????????worksheet.row_dimensions[cell.row].height?=?67
????????worksheet.add_image(Image(f"imgs/{item_id}.jpg"),?f'A{cell.row}')
????worksheet.column_dimensions["F"].width?=?15
????worksheet.column_dimensions["G"].width?=?35
????writer.save()
打開文件,效果圖如下圖所示:

當(dāng)然了,大家也可以根據(jù)自己想要的效果生成HTML和Word等等。
三、總結(jié)
大家好,我是Python進(jìn)階者。這篇文章主要分享了一個(gè)使用Python網(wǎng)絡(luò)爬蟲獲取王者榮耀英雄出裝說明,并使用線程池的方式下載了出裝圖片,之后還自動(dòng)化生成了markdown文件,干貨內(nèi)容很多,歡迎大家積極嘗試,如果有遇到問題,請(qǐng)?zhí)砑游液糜眩規(guī)椭鉀Q。
最后感謝粉絲【明佬】分享的代碼喝王者榮耀出裝攻略,真是太強(qiáng)了,上王者指日可待!

最后放上【明佬】的csdn鏈接:https://xxmdmst.blog.csdn.net/article/details/124035041,點(diǎn)擊閱讀原文可以直達(dá)噢!
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何Python問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請(qǐng)?jiān)诤笈_(tái)回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
