介绍:
采集王者荣耀的英雄皮肤高清大图,保存下来做壁纸,做屏保,做api接口都是不错滴。
环境使用:
- Python 3.8
Pycharm
- 翻译插件 translation
模块使用:
# 导入数据请求模块 ---> 第三方模块 需要 在cmd里面进行安装 pip install requests
import requests
# 导入正则模块 ---> 内置模块 不需要安装
import re
# 导入文件操作模块 ---> 内置模块 不需要安装
import os
import json
import threading
# 导入多线程模块
如果安装python第三方模块:
- win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
2.在pycharm中点击Terminal(终端) 输入安装命令
如何配置pycharm里面的python解释器?
- 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
- 点击齿轮, 选择add
添加python安装路径
议安装虚拟环境的第三方库 virtualenv 来管理虚拟环境
实现流程思路:
- 对要采集的页面发送请求 分析得到的响应 -> F12 <查看请求头的信息>
- 获取数据, 获取response响应数据(text\json\content...)
- 解析数据, 提取我们想要数据内容 —> 通过re定位需要的数据
- 保存数据, 到指定创建好的文件夹
- 多页采集, for循环轻松搞定
代码
# -*- coding:utf-8 -*-
# @Author:🎈RedBalloon
# @Time:2022/10/6-23:07
# @File:wzSpider.py
# 导入数据请求模块 ---> 第三方模块 需要 在cmd里面进行安装 pip install requests
import requests
# 导入正则模块 ---> 内置模块 不需要安装
import re
# 导入文件操作模块 ---> 内置模块 不需要安装
import os
import json
import threading
# 导入多线程模块
def get_json_data():
link = 'https://pvp.qq.com/web201605/js/herolist.json'
# 模拟伪装浏览器 ---> 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份标识
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求
json_data = requests.get(url=link, headers=headers).json()
# for循环遍历
hero_id_list = []
hero_name_list = []
for index in json_data:
# 字典键值对取值 根据冒号左边的内容[键],提取冒号右边的内容[值]
hero_id = index['ename']
hero_name = index['cname']
# 保存到列表里,好返回使用
hero_id_list.append(hero_id)
hero_name_list.append(hero_name)
return hero_name_list, hero_id_list
# 创建文件保存路径
def folder_path(name):
# 设定文件夹路径 相对路径
file = f'wzimgs\\{name}\\'
if not os.path.exists(file):
os.makedirs(file)
return file
# 下载图片
def download(hero_name, hero_id):
url = f'https://pvp.qq.com/web201605/herodetail/{hero_id}.shtml'
# 模拟伪装浏览器 ---> 请求头
headers = {
# user-agent 用户代理 表示浏览器基本身份标识
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求 ---> <Response [200]> 响应对象: <>表示对象 response 响应回复 200 状态码 表示请求成功
response = requests.get(url=url, headers=headers)
# 乱码了 怎么办? ---> 你要根据网页编码来 response.encoding = 'gbk'
# 自动识别编码(网站备用的编码)
response.encoding = response.apparent_encoding
# 获取数据, 获取服务器返回响应数据 文本数据 print(response.text)
title_list = re.findall(r'data-imgname="(.*?)">', response.text)[0]
# 鹿灵守心&0|森&0|遇见神鹿&71|时之祈愿&94|时之愿境&42
title_list = re.sub(r'&\d+', r'', title_list).split('|')
# print(title_list)
# for循环 for num in range(1, 6): len() 统计列表元素个数
for num in range(1, len(title_list) + 1):
# 列表取值, 根据索引位置,索引位置从0开始计数
img_name = title_list[num - 1]
# 构建图片url地址
# 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/105/105-bigskin-1.jpg'
img_url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_id}/{hero_id}-bigskin-{num}.jpg'
# print(img_name, img_url)
# 保存数据 ---> 发送请求 获取数据 二进制数据
time.sleep(1)
img_content = requests.get(url=img_url, headers=headers).content
with open(folder_path(hero_name) + img_name + '.jpg', mode='wb') as f:
f.write(img_content)
print(f'保存完毕------{hero_name}')
if __name__ == '__main__':
start = time.time()
hero_names, hero_ids = get_json_data()
threads = []
for i in range(len(hero_names)):
t = threading.Thread(target=download, args=(hero_names[i], hero_ids[i]))
threads.append(t)
for t in threads:
t.start()
评论 (0)