用爬虫批量爬取王者荣耀皮肤图片(完整代码在文末)

用爬虫批量爬取王者荣耀皮肤图片(完整代码在文末)_第1张图片

本次共使用了四个库,分别是

  1. requests: 用于发送HTTP请求,获取网页内容。

  2. lxml: 一个用于处理XML和HTML的库,这里主要用于解析HTML内容。

  3. os: 提供了一种使用操作系统功能的接口,这里主要用于创建目录和文件操作。

  4. time 模块中的 sleep 函数:用于在执行过程中添加延迟,这里是为了控制请求的频率,避免对服务器造成过大压力。

如果没有安装库的话需要安装

使用以下命令安装

pip install name
pip install name  #name是要安装的库的名字

如果有不清楚pip命令的友友可以参考小编上一篇文章

导入我们要使用的库

import requests
from lxml import etree
import os
from time import sleep

目标网址:王者荣耀官方网站-腾讯游戏

定制请求头

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}

英雄列表的URL

hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'

获取英雄列表的响应

hero_list_resp = requests.get(hero_list_url, headers=headers)

定义在D盘上保存图片的基础路径

base_path = 'D:/文档/王者荣耀皮肤/'

遍历英雄和皮肤列表

# 遍历英雄列表
for h in hero_list_resp.json():
    # 获取英雄的编号和中文名
    ename = h.get('ename')
    cname = h.get('cname')
    # 构建英雄的目录路径
    hero_directory = os.path.join(base_path, cname)

    # 如果目录不存在,则创建
    if not os.path.exists(hero_directory):
        os.makedirs(hero_directory)

    # 获取英雄详细信息的URL
    hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
    # 获取英雄详细信息的响应
    hero_info_resp = requests.get(hero_info_url, headers=headers)
    hero_info_resp.encoding = 'gbk'
    # 使用lxml库解析HTML
    e = etree.HTML(hero_info_resp.text)
    # 获取英雄皮肤的名称列表
    names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]
    names = [name[0:name.index('&')] for name in names.split('|')]

    # 遍历皮肤名称列表
    for i, n in enumerate(names):
        # 构建皮肤图片的URL
        skin_url = f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i + 1}.jpg'
        # 获取皮肤图片的响应
        resp = requests.get(skin_url, headers=headers)

将图片保存到目标路径

 with open(os.path.join(hero_directory, f'{n}.jpg'), 'wb') as f:
            f.write(resp.content)

打印已下载的信息

 print(f'已下载:{n} 的皮肤')

等待1秒,避免请求频率过快

        sleep(1)

完整代码

import requests
from lxml import etree
import os
from time import sleep

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}

hero_list_url = 'https://pvp.qq.com/web201605/js/herolist.json'
hero_list_resp = requests.get(hero_list_url, headers=headers)


base_path = 'D:/文档/王者荣耀皮肤/'

for h in hero_list_resp.json():
    ename = h.get('ename')
    cname = h.get('cname')
    hero_directory = os.path.join(base_path, cname)

    if not os.path.exists(hero_directory):
        os.makedirs(hero_directory)

    hero_info_url = f'https://pvp.qq.com/web201605/herodetail/{ename}.shtml'
    hero_info_resp = requests.get(hero_info_url, headers=headers)
    hero_info_resp.encoding = 'gbk'
    e = etree.HTML(hero_info_resp.text)
    names = e.xpath('//ul[@class="pic-pf-list pic-pf-list3"]/@data-imgname')[0]
    names = [name[0:name.index('&')] for name in names.split('|')]

    for i, n in enumerate(names):
        resp = requests.get(
            f'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{ename}/{ename}-bigskin-{i + 1}.jpg',
            headers=headers)

        with open(os.path.join(hero_directory, f'{n}.jpg'), 'wb') as f:
            f.write(resp.content)
        print(f'已下载:{n} 的皮肤')
        sleep(1)

运行结果

用爬虫批量爬取王者荣耀皮肤图片(完整代码在文末)_第2张图片

用爬虫批量爬取王者荣耀皮肤图片(完整代码在文末)_第3张图片

用爬虫批量爬取王者荣耀皮肤图片(完整代码在文末)_第4张图片

你可能感兴趣的:(爬虫,python,开发语言)