思路
1. 分析目标网页,确定爬取的 url 路径
2. 发送请求 requests 模拟浏览器发送请求,获取响应数据
3. 解析数据
4. 保存数据
使用谷歌浏览器
- 打开王者荣耀官网
- 找到英雄资料
- 调出检查工具
- 点击network
- 选择XHR过滤器(服务器与客户端交互的数据会放在XHR过滤器中)
- 点击重新加载,可以看到herolist.json文件
- 双击下载
- 下载后可以看到里边的数据整体来说是列表类型的,其中的每一个元素是字典类型的(键值对)
game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-2.jpg
game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-1.jpg
game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-1.jpg
game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-2.jpg
game.gtimg.cn/images/yxzj/img201606/skin/hero-info/176/176-bigskin-3.jpg
通过这些图片路径找规律可得:
http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/
这是都一样的
106/106
这个是英雄的编号
-bigskin-
这个也都一样
1
这个是第几个皮肤
.jpg
这个也一样的
找到请求的地址
后边的代码会用到以下几个知识点:
字符串类型分割为列表类型的数据
异常处理
文件读写
完整代码如下:
"""
王者 爬取全部皮肤的一个小案例
"""
import requests, os, random
url = 'https://pvp.qq.com/web201605/js/herolist.json'
agent = '填自己的'
# 请求头
headers = {'User-Agent': agent}
# 模拟浏览器发起请求
response = requests.get(url, headers)
# json解析
json_list = response.json()
# print(json_list)
for i in json_list:
try:
hero_num = i['ename']
hero_name = i['cname']
print('英雄编号', hero_num, '英雄名称', hero_name)
skin_list = i['skin_name'].split('|')
print('英雄皮肤', skin_list)
# range函数 开始 结尾 步长 含头不含尾
for x in range(1, len(skin_list) + 1):
base_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'
# 强制 str int list tuple set
pic_url = base_url + str(hero_num) + '/' + str(hero_num) + '-bigskin-' + str(x) + '.jpg'
print(pic_url)
pic = requests.get(pic_url).content
# 路径 防止转义 \n \t
file_path = r'D:\wzry_skin'
if not os.path.exists(file_path):
# 创建文件
os.makedirs(file_path)
# 英雄名字-英雄皮肤.jpg
with open(file_path + '/' + hero_name + '-' + skin_list[x - 1] + '.jpg', 'wb') as f:
f.write(pic)
except KeyError as f:
print(hero_name, '没有皮肤')
# 微信公众号:IT核电站