• 玩游戏怎么能没有皮肤,Python一键采集王某耀游戏所有皮肤,这波就很舒服


    现在玩游戏没得个皮肤,都不好意思说自己玩了游戏,听说某皮肤还有攻击距离加成,不知道真的假的,咱们今天就全部把它爬下来~

    在这里插入图片描述

    软件/模块/流程

    这里我们使用的软件是

    Python 3.8
    Pycharm

    没有的话在最左边扫一下就有了

    模块

    requests >>> 数据请求模块 第三方模块 
    re >>>  正则表达式 解析数据 内置模块 不需要安装
    # Python学习交流群:924040232
    os >>>  文件操作 自动创建文件夹 内置模块 不需要安装

    win+r 输入cmd ,然后输入 pip install requests 直接安装

    失败了的话,看我置顶文章。

    流程

    1. 发送请求, 对于英雄ID数据包发送请求 https://…com/web201605/js/herolist.json
    2. 获取数据, 获取服务器返回的response响应数据
    3. 解析数据, 提取我们想要的数据内容英雄ID 以及 英雄名字
    4. 发送请求, 对于英雄的详情页发送请求 https://…com/web201605/herodetail/542.shtml
    5. 获取数据, 获取服务器返回的response响应数据
    6. 解析数据, 提取皮肤的名字 以及构建完整图片url地址
    7. 保存数据

    视频讲解

    完整的视频讲解,会了的可以不看

    代码展示

    代码不多,稍微会一点的,对照流程就能做出来了,初学者不会的话可以看上面的视频。

    import requests  # 数据请求模块 第三方模块 pip install requests
    import re  # 正则表达式模块 内置模块
    import os # 文件操作模块
    # 1. 发送请求
    url = 'https://***.com/web201605/js/herolist.json'  # 确定请求url
    # 加上headers请求头进行伪装
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.82 Safari/537.36'
    }
    # 通过requests这个模块里面get请求方法对于url地址发送请求, 并且携带上headers请求头伪装, 最后用response变量接收返回数据
    response = requests.get(url=url, headers=headers)
    # print(response.json())  # <class 'list'>
    # print(type(response.json()))
    # print(response.text)    # <class 'str'>
    # print(type(response.text))
    # 2. 获取数据, 获取服务器返回的response响应数据
    # 3. 解析数据, 提取我们想要的数据内容英雄ID 以及 英雄名字
    for index in response.json():
        # 字典取值 根据冒号左边的内容 提取冒号右边的内容 键值对取值
        hero_id = index['ename']    # 英雄ID
        hero_name = index['cname']  # 英雄名字
        # 相对路径 你代码在哪个文件夹里面, 生成的就是那个
        # 绝对路径 指定那个硬盘那个文件里面
        path = f'{hero_name}\\'
        if not os.path.exists(path):  # 判断是否有这个文件夹
            os.mkdir(path) # 没有创建
    
        # 字符串格式化方法
        hero_url = f'https://****.com/web201605/herodetail/{hero_id}.shtml'
        # 4.发送请求, 对于英雄的详情页发送请求
        response_1 = requests.get(url=hero_url, headers=headers)
        # 遇到乱码, 直接进行转码
        response_1.encoding = response_1.apparent_encoding # 自动识别编码
        # print(hero_id, hero_name, hero_url)
        # print(response_1.text)
        title_info = re.findall('<ul class="pic-pf-list pic-pf-list3" data-imgname="(.*?)">', response_1.text)[0]
        title_info = re.sub('&\d+', '', title_info).split('|')
        # len(title_info) >>> 4  # 统计列表有多少个元素,
        print(title_info) # len(title_info) + 1 >>> 5
        for i in range(1, len(title_info) + 1):  # 顾头不顾尾
            img_url = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{hero_id}/{hero_id}-bigskin-{i}.jpg'
            img_name = title_info[i-1]
            print(img_name, img_url)
            img_content = requests.get(url=img_url, headers=headers).content # 获取图片二进制数据
            with open(path + str(img_name) + '.jpg', mode='wb') as f:
                f.write(img_content)
            print(hero_name, img_name)

    兄弟们,今天的分享就到这,快去试试吧~

  • 相关阅读:
    Android 如何处理崩溃的异常
    体验下Xcode5与ios7
    IOS 改变导航栏返回按钮的标题
    android之HttpURLConnection
    android异步加载图片
    android 从服务器上获取APK下载安装
    android AsyncTask异步下载并更新进度条
    android 四种堆状态
    Windows Azure 的开源 DNA
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/hahaa/p/15927990.html
Copyright © 2020-2023  润新知