python爬虫 -- 网页分析(王者荣耀英雄皮肤)
全英雄页面,分析数据位置
XHR(XMLHttpRequest)记录ajax请求
标头, 预览, 响应
url, user-agent用户浏览器身份标识
Python代码
# 爬取王者荣耀 全英雄皮肤大图
# requests
# json
import requests # pip install requests 网络请求模块
import json
import os
# 1、分析网页 -- 确定爬去路径url, headers参数
Request_URL = 'https://pvp.qq.com/web201605/js/herolist.json'
Request_Headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36'
}
# 2、发送请求 -- requests模拟浏览器发送请求,获取响应数据
response = requests.get(Request_URL, headers=Request_Headers) # get方法,返回json
data_str = response.text ################# json response.text
# print(data_str) # 查看接收到的数据文本
# 3、解析数据 -- json模块,把json字符串转化成python可交互的数据类型
# 3.1、类型转换
data_list = json.loads(data_str) # json -> python可解析,这里是列表
# print(data_list)
# 3.2、数据解析
if not os.path.exists('王者荣耀全英雄大图'):
os.makedirs('王者荣耀全英雄大图')
print('文件夹 “王者荣耀全英雄大图” 创建成功:')
else:
print('文件夹 “王者荣耀全英雄大图” 已存在:')
for ( index, data) in enumerate(data_list):
if 'skin_name' in data :
skin_list = data['skin_name'].split('|')
else:
skin_list = ['幸存者', '冷晖之枪'] # 马超异常,有2皮肤
# print(index, data, data["cname"], skin_list)
for index in range(len(skin_list)):
# 构建图片url
# 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + data['ename'] + '/' + data['ename'] +'-bigskin-' + skin_num + '.jpg'
skin_name = data['cname'] + '-' + skin_list[index] + '.jpg'
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(data['ename']) + '/' + str(data['ename']) +'-bigskin-' + str(index + 1) + '.jpg'
# print(skin_name, skin_url)
# 请求皮肤大图
skin_data = requests.get(skin_url, headers=Request_Headers).content ################# 二进制图片 response.content
# 4、保存数据 -- 保存到目标文件夹中
with open('王者荣耀全英雄大图\\' + skin_name, 'wb') as f:
print('正在下载:', skin_url, '-->', skin_name)
f.write(skin_data)
运行结果