python3最新爬取王者荣耀英雄的图片

这里写自定义目录标题


pyrhon最新爬取王者荣耀全部英雄的皮肤

第一步 分析网页 url:https://pvp.qq.com/web201605/herolist.shtml
第二步 通过分析网页数据我们发现 了:
在这里插入图片描述
第三步 我们可以鼠标点击这个json数据 看看给我们的数据,验证我们的猜测
在这里插入图片描述
发现通过点击这个数据包下载的文件正是我们要的json数据
在这里插入图片描述
注意: 通过以上的分析 下面我们就可以动手构造我们的代码了
在这里插入图片描述
在这里插入图片描述
!!!!!注意: 我把英雄名字和id放在一个字典是想做一个通过输入英雄名字爬取对应的皮肤 做的准备。。。(刚入门的小白,请大家多指点)

通过json文件的分析 我们发现图片的url 并没有在json数据里边,
那这样的话 我们还要继续分析数据
在这里插入图片描述
通过分析我们得知 英雄皮肤的名称 是嵌套在html数据里的,那这样的话我们就可以利用xpath提取出来我们想要的数据
在这里插入图片描述
而且通过我们的分析 发现 图片的url在前天html数据里,这里大家可以下方箭头指向的位置复制 到新的标签页 发送请求
在这里插入图片描述

在这里插入图片描述
!!!! 最初我还以为英雄对应的url 也可以利用xpth提取出来,但是后来在我百般调试下,没有搞定,转而寻找其他的办法( 跪求大佬指定怎么把图片对应的url提取出来)
第二种分析的图片的url规律 在我调试xpath的时候我发现 他们是有规律的 画布多说 直接看图。我们那廉颇举例:在这里插入图片描述
通过分析 以后。我们就可以都早我们的代码了

for i in range(int(input('请输入爬取多为位英雄的图片:'))):  # 通过for循环把英雄的id遍历出来  传入url1 中去请求
    # 1.确定目标的url
    url1 = f"https://pvp.qq.com/web201605/herodetail/{id_[i]}.shtml"
    # 2.发送请求
    respons_ = session_.get(url=url1, headers=headers_).content


    x_th = etree.HTML(respons_)


    tu_name = x_th.xpath('//ul/@data-imgname')

    print('提取英雄的皮肤图片的名字', tu_name)

    for k in tu_name:  # 把图片名字中的特殊符号去除
        j = str(k).replace('0', '').replace('&', '').replace('1', '').replace('2', '').replace('|', ',').split(',')
    print('去除特殊符号后的英雄名字:', j)
    path = 'D'     # 在当前目录穿件文件夹
    if not os.path.exists(path + f'{name_[i]}'):  # 创建英雄的名字的文件夹
        os.makedirs(path + f'王者荣耀\{name_[i]}') # 创建往王者荣耀的主文件夹
    a = 1
    for tu_url in range(len(j)): # 通过分析得知 图片的url 是有固定的写法   英雄指定的id   和 图片指向的 是数字每次加一 从1开始到图片名字遍历结束
        # 确定图片的uel_
        url2 = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{id_[i]}/{id_[i]}-bigskin-{tu_url+1}.jpg'
        print('正在下载%s的第%s张图片' % (name_[i], (tu_url+1)))
        # 用一个变量接受 保存的到的响应
        res1 = session_.get(url=url2, headers=headers_).content

        with open((path + f'王者荣耀/{name_[i]}') + "/" + f'{j[tu_url]}.jpg', 'wb')as f: # 保存在对应英雄的文件夹中
            f.write(res1)
            print('%s下载完毕'% j[tu_url])
            a +=1
    print('%s下载完毕'% name_[i])

最终的代码就是:

import requests
from fake_useragent import FakeUserAgent
import jsonpath
from lxml import etree
import os

if name == ‘main’:
# 确定目标的url 通过分析发现对应英雄id 网址是https://game.gtimg.cn/images/yxzj/web201706/js/heroid.js
url_ = ‘https://pvp.qq.com/web201605/js/herolist.json’
user = FakeUserAgent().random
# 构造user-agent身份信息
headers_ = {‘User-Agent’: user,
‘X - Requested - With’: ‘XMLHttpRequest’,
‘Content-Type’: ‘application/json; charset=utf-8’,
‘Accept’: ‘application/json, text/javascript, /; q=0.01’,
‘Referer’: “https://pvp.qq.com/web201605/herolist.shtml”
}
# 利用session方法发送请求 自带cookie
session_ = requests.session()
res_ = session_.get(url_, headers=headers_)
# 把 请求的数据转换成json格式
data_ = res_.json()

