爬取英雄联盟所有英雄皮肤

我们通过分析英雄联盟官网页面,进入到资料库页面,分析英雄所在的页面
在这里插入图片描述
在这里插入图片描述
这里有两种类型的同样的图片,一种是大图片的,一种是类似头像的小图片。我们这里抓取大图片

拿到几种图片链接分析https://game.gtimg.cn/images/lol/act/img/skin/big5000.jpg可以发现所有英雄皮肤链接url除了数字之前的都一样,而且后面的数字都是以英雄id+三位数拼接而成(三位数从000开始,但是有的英雄并不是就是依次排列,可能000,,001,002会直接跳到013)

由于英雄联盟官网也是做了反爬措施了的,所有图片也是使用局部加载的方式,在开发者工作中,可以找到一个js文件,里面包含了英雄id与英雄的对应关系
在这里插入图片描述
通过请求该js,获取其源代码,使用正则表达式将其提取出来,用于后面的url拼接

代码如下:

import requests
import re
import json
# 请求js数据,获取英雄对应的代码
#       "92": "Riven",
# 		"68": "Rumble",
# 		"13": "Ryze",
# 		"113": "Sejuani",
def path_js(url):
    # 通过js源码,获取字节数据
    response = requests.get(url).content.decode('gb2312')
    req = '"keys":(.*?),"data"'
    # 将字符串转成正则对象
    # req = re.compile(req)
    list_js = re.findall(req,response)
    dict_js = json.loads(list_js[0])
    # print(dict_js)
    # print(len(dict_js))
    return dict_js


'https://game.gtimg.cn/images/lol/act/img/skin/big21003.jpg'
# LOL 皮肤链接除了前面的https://game.gtimg.cn/images/lol/act/img/skin/big都一样外,后面的数字采用
# 英雄的代码+三位数(从000开始,但是中间可能会跳,如001,002,003,012,013...)

# 拼接图片url
def path_url(dict_js):
    list_pic = []
    for key in dict_js:
        # 假设后面的数字到25,后面通过url访问是否成功判断是否有效
        for item in range(25):
            item = str(item)
            # item一位数拼接两个0
            if len(item) == 1:
                hero_item = '00' + item
            # item一位数拼接一个0
            elif len(item) == 2:
                hero_item = '0' + item
            # 拼接完整数字
            numbers_str = key + hero_item
            # print(numbers_str)
            # 拼接完整图片url
            url = 'https://game.gtimg.cn/images/lol/act/img/skin/big' + numbers_str + '.jpg'
            # 将所有拼接的图片url保存至列表
            list_pic.append(url)
    return list_pic

# 拼接图片名称
def name_pic(dict_js,path):
    list_file_path = []
    for name in dict_js.values():
        for item in range(25):
            file_path = path + name + str(item) + '.jpg'
            list_file_path.append(file_path)
    return list_file_path

# 保存图片
def save_pic(list_pic,list_file_path):
    for item in range(len(list_pic)):
        res = requests.get(list_pic[item])
        if res.status_code == 200:
            print('正在下载%s'%list_file_path[item])
            with open(list_file_path[item],'wb')as fp:
                fp.write(res.content)
    print('所有皮肤全部下载完毕!')

if __name__ == '__main__':
    url = 'https://lol.qq.com/biz/hero/champion.js'
    path = 'LOL\\'
    # 获取英雄对应id,返回字典数据
    dict_js = path_js(url)
    # 拼接完整的图片url,返回列表数据
    list_pic = path_url(dict_js)
    # 拼接完整的图片保存路径,返回列表数据
    list_file_path = name_pic(dict_js,path)
    # 根据图片url列表和路径列表,保存图片
    save_pic(list_pic,list_file_path)

在这里插入图片描述

PyCharm是一款强大的集成开发环境,它支持Python语言,并提供了丰富的功能用于Web爬虫开发。如果你想通过PyCharm爬取英雄联盟(League of Legends, LoL)的所有英雄皮肤信息,你需要遵循以下步骤: 1. **了解目标网站**:首先,访问英雄联盟官方或其他可靠的API数据源,如第三方数据平台,因为通常游戏官方不会提供直接的HTML爬取接口。 2. **分析数据结构**:确定数据所在的URL、HTML标签或者API路径,以及所需的数据字段,例如英雄名称、皮肤图片链接等。 3. **安装依赖**:可能需要安装`requests`库来发送HTTP请求,`BeautifulSoup`或`lxml`库解析HTML内容,以及可能需要`json`处理JSON格式的数据。 4. **编写爬虫脚本**: - 使用PyCharm创建一个新的Python文件,开始编写爬虫代码。利用`requests.get()`获取网页内容,然后用`BeautifulSoup`解析提取相关信息。 ```python import requests from bs4 import BeautifulSoup url = "http://example.com/heroes" # 替换为实际英雄信息页面 response = requests.get(url) soup = BeautifulSoup(response.text, 'html.parser') heroes_data = soup.find_all('div', class_='hero-item') # 示例,查找英雄元素 ``` 5. **提取数据**:遍历找到的数据,提取每个英雄的名称和皮肤信息。如果使用的是API,则需要解析JSON响应。 6. **存储数据**:将抓取到的信息保存到本地文件(如CSV、JSON或数据库),或者直接加载到数据分析工具如Pandas DataFrame中。 7. **异常处理**:考虑到网络不稳定或网站结构变化,添加适当的错误处理和重试机制。 8. **遵守规则**:务必尊重网站的服务条款,尤其是对于API,有些可能会有频率限制或禁止爬虫。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

孜孜孜孜不倦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值