分析过程我就不展示了,直接看代码
import urllib.request as req
import os
import re
import time
import urllib.error as error
import json
# 英雄了解界面的url
main_url = "https://pvp.qq.com/web201605/herodetail/"
# 创建存放图片的目录
gen_dir = "王者荣耀全高清图"
if not os.path.exists(gen_dir):
os.mkdir(gen_dir)
# 创建一个获取响应的函数
def response(url):
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64)"
" AppleWebKit/537.36 (KHTML, like Gecko)"
" Chrome/76.0.3809.100 Safari/537.36",
}
request = req.Request(url=url, headers=headers)
res = req.urlopen(request).read()
return res
def get_image(res):
# 提取每个英雄背景图的正则表达式
zz = re.compile('background:url\(\'(.*?)-1.jpg\'\)', re.S)
ret_url = zz.findall(res) # 获取到每个英雄详细界面中背景图的url
# 提取每个英雄的称谓的正则表达式
zz2 = re.compile('<h3 class="cover-title">(.*?)</h3>', re.S)
ret_cw = zz2.findall(res)
# 提取每个英雄姓名的正则表达式
zz3 = re.compile(r"<label>(.*?)</label>")
ret_name = zz3.findall(res)
final_name = ret_cw[0] + '-' + ret_name[0]
print(f"{final_name}的皮肤正在下载。。。。。")
for k in ret_url:
for x in range(1, 8 + 1): # 获取英雄图片的皮肤url
x = str(x)
image_url = 'https:' + k + f"-{x}.jpg"
try:
file_dir = gen_dir + '\\' + final_name # 每个英雄所在目录名字
file_name = image_url.split("/")[-1] # 英雄每个皮肤的文件名
if not os.path.exists(file_dir):
os.mkdir(file_dir)
file_path = file_dir + '\\' + file_name # 保存的文件路径
if not os.path.exists(file_path): # 判断文件是否已经存在,防止重复下载
req.urlretrieve(image_url, file_path)
else:
continue
except error.HTTPError: # 当访问错误时说明已经下载完成,则跳出循环
print(f"{final_name}的皮肤已全部下载完成!!!")
# time.sleep(2) # 缓冲两秒,防止下载卡顿
break
# 英雄从105.shtml到524.shtml,其中部分数字不存在
for j in range(105, 524 + 1):
url = main_url + str(j) + ".shtml" # 构建英雄详细页面的url
try:
if j == 524: # 判断是否到最后一个英雄
res = response(url).decode('gbk')
get_image(str(res))
print("王者荣耀皮肤已全部下载完毕!!!")
else:
res = response(url).decode('gbk')
get_image(str(res))
except error.HTTPError:
continue
这是效果图
先声明下:
本人是自学python一周余的大一萌新,并非大佬,所以很多东西都是半懂,但代码全独立完成
你要问我为何开始自学python,这要从一只蝙蝠说起,,,
这是我写的第一篇博客,是分享,更是纪录我的成长历程。