zoukankan      html  css  js  c++  java
  • Python利用requests模块爬取皮肤

    import requests
    import os
    import json
    from lxml import etree
    from fake_useragent import UserAgent
    import logging
    
    # 日志输出的基本配置
    logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
    
    
    class glory_of_king(object):
        def __init__(self):
            if not os.path.exists("./王者荣耀皮肤"):
                os.mkdir("王者荣耀皮肤")
            # 利用fake_useragent产生随机UserAgent  防止被反爬
            ua = UserAgent(verify_ssl=False, path='fake_useragent.json')
            for i in range(1, 50):
                self.headers = {
                    'User-Agent': ua.random
                }
    
        def scrape_skin(self):
            # 发送请求   获取响应
            response = requests.get('https://pvp.qq.com/web201605/js/herolist.json', headers=self.headers)
            # str转为json
            data = json.loads(response.text)
            # for循环遍历data获取需要的字段  创建对应英雄名称的文件夹
            for i in data:
                hero_number = i['ename']    # 获取英雄名字编号
                hero_name = i['cname']      # 获取英雄名字
                os.mkdir("./王者荣耀皮肤/{}".format(hero_name))  # 创建英雄名称对应的文件夹
                response_src = requests.get("https://pvp.qq.com/web201605/herodetail/{}.shtml".format(hero_number),
                                            headers=self.headers)
                hero_content = response_src.content.decode('gbk')  # 返回相应的html页面 解码为gbk
                # xpath解析对象  提取每个英雄的皮肤名字
                hero_data = etree.HTML(hero_content)
                hero_img = hero_data.xpath('//div[@class="pic-pf"]/ul/@data-imgname')
                # 去掉每个皮肤名字中间的分隔符
                hero_src = hero_img[0].split('|')
                logging.info(hero_src)
                # 遍历英雄src处理图片名称。
                for j in range(len(hero_src)):
                    # 去掉皮肤名字的&符号
                    index_ = hero_src[j].find("&")
                    skin_name = hero_src[j][:index_]
                    # 请求下载图片
                    response_skin = requests.get(
                        "https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg".format(
                            hero_number, hero_number, j + 1))
                    # 获取图片二进制数据
                    skin_img = response_skin.content
                    # 把皮肤图片保存到对应名字的文件里
                    with open("./王者荣耀皮肤/{}/{}.jpg".format(hero_name, skin_name), "wb")as f:
                        f.write(skin_img)
                        logging.info(f"{skin_name}.jpg 下载成功!!")
    
        def run(self):
            self.scrape_skin()
    
    if __name__ == '__main__':
        spider = glory_of_king()
        spider.run()
  • 相关阅读:
    python 替换图片中的像素
    python paddleocr 增加识别速度的方法
    mysql 子查询少用
    mysql 临时表代替in的方法
    mysql创建临时表不用创建临时表结构的方法
    Nginx 报错 connect() failed (110: Connection timed out) while connecting to upstream
    用mkcert生成SSL,内网完美起跑https
    用于制作任何echarts地图(省、市、区、城镇街道)
    javascript执行机制
    ES6便捷语法
  • 原文地址:https://www.cnblogs.com/security-guard/p/13841727.html
Copyright © 2011-2022 走看看