多线程--采集王者荣耀的英雄皮肤高清大图

多线程--采集王者荣耀的英雄皮肤高清大图

redballoon
2022-10-07 / 0 评论 / 15 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2023年02月20日,已超过36天没有更新,若内容或图片失效,请留言反馈。

介绍:

采集王者荣耀的英雄皮肤高清大图,保存下来做壁纸,做屏保,做api接口都是不错滴。

大乔-6.jpg

环境使用:

  • Python 3.8
  • Pycharm

    • 翻译插件 translation

模块使用:

# 导入数据请求模块  ---> 第三方模块 需要 在cmd里面进行安装 pip install requests
import requests
# 导入正则模块  ---> 内置模块 不需要安装
import re
# 导入文件操作模块  ---> 内置模块 不需要安装
import os
import json
import threading  
# 导入多线程模块

如果安装python第三方模块:

  1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
    2.在pycharm中点击Terminal(终端) 输入安装命令

如何配置pycharm里面的python解释器?

  1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
  2. 点击齿轮, 选择add
  3. 添加python安装路径

    议安装虚拟环境的第三方库 virtualenv 来管理虚拟环境

实现流程思路:

  1. 对要采集的页面发送请求 分析得到的响应 -> F12 <查看请求头的信息>
  2. 获取数据, 获取response响应数据(text\json\content...)
  3. 解析数据, 提取我们想要数据内容 —> 通过re定位需要的数据
  4. 保存数据, 到指定创建好的文件夹
  5. 多页采集, 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()

Snipaste_2022-10-07_22-45-35.png

Snipaste_2022-10-07_22-46-33.png

Snipaste_2022-10-07_22-56-09.png

效果图:

冰霜恋舞曲.jpg
遇见胡旋.jpg
唤灵魅影.jpg
吟游魔法.jpg
永夜之心.jpg

0

评论 (0)

取消