id_ = jsonpath.jsonpath(data_, '$..ename')
name_ = jsonpath.jsonpath(data_, '$..cname')
print('提取的英雄id:', id_)
print('提取的英雄名称:', name_)
dict_ = {}  # 把英雄对应的名称和id 以键值对的方式放在字典里
for i in range(len(name_)):
    dict_[name_[i]] = id_[i]
print('对应的英雄名臣:id', dict_)


for i in range(int(input('请输入爬取多为位英雄的图片:'))):  # 通过for循环把英雄的id遍历出来  传入url1 中去请求
    # 1.确定目标的url
    url1 = f"https://pvp.qq.com/web201605/herodetail/{id_[i]}.shtml"
    # 2.发送请求
    respons_ = session_.get(url=url1, headers=headers_).content


    x_th = etree.HTML(respons_)


    tu_name = x_th.xpath('//ul/@data-imgname')

    print('提取英雄的皮肤图片的名字', tu_name)

    for k in tu_name:  # 把图片名字中的特殊符号去除
        j = str(k).replace('0', '').replace('&', '').replace('1', '').replace('2', '').replace('|', ',').split(',')
    print('去除特殊符号后的英雄名字:', j)
    path = 'D'     # 在当前目录穿件文件夹
    if not os.path.exists(path + f'{name_[i]}'):  # 创建英雄的名字的文件夹
        os.makedirs(path + f'王者荣耀\{name_[i]}') # 创建往王者荣耀的主文件夹
    a = 1
    for tu_url in range(len(j)): # 通过分析得知 图片的url 是有固定的写法   英雄指定的id   和 图片指向的 是数字每次加一 从1开始到图片名字遍历结束
        # 确定图片的uel_
        url2 = f'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{id_[i]}/{id_[i]}-bigskin-{tu_url+1}.jpg'
        print('正在下载%s的第%s张图片' % (name_[i], (tu_url+1)))
        # 用一个变量接受 保存的到的响应
        res1 = session_.get(url=url2, headers=headers_).content

        with open((path + f'王者荣耀/{name_[i]}') + "/" + f'{j[tu_url]}.jpg', 'wb')as f: # 保存在对应英雄的文件夹中
            f.write(res1)
            print('%s下载完毕'% j[tu_url])
            a +=1
    print('%s下载完毕'% name_[i])

新手小白 第一次 写文章,请大佬指点。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Python中,你可以使用爬虫技术来爬取王者荣耀英雄图片。以下是一个简单的示例代码来演示如何使用Python爬取王者荣耀英雄图片: ```python import requests import os def download_image(url, save_path): response = requests.get(url) with open(save_path, 'wb') as f: f.write(response.content) def crawl_hero_images(): # 创建保存图片的文件夹 if not os.path.exists('hero_images'): os.makedirs('hero_images') # 发送请求获取英雄列表 hero_list_url = 'https://api.example.com/heroes' response = requests.get(hero_list_url) hero_list = response.json() # 遍历英雄列表,爬取每个英雄的皮肤图片 for hero in hero_list: hero_name = hero['name'] skin_list = hero['skins'] for skin in skin_list: skin_name = skin['name'] image_url = skin['image_url'] save_path = f'hero_images/{hero_name}_{skin_name}.jpg' download_image(image_url, save_path) print(f'Successfully downloaded {hero_name} - {skin_name} image.') crawl_hero_images() ``` 上述代码中,我们首先创建了一个`download_image`函数,用于下载图片。然后,我们定义了一个`crawl_hero_images`函数,用于爬取英雄皮肤图片。在该函数中,我们首先发送请求获取英雄列表,然后遍历英雄列表,对于每个英雄,再遍历其皮肤列表,获取皮肤图片的URL,并使用`download_image`函数下载图片到本地。 请注意,上述代码中的URL和文件路径仅作为示例,请根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值