1、https://speedm.qq.com/web201712/map_list.shtml 赛道URL
https://speedm.qq.com/web201712/pet_list.shtml 宠物URL
下面以爬取赛道图片为例
2、进入开发人员工具,点击Network,并选中XHR,XHR是浏览器与服务器请求数据所依赖的对象,所以通过它便能筛选出一些服务器的响应数据。
3、下图红色框地址返回赛道信息的 jsonp 格式数据
问号后面显示的是时间戳可以不用管它;
4、dtm_88:赛道名称,slt_3c:528x260 图片url,tt_8a:1200x500 图片url
5、接下来开始写代码:
import requests
import json
import re
from tqdm import tqdm
import os
headers= {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36'}
#宠物 https://speedm.qq.com/zlkdatasys/data/pet_list/list.json?_=1606187805572
#赛道 https://speedm.qq.com/zlkdatasys/data/map_list/list.json?_=1606187805572
url = 'https://speedm.qq.com/zlkdatasys/data/map_list/list.json?_=1606187805572'
response = requests.get(url, headers=headers, allow_redirects=False)
if response.status_code != 200:
print("请求失败!")
else:
# 创建文件夹
if not os.path.exists('D:/QQ飞车手游地图/'):
os.mkdir('D:/QQ飞车手游地图/')
# 进入文件夹
os.chdir('D:/QQ飞车手游地图/')
text = response.text
#使用正则去除外层maps_data() 宠物:cwsy_80 赛道:dtsy_1f
info_list = json.loads(re.match(".*?({.*}).*", text, re.S).group(1))['dtsy_1f']
map_num = len(info_list)
for i in tqdm(range(map_num), '正在爬取QQ飞车手游的地图'):
#地图名称 宠物:mc_77 赛道:dtm_88
map_name = info_list[i]['dtm_88']
#地图url
map_url = info_list[i]['slt_3c']
#拼接url
map_url = 'https:' + map_url
response = requests.get(map_url, headers=headers, allow_redirects=False)
if response.status_code != 200:
print("请求失败!")
else:
with open(map_name + ".jpg", 'wb') as f:
f.write(response.content)
f.close()
pass