社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何用Python爬取LOL官网全英雄皮肤

python • 5 年前 • 553 次点击  


你没有看错,没错今天小编带你爬取LOL官网全英雄皮肤的图片


不要失望,也不要难过


接下咱们来讲讲怎么爬取LOL官网




本次案例使用到的模块


import requests
import re
import json

安装模块:

pip install requests
#re、json都是自带的不需要安装


01

获取JS源代码  获取英雄的ID


首先让咱们找到每个英雄皮肤的地址,F12打开开发者工具页面选择器,选中图片自动找寻到图片的地址


龙的传人 李青的图片地址:

http://ossweb-img.qq.com/images/lol/web201310/skin/big64003.jpg

神僧 李青图片地址:

http://ossweb-img.qq.com/images/lol/web201310/skin/big64011.jpg


不难发现其中的规律:

big64003.jpg

big64011.jpg

很明显 64是英雄的ID地址 003是皮肤顺序



找到JS源代码,你会发现英雄的ID地址并不是按照顺序排列下来的!

def getLOLImages():
    url_js = 'http://lol.qq.com/biz/hero/champion.js'
    #获取JS源代码 str bytrs字节
    res_js = requests.get(url_js).content
    #转码
    html_js = res_js.decode()
    #正则表达
    req = '"keys":(.*?),"data"'
    list_js = re.findall(req,html_js)
    # str → dict
    dict_js = json.loads(list_js[0])
    print(dict_js)


很多不明白这个正则表达式怎么写,这里简单的说明一下:

前面是 “keys”:后面是,“data” 然后我们需要提取的是中间的部分,那么不管它们是啥,我们就是.?* 通配符全部匹配出来。


后面就不详细讲解了,本篇文章最后,小编会带上详细的视频讲解

02

拼接URL地址、获取下载图片的地址


    pic_list = []
    for key in dict_js:
        #print(key)
        for i in range(20):
            num = str(i)
            if len(num) == 1:
                hreo_num = "00"+num
            elif len(num) == 2:
                hreo_num = "0"+num
            numstr = key+hreo_num
            url = "http://ossweb-img.qq.com/images/lol/web201310/skin/big"+numstr+".jpg"
            print(url)
            pic_list.append(url)

            list_filepath = []
            path = "图片保存地址"
            #print(dict_js.values())
            for name in dict_js.values():
                for i in range(20):
                    file_path = path + name + str(i) + '.jpg'
                    list_filepath.append(file_path)
                    #print(list_filepath)

03

下载图片

    n = 0               
    for picurl in pic_list:
        res = requests.get(picurl)
        n+=1

        if  res.status_code ==200:

            print("正在下载%s"%list_filepath[n])

            with open(list_filepath[n],'wb') as f:
                f.write(res.content)


04

详细视频学习地址


链接:https://pan.baidu.com/s/1TbPuMUsKvuk9bqh3hm6wNQ 

密码:ewyk

点击阅读原文即可进入百度云,在这里复制密码就好了



今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/h3CgyDHNwz
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/14063
 
553 次点击