python爬取lol官網(wǎng)英雄圖片代碼,由論壇用戶原創(chuàng)制作的一款python爬取lol皮膚代碼產(chǎn)物,可以爬取lol官網(wǎng)平臺的英雄皮膚圖片,可以設置為頭像或者QQ空間背景?梢栽O置保存路徑然后等待代碼來幫您爬取圖片資源即可。需要獲取LOL皮膚圖片資源的朋友們不妨下載試試吧!
python爬取lol官網(wǎng)英雄圖片作者說明
因為最近在學習python,這個代碼也是百度了很長時間來寫的。
確實不會英語。。對英語一點也不敏感!
雖然某易論壇已經(jīng)有python的中文模塊了,但是不想去用中文,也算是挑戰(zhàn)一下自己把!
自己對易語言比較熟悉,所以有點經(jīng)驗來寫python,從另一個角度來說的話,python也算比較好理解!
下面的代碼注釋寫的很詳細!可以一起學習!算是給自己的第一課吧!
代碼使用
下面截圖沒有爬完的效果圖(圖片大小為980*500或者1024*630的圖片);所以這個清晰度還不叫壁紙吧!
代碼一覽
import requests,os,json,time
#requests為網(wǎng)頁操作模塊;用來取出英雄列表和皮膚列表
#os為系統(tǒng)模塊,用來寫文件和創(chuàng)建目錄
#json為json解析模塊,用來解析返回的數(shù)據(jù)
#time為時間模塊,用來延時
js = requests.get('https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js')#先訪問這個網(wǎng)址,獲取英雄列表
herolist = js.json()#取出返回的json格式
for i in herolist['hero']:#循環(huán)英雄列表
name = i['name']#取出英雄的名字
if os.path.exists('LOL壁紙'):#判斷根目錄是否存在
print('創(chuàng)建目錄失敗,目錄已存在;')
else:#不存在就創(chuàng)建這個目錄
os.mkdir('LOL壁紙')
print('創(chuàng)建目錄:LOL壁紙;')
if os.path.exists('LOL壁紙\\' + i['name']):#判斷根目錄LOL壁紙下子目錄為英雄名的目錄是否存在
print('創(chuàng)建目錄失敗,目錄已存在;')
else:#如果不存在就創(chuàng)建這個目錄
os.mkdir('LOL壁紙\\' + i['name'])
print('創(chuàng)建目錄')
heroID = i['couponPrice']#賦值英雄id
english_name = i['alias']#賦值英雄的英文名
photos_back = requests.get(f'http://lol.qq.com/biz/hero/{english_name}.js')#讀取以英雄英文名.js的網(wǎng)址來獲取皮膚列表
photos_back_text = photos_back.text#取出來返回的字符串
photos_back_text = photos_back_text.replace('if(!LOLherojs)var LOLherojs={champion:{}};LOLherojs.champion.'+english_name+'=','')
photos_back_text = photos_back_text.replace(';', '')
photos_back_text = json.loads(photos_back_text)#以上兩行行處理一下返回的字符串用來轉換為json的格式
for n in photos_back_text['data']['skins']:#循環(huán)一下皮膚列表
photos_back_byte = requests.get(f'https://game.gtimg.cn/images/lol/act/img/skin/big{n["id"]}.jpg')#讀取一下以皮膚ID為網(wǎng)址的圖片地址
if n['name'] == 'default':#判斷一下是不是默認皮膚
skin_name = str(name)#如果是默認皮膚,就以英雄名字來命名
else:#如果不是就以皮膚名字命名
skin_name = str(n['name'])
print(f'英雄名:{name};英雄ID:{heroID};皮膚ID:{n["id"]};英雄英文名:{english_name};皮膚名字:{skin_name};')#將狀態(tài)打印出來
if skin_name.find('/') != -1:#后面運行的時候發(fā)現(xiàn)一個問題,如果皮膚名字有一個'/'字符串的話直接就會報錯,所以這里來尋找一下皮膚名字有沒有'/'這個字符串
skin_name = skin_name.replace('/','')#如果存在這個字符串就把他替換掉
wb = open('LOL壁紙\\' + name+'\\'+ skin_name +'.jpg','wb')#打開這個圖片文件
wb.write(photos_back_byte.content)#把讀取出來的圖片網(wǎng)址以字節(jié)集的形式保存文件
wb.close()#關閉這個文件
print(f'保存{name}的{skin_name}成功!')#打印保存成功
print('延遲3秒繼續(xù)')
time.sleep(3)#延遲3秒,運行的時候發(fā)現(xiàn)如果速度過快,網(wǎng)站就會返回錯誤信息