王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,使用Python代码即可完成。
爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网: 王者荣耀官方网站-腾讯游戏 (qq.com)
首先我们创建一个Python文件,然后导入os和requests模块。
from queue import Queue
from urllib import parse,request
from Reptile import Requests
import os # 创建文件夹模块
import threading
q = Queue(22)
url = 'https://apps.game.qq.com/cgi-bin/ams/module/ishow/V1.0/query/workList_inc.cgi'
def url_json_get(p): # 获取图片url
data = f'''
activityId: 2735
sVerifyCode: ABCD
sDataType: JSON
iListNum: 20
totalpage: 0
page: {p}
iOrder: 0
iSortNumClose: 1
iAMSActivityId: 51991
_everyRead: true
iTypeId: 2
iFlowId: 267733
iActId: 2735
iModuleId: 2735
_: 1663592877298
'''
html = Requests.Requests.get(url, params=data)
for i in html.json()['List']:
image_name = i['sProdName'] # 获取名字
image_name = parse.unquote(image_name) # 解析名称
for j in range(2, 9): # 获取2-8的图片链接
url_data = parse.unquote(i[f'sProdImgNo_{j}']).replace('jpg/200', 'jpg/0') # 解析网址
q.put([image_name, url_data]) # 放置到队列中
print(image_name, url_data)
def save_image():
while True: # 一直拿数据
print(f'目前队列数量{q.qsize()}')
try:
data = q.get(timeout=15) # 获取队列中的一个数据
except q.queue.Empty:
break
path = os.path.join('王者荣耀图片', data[0]) # 创建文件夹
try:
os.makedirs(path)
except:
pass
path = os.path.join(path, data[1].split('/')[-2])
# 拼接文件名称和文件夹路径
request.urlretrieve(data[1],path) #保存
print(f"{data[1].split('/')[-2]}保存成功")
# 图片保存的位置和名称
for page in range(10): # 生产者 30个 一个人负责一个页面
t = threading.Thread(target=url_json_get, args=(page,))
t.start()
for page in range(20): # 20个消费者 用来保存图片
t = threading.Thread(target=save_image)
t.start()
爬取效果:
爬虫是非常有趣的,因为它非常直观,视觉冲击感强,写出来也很有成就感,爬虫虽然强大,但千万不能随意爬取隐私信息。