python告诉你云顶之弈国服榜上有哪些大神

1.前序

想要得到云顶之弈游戏的排名数据,需要前往云顶之弈官网
https://lol.qq.com/tft/#/rank/list

image.png

通过谷歌浏览器,浏览者模式(F12),我们可以解析出排名数据接口。

# area_id   哪个区
# offset  第几页
# sign  加签串
http://qt.qq.com/lua/mlol_battle_info/get_total_tier_rank_list?area_id=XX&offset=XX&sign=XX

知道了这些,接下来就是如何对数据抓取及处理了。但在对数据做处理之前,我们需要处理一下加签串,即sign*。

def signCal(areaID,offset):
    str1 = 'area_id='+areaID+'&offset='+str(offset)+'qtld^xibt#a*'  #用于计算sign签名的字符串,最后一项为key
    b = str1.encode(encoding='utf-8')
    m = hashlib.md5()
    m.update(b)
    str_md5 = m.hexdigest()                                         #MD5编码
    return str_md5

数据获取及处理

def __init__(self):
    self.url = "https://qt.qq.com/lua/mlol_battle_info/get_total_tier_rank_list?area_id={0}&offset={1}&sign={2}"
def run(self, area_id, offset, sign):
    res = requests.post(self.url.format(str(area_id), str(offset), sign)).json()
    # print(res)
    # 对返回的数据做判断
    if "data" not in res or "player_list" not in res["data"]:
        return None

2.数据解析

当我们抓取到数据后,接下来就是要对数据做解析,解析数据就相对简单些。直接贴上解析数据代码

# 解析返回的数据
summoner_list = []
for summoner_item in res["data"]["player_list"]:
    if "tier_title" not in summoner_item:
        continue
    if "name" not in summoner_item:
        continue
    if "uuid" not in summoner_item:
        continue
    if "ranking" not in summoner_item:
        continue
    if "league_points" not in summoner_item:
        continue
    summoner_list.append({
        "area_id": area_id,
        "tier": summoner_item["tier_title"],
        "name": summoner_item["name"],
        "uuid": summoner_item["uuid"],
        "area": 1,
        "ranking": summoner_item["ranking"],
        "points": summoner_item["league_points"]
    })
insert_in_db(summoner_list)
return summoner_list
image.png

3.演示

数据过长,这里仅贴部分数据,有兴趣的可以自己跑一遍代码,验证一下效果。

image.png
image.png

更多源码信息,请参考原文

你可能感兴趣的:(python告诉你云顶之弈国服榜上有哪些大神)