社区所有版块导航
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 分析各国足球俱乐部排名

Python中文社区 • 5 年前 • 620 次点击  

作为一名足球迷,在年终盘点中,怎么能少了足球呢。如果你是关注欧洲足球的球迷(没办法,人家欧洲是足球的世界的中心),那么你一定知道,2019年是属于利物浦的一年,不多说,红军的首个英超冠军已经遥遥在望了,fighting!

数据获取

我们还是先来看看如何拿到我们需要的数据呢,我们这里选择的是一个国外的统计网站,可以查看历年的足球俱乐部得分和排名

https://footballdatabase.com/ranking/world/1

获取俱乐部信息

首先我们需要拿到俱乐部相关的信息,这里选取前200名俱乐部,使用 BeautifulSoup 解析网页即可

    for name in name_list:
        rank_list = []
        try:
            rank_point = name.find_all('td', attrs={'class''rank'})
            rank = rank_point[0].text
            point = rank_point[1].text
            club_info = name.find('td', attrs={'class''club text-left'}).find_all('a')
            club_url = club_info[0]['href']
            club_name = club_info[0].find('div', attrs={'class''limittext'}).text
            club_country_url = club_info[1]['href']
            club_country_name = club_info[1].text
            rank_list.append([rank, club_name, club_country_name, club_url, club_country_url, point])
            list_rank.append(rank_list)
            save_club_name(rank_list)

        except:
            pass

拿到各个俱乐部的信息后,就可以遍历该列表,获取俱乐部历年的得分和排名数据

获取俱乐部历史数据

俱乐部的历史数据也是保存在网页的 Javascript 变量中的,对于如何获取这种数据,我们在前面的文章中也都有介绍,这里就不过多赘述了

his_rank_list = []
    for data in data_list:
        print(data)
        url = data[0][3]
        his_res = requests.get(base_url + url)
        his_content = BeautifulSoup(his_res.text, "html.parser")
        js = his_content.find_all('script')[1].string
        src_text = js2xml.parse(js)
        src_tree = js2xml.pretty_print(src_text)
        data_tree = BeautifulSoup(src_tree, 'html.parser')
        array_list = data_tree.find_all('array')
        club_name = data[0][1]
        for array in array_list[2:-2]:
            his_rank_list = []
            array_date = array.find('string').text
            date = array_date
            try:
                month = month_map[array_date.split(' ')[0]]
                year = array_date.split(' ')[1]
                date = str(year) + '-' + str(month)
            except:
                pass
            array_data = array.find_all('number')
            try:
                point = array_data[0]['value']
                rank = array_data[1]['value']
                his_rank_list.append([rank, point, date])
                save_his_data(club_name, his_rank_list)
            except:
                raise

这样我们就可以得到两个文件,分别是 club_data.csv 和 rank_his_data.csv

俱乐部排行

我们这里整理的当前世界俱乐部前20的排名,可以看到利物浦以2120分高居榜首,曼城则紧随其后,看来世界第一联赛还是很给力的!

接下来就是西超的巴塞和德甲霸主拜仁,在意甲实现了八连冠的老夫人以及无敌于法甲的大巴黎。

欧洲五大联赛,名不虚传

怎么样,快来看看有没有你熟悉的队徽上榜呢!

国家分布

下面我们再来看看哪些国家的俱乐部最多呢,首先是前20名的国家分布

可以看到,英格兰和西班牙的俱乐部最多,都有4家上榜,而次之的是意大利以及德国,都是3家,这四个国家就占去了大半。而唯一一家非欧洲的俱乐部则位于巴西,足球王国也是要面子的哇!

我们再把榜单扩大到所有的抓取数据,即前200名的俱乐部数据

西班牙的俱乐部最多,达到了20家,其次是英格兰也有17家之多。这些年西甲英超的球队垄断欧冠冠军,还是有其深厚的足球底蕴作为依托的!

而欧洲传统足球强国西班牙、英格兰、德国、法国以及意大利再加上南美双珠阿根廷和巴西,这七大豪强的俱乐部基本占据了榜单的半壁江山,足球的格局,从来如此!

当然中超也有两家上榜俱乐部,分别是133名的上海上港和166名的广州恒大,任重而道远呐!

top7 排名走势

这七家俱乐部既有欧陆的传统豪门,也有金元新秀,都是当今俱乐部中的顶级强队。

我们可以看出,对于“皇萨仁”来说,它们的成绩都是极其稳定的,常年处于极高的竞技水平上。而当红的利物浦则在本世纪初的前十年遭遇到了低谷,一路前行,着实不易。

再有就是金元足球的代表大巴黎和蓝月亮,其中大巴黎尤为明显,从2011年开始,得益于卡塔尔财团的进入,其排名开始急速攀升,在世界范围内的影响力也大幅提高,战绩更是不断突破,常年垄断法甲冠军,不过对于欧冠赛场,巴黎还有很长的路要走。

而对于老牌劲旅尤文图斯,相信大家都会想起著名的“电话门”事件,此事件之后,不仅尤文图斯跌落低谷,就连意大利足球,曾经的亚平宁联赛的风采,都一去不复返了。不过从2011年开始,尤文走在了复兴的路上,也扛起了意大利足球的大旗!

各大洲排名

我们从上面的排名不难看出,所谓的世界排名,其实大多是欧洲俱乐部,那么其他大洲的俱乐部呢,我们一起来看下。

亚洲

非洲

南美洲

最后还是来看看近十年世界足球俱乐部排行的变化情况

▼ 点击成为社区注册会员      喜欢文章,点个在看

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54589
 
620 次点击