[网络爬虫]批量爬取王者荣耀所有皮肤图片

  • 🎈个人主页:北·海
  •  🎐CSDN新晋作者
  •  🎉欢迎 👍点赞✍评论⭐收藏
  • ✨收录专栏:网络爬虫
  • 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗

 

在页面源代码请求出来的源码是假的数据,皮肤img的那块是统一格式的,拿不到想要的img,换种思路,抓包,从img分类里面,拿到皮肤图片的url,分析之后,只需要改动英雄的id 皮肤的url后面加上数字,则可以拿到正确的url,需要用到的知识,request请求,os可以写正则和创建文件夹,字符串分割,xpath数据解析,可以使用多线程加快数据的保存

中文乱码问题:查看charset字符集,用encoding改为相应的字符集即可

import requests
from lxml import etree
import os
import asyncio

if not os.path.exists("./王者荣耀皮肤"):
    os.makedirs("./王者荣耀")

main_url = 'https://pvp.qq.com/web201605/herolist.shtml'
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
}
response = requests.get(url=main_url,headers=headers)
response.encoding = 'gbk'
#拿到主页的text文档
page_text = response.text
#数据解析 拿到每个影响详情页的url
tree = etree.HTML(page_text)
hero_detail_url = tree.xpath('//ul[@class="herolist clearfix"]/li/a')
for hero in hero_detail_url:
    #获取到了英雄的id
    href = hero.xpath('./@href')[0]
    hero_id = href.split('/')[1]
    hero_id = hero_id.split('.')[0]#英雄id
    hero_name = hero.xpath('./img/@alt')[0]#英雄名字
    count = 1
    for num in range(1,11):
        #拿到皮肤的url
        hero_url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/'+str(hero_id) + '/' +str(hero_id) + '-bigskin-' + str(num) + '.jpg'
        pifu_data = requests.get(url=hero_url,headers=headers).content
        if (pifu_data !="b'404 page not found\n'"):
            #皮肤存放的文件夹
            hero_file = "王者荣耀/" + hero_name
            #皮肤的地址
            hero_address = hero_file +'/'+ str(count) +'.jpg'
            count =count +1
            #文件夹不存在则创建
            if not os.path.exists(hero_file):
                os.makedirs(hero_file)
            #将二进制数据写入皮肤地址
            with open(hero_address,'wb') as fp:
                fp.write(pifu_data)
                print(hero_address,"保存成功")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北·海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值