中国金牌竟来源于这些!

背景

说明

信息分析

代码实现

总结


背景

        最近中国奥运健儿在小日子过得不错的日本东京频频传来捷报,大大地振奋了国人的士气,截止写稿时间,中国已获取38枚金牌,排名第一,于是我饶有兴趣的想知道中国奖牌数是来源于哪些项目和运动健儿获得的,然后就有了今天这篇文章。

 说明

        本次奥运奖牌排行榜数据来源于奥林匹克官网,如图所示,该网页说明了各国家的金、银、铜的奖牌分布情况,而且鼠标放置奖牌数量时可跳转到具体的奖牌情况。

                                                                      国家奖牌分布情况

         例如点击中国金牌数量,就可以跳转到金牌的具体数据,包括获奖项目、场次、获奖运动员姓名。这次要做的就是获取中国金、银、铜牌的具体数据(获奖牌人员、项目、场次),然后保存到本地的Excel表格中,效果如下:

                                                                     奖牌分布情况

                                                                    数据效果

信息分析

        首先我们选择点击中国金牌将数,进入中国金牌数具体界面,然后打开谷歌开发者工具进行网页源代码分析,通过分析可得我们需要的数据全部是在网页源代码中的,而且每一个项目的获奖信息都在tr节点下,而tr节点下的td分别包含获奖人,获奖项目、获奖场次。

        而这些信息的获取我们可以通过xapth语法进行获取,信息获取到之后,使用Pandas进行excel表格形式的数据存储。

        金牌获奖情况分析结束后,我们再去分析银牌,铜牌的情况,这里分析之后发现金、银、铜牌获取数据的方法是一样的,只是url链接不同。这样的话全部分析结束,后面要做的就是把获取的金、银、铜牌数据放在同一个excel表格中的3个sheet页中。

代码实现

#-*-coding:utf-8 -*-

import requests
from lxml import etree
import  pandas as pd
import xlwt
import os

headers = {
 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
}

#获取数据信息及保存数据
def save_excel(url):
    sheet_name = url.split('-')[-2]  #excel表格sheet名称
    response = requests.get(url,headers = headers)
    #解析成etree.HTML对象
    html = etree.HTML(response.text)
    data = []
    tr_list = html.xpath('//div[@id="Medallist_by_sport_null"]//tbody/tr')  #获取tr节点,返回的是list
    for tr in tr_list:
        dict1 = {}   #存储运动员、项目、场次
        athlete = tr.xpath('./td/div//a/@title')[0].split('-')[-1] #运动员名称
        if athlete == 'China':
            athlete = 'China Team'
       #print(athlete)

        project = tr.xpath('./td[2]/a/@title')[0].split('-')[-1] #获奖赛事项目
        session = tr.xpath('./td[3]/text()')[0].split('r')[-1]   #获奖的具体项目场次
        #print((athlete,project,session))
        dict1['athlete'] = athlete
        dict1['project'] = project
        dict1['session'] = session
        #print(dict1)
        data.append(dict1)
     #存在指定的sheet表中
    df1 = pd.DataFrame.from_dict(data)
    with pd.ExcelWriter('test.xlsx',mode='a', engine='openpyxl') as writer:  #a代表追加模式
    df1.to_excel(writer, sheet_name=sheet_name)   #写入不同的sheet表中

#定义main函数
def main(url):
    save_excel(url)

if __name__ == '__main__':
    url_list =[]
        for url in url_list:
        main(url)

   代码完成之后,我们新建一个excel表格,然后运行代码,就可以获取的中国奖牌的数据情况。

总结

        通过上述方法我们获取了数据并可以对数据进行进一步分析,其中举重、跳水金牌数最多,然后就是乒乓、游泳、射击等项目,最后再祝愿我中国奥运健儿再创佳绩,多拿金牌,同时身体健康、远离新冠!

猜你喜欢

转载自blog.csdn.net/sl01224318/article/details/119492643