Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

一、写在前面的话

C罗中国行将在深圳大运中心体育场进行两场友谊赛:利雅得胜利vs上海申花、利雅得胜利vs浙江。比赛门票的预售仅2分钟售罄,足以显示C罗中国行的火爆程度。

Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

这里我打算写个爬虫程序,爬取C罗整个足球生涯的进球数据,以备之后对这位足球巨星做一个全面的数据可视化分析,以此见证足坛超巨的魅力。青春虽会流逝,传奇永不谢幕。

二、目标网站

https://understat.com/player/2371

梅西的id为2097,内马尔的id为2099,姆巴佩id为3423,如果需要爬取其他球星的数据,只需要换掉后面的数字(id)即可。

三、网站分析

网页打开,发现并不能正常显示,那是因为这是外国网站,有的文件加载不进来导致的。

Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

但是这影响不大,因为球星的数据已经加载了。这些数据并不是Ajax异步加载进来的json数据,而是直接嵌套在Html文档的JavaScript脚本代码。

Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

通过查看Html源代码,可以看到球星数据分散在4个JavaScript标签中。只需要将这些JavaScript代码解析出来,并且按JavaScript语法来执行,执行后得到的变量player_info、groupsData、minMaxPlayerStats、positionsList、shotsData、matchesData就是我们想要爬取的数据。

四、完整源码

#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
#
# Copyright (c) 2024 愤怒的it, All Rights Reserved.
# FileName : code.py
# Date : 2024.01.15
# Author : 愤怒的it
# Version : 1.0.0
# Node : 欢迎关注微信公众号【愤怒的it男】
#
#""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

import requests
from lxml import etree
import js2py
import json
import os

def getData(baseUrl, headers):
    response = requests.get(url=baseUrl, headers=headers)
    html = etree.HTML(response.text)
    data = html.xpath("//div[@class='page-wrapper']//script/text()")
    return data

def parseData(data):
    js_obj=js2py.EvalJs()
    
    js_obj.execute(data[0])
    groupsData = js_obj.groupsData.to_dict()
    
    js_obj.execute(data[1])
    minMaxPlayerStats = js_obj.minMaxPlayerStats.to_dict()
    positionsList = js_obj.positionsList.to_dict()
    
    js_obj.execute(data[2])
    shotsData = js_obj.shotsData.to_dict()
    player_info = js_obj.player_info.to_dict()
    
    js_obj.execute(data[3])
    matchesData = js_obj.matchesData.to_dict()
    
    data = {
        'player_info': player_info,
        'groupsData': groupsData,
        'minMaxPlayerStats': minMaxPlayerStats,
        'positionsList': positionsList,
        'shotsData': shotsData,
        'matchesData': matchesData,
    }
    
    return data

def saveData(data):
    file = '{}\output\{}.json'.format(os.path.dirname(os.path.abspath(__file__)), data['player_info']['name'])
    json.dump(data, open(file,'w'))

def main():
    baseUrl = 'https://understat.com/player/2099'
    headers = {'User-Agent''Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
    data = getData(baseUrl, headers)
    data = parseData(data)
    saveData(data)
    print(data)
    
if __name__== "__main__" :
    main()

五、爬取结果

Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

六、免责声明

本公众号所有源码均为个人学习所编写,仅可用于计算机技术学习及研究等合法行为,禁止利用本公众号的源码从事任何违反本国(地区)法律法规的业务,如有发现存在违法违规行为我会举报到网监部门。

原文始发于微信公众号(愤怒的it男):Python获取C罗五大联赛数据(射门位置、射门结果、进球数量、预测进球等)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/234447.html

(0)
葫芦侠五楼的头像葫芦侠五楼

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!