爬虫基础(案例:爬取英雄联盟全皮肤)

该博客介绍了如何使用Python爬取《英雄联盟》(LOL)游戏中英雄的皮肤信息。首先,确定数据为静态JSON,然后通过Chrome调试工具抓包找到皮肤URL。接着,发送GET请求获取JSON数据,并解析提取皮肤名称和图片URL。通过遍历不同英雄ID,拼接URL获取所有英雄的皮肤信息。最后,将数据写入CSV文件并下载皮肤图片。
摘要由CSDN通过智能技术生成

爬取思路:
1、首先分析是静态数据还是动态数据,HTML源码中找不到英雄页面的信息,所以是静态数据。
2、chrom调试抓包,找到皮肤信息所在的URL ,这里第一个英雄皮肤所在的URL为https://game.gtimg.cn/images/lol/act/img/js/hero/1.js
3、直接通过get请求来获取包含目的信息的json数据
4、从json数据中提取各个皮肤的url以及名称并保存下来。
5、到此为止,单个英雄的皮肤爬取成功。
6、分析发现不同英雄页面的url之间只是最后的编号不同,再次通过抓包来获取各个英雄的编号信息。
7、获取成功后对各个英雄的url进行拼接修改即可得到各个英雄的url。


#skin_url =https://game.gtimg.cn/images/lol/act/img/js/hero/1.js
import requests
import json
import csv
headers = {
    "User-Agent":'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36'

    }
skins_dic = dict()
url = "https://game.gtimg.cn/images/lol/act/img/js/hero/"
def get_skin(url):
    res = requests.get(url, headers = headers)
    # print(eval(res.text))   #????报错。
    #因为json里边有些key值是没有加双引号,直接去掉双引号的话就会报变量为定义的错误
    
    #二者是等价的 json转字典    
    # data = res.json()
    data = json.loads(res.text)
    

    sl = dict()  
    for sk in  data["skins"]:
        # 皮肤的key值为:mainImg
        # 皮肤名字的Key值为:name
        if(sk["mainImg"] != ""):
            # print("skin_name:{},url:{}".format(sk["name"],sk["mainImg"]))
            sl[sk["name"]] = sk["mainImg"]
    skins_dic[data["skins"][0]["name"]] = sl.copy()
    sl.clear()


sequence = []
def get_sequence():
    url = "https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js"
    res = requests.get(url,headers = headers)
    res_dic = eval(res.text)
    for se in res_dic["hero"]: 
        sequence.append(se['heroId'])


get_sequence()

#英雄ULR的连接并不是简单的id+编号,而是保存在一个新的接口中,要重新爬取
for i in sequence:
    get_skin(url+str(i)+".js")
    break
def documentimg(url,name):
    res = requests.get(url, headers = headers)
    file = open("C:\\Users\\孤桥\\Desktop\\项目\\爬虫皮肤下载\\{}.jpg".format(name),"wb")
    file.write(res.content)
    file.close()


#构建一个CSV文件,将爬到的皮肤记录一下
file = open("C:\\Users\\孤桥\\Desktop\\项目\\爬虫皮肤下载\\skin.csv","a",newline='')
file_csv = csv.writer(file)
file_csv.writerow(['英雄名称',"英雄皮肤","皮肤图片地址"])
def write_csv(heroname,skinname,url):
    file_csv.writerow([heroname,skinname,url])

for i in skins_dic:
    for j in skins_dic[i]:
        # documentimg(skins_dic[i][j],j)
        write_csv(i, j,skins_dic[i][j])        
file.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值