欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

爬取 lol全皮肤原画

程序员文章站 2022-04-30 18:29:23
...

这真是初学者的乐趣 …^_^

这官网点击查看源码发现 毛都没有。。
这能这样,进入这个页面并点击第一个英雄
爬取 lol全皮肤原画
发现
爬取 lol全皮肤原画
然后查看第二个英雄同个地方的url
爬取 lol全皮肤原画
发现除了这个数字其他一样 嘿嘿。。 遍历全英雄的问题解决了
然后查看服务器返回的信息
爬取 lol全皮肤原画
爬取 lol全皮肤原画
都是明文的json数据,太棒了
到这里其实需要的信息已经收集完了,可以写代码了 ,先说一下实际运行碰到的问题:
url编号不规律 不是146 而是555
其中有的炫彩皮肤没有url
好了附上代码:


import os
import json
import requests
def get_url(url, hander): #获取页面数据
    try:
        r = requests.get(url, headers=hander, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except requests.exceptions.ConnectTimeout:
        print("(1)连接超时")
        return ""
    except requests.exceptions.HTTPError as e:
        print(e)
        return ""

def prasing_page(html, hander, n):
    s = 0 #定义变量方便一会儿输出进度条
    py_data = json.loads(html) #json数据转换成python数据
    hero_skins_list = py_data['skins']
    os.mkdir('O:\lol_hero_jpg\\'+hero_skins_list[0]['heroName']+'--'+hero_skins_list[0]['heroTitle'])  #创建文件夹
    os.chdir('O:\lol_hero_jpg\\'+hero_skins_list[0]['heroName']+'--'+hero_skins_list[0]['heroTitle'])  #进入文件夹
    for i in hero_skins_list:
        try: #如果有问题跳过本次循环进行下一次
            if i['mainImg'] == "": #如果图片url为空则跳过本次循环
                continue
            s = s + 1
            with open(i['name']+'.jpg', 'wb') as f:
                r = requests.get(i['mainImg'], headers=hander, timeout=30)
                f.write(r.content)
                f.close()
                print("\r当前进度>>>第 {} 位英雄 {} >>>{:.0f}%----------总进度{:.0f}%".format(n, hero_skins_list[0]['heroTitle'], s * 100 / len(hero_skins_list), n * 100/146), end="")
        except:
            continue
def main():
    hander = {"User-Agent": "Mozilla/5.0"}
    hero_number = 555
    n = 0 #变量表示第几位英雄
    for i in range(hero_number):
        try:
            n = n+1
            url = "https://game.gtimg.cn/images/lol/act/img/js/hero/"+str(i+1)+".js"
            html = get_url(url, hander)
            prasing_page(html, hander, n)
        except:
            n = n - 1
            continue
main()

运行效果:
爬取 lol全皮肤原画
爬取 lol全皮肤原画
最后附上几张比较喜欢的英雄原画^_^
爬取 lol全皮肤原画
爬取 lol全皮肤原画爬取 lol全皮肤原画