使用python爬取英雄联盟的图片

起因:练习一下python,看到有人爬取王者荣耀的皮肤,我也来练练手。

首先查看英雄联盟英雄界面的js,还有英雄的js以及皮肤图片的url。这里我们可以看到英雄的列表是在http://lol.qq.com/biz/hero/champion.js 中
使用python爬取英雄联盟的图片_第1张图片
进入英雄界面,并查看元素
使用python爬取英雄联盟的图片_第2张图片
这里我们可以看到图片的http://osswebimg.qq.com/images/lol/web201310/skin/big266001.jpg在这里图片的id是266001 其中266为英雄的id,而001指的是第一个。
在观察页面元素看到安妮的皮肤id和名称是在http://lol.qq.com/biz/hero/Annie.js中,至此完成了皮肤id和皮肤名称的获取。
使用python爬取英雄联盟的图片_第3张图片
现在开始说明思路:

  1. 获取英雄的列表。
# 获取英雄联盟英雄列表
response = urllib.request.urlopen(
    "http://lol.qq.com/biz/hero/champion.js")

data = response.read().decode('utf-8')

json1 = re.findall(r"LOLherojs.champion=(.+?);", data)

hero_json = json.loads(json1[0])['keys']
  1. 获取英雄的皮肤id和名字。
c = []
for key in hero_json:
    # print("****key--:%s value--: %s" % (key, hero_json[key]))
    url_skin = "http://lol.qq.com/biz/hero/" + hero_json[key] + ".js"
    c.append(url_skin)
  1. 拼接出图片的url并下载。
  urlDown = "http://ossweb-img.qq.com/images/lol/web201310/skin/big" + imgId + ".jpg"

下面是全部的代码

# 代码片段1
import urllib.request
import json
import os
import pathlib
import re
from bs4 import BeautifulSoup

# 获取ID和name,并下载


def json_txt(jsonSkinSJSON, defalut):
    jsonSkinSJSON = jsonSkinSJSON["data"]["skins"]
    i = 0
    imgId = ""
    imgName = ""
    for key in jsonSkinSJSON:
        if i == 0:
            # print(key["id"])
            imgId = key["id"]
            # print(defalut)
            imgName = defalut
            i = i + 1
        else:
            imgId = key["id"]
            imgName = key["name"]
        save_dir = 'D:\LOLheroskin\\'
        save_file_name = save_dir + imgName + ".jpg"
        urlDown = "http://ossweb-img.qq.com/images/lol/web201310/skin/big" + imgId + ".jpg"
        # print(urlDown)
        try:
            if not os.path.exists(save_file_name):
                urllib.request.urlretrieve(urlDown, save_file_name)
        except Exception:
            print("下载失败")


# 获取英雄联盟皮肤


def getSkins(urlOne):
    response = urllib.request.urlopen(
        urlOne)
    data = response.read().decode('utf-8')
    # print(data)
    jsonSkin = re.findall(r"{\"data\":(.+?);", data)
    jsonSkinS = "{\"data\":" + jsonSkin[0]

    jsonSkinSJSON = json.loads(jsonSkinS)
    # print(jsonSkinSJSON["data"]["name"])
    defalut = jsonSkinSJSON["data"]["name"]

    json_txt(jsonSkinSJSON, defalut)

# 获取英雄联盟英雄列表
response = urllib.request.urlopen(
    "http://lol.qq.com/biz/hero/champion.js")

data = response.read().decode('utf-8')

json1 = re.findall(r"LOLherojs.champion=(.+?);", data)

hero_json = json.loads(json1[0])['keys']

c = []
for key in hero_json:
    # print("****key--:%s value--: %s" % (key, hero_json[key]))
    url_skin = "http://lol.qq.com/biz/hero/" + hero_json[key] + ".js"
    c.append(url_skin)

# 文件夹不存在则创建
save_dir = 'D:\LOLheroskin\\'
if not os.path.exists(save_dir):
    os.mkdir(save_dir)

for heroOne in c:
    getSkins(heroOne)
print("下载完成")

你可能感兴趣的:(使用python爬取英雄联盟的图片)