1、项目背景
奥运会刚刚过去,你是否已经看过2020东京奥运会呢?本文将手把手带你爬取奥运会相关信息,并利用可视化大屏为你展示奥运详情。让一个没关注过奥运会的朋友,也能够秒懂奥运会。
学完本文后,你将学会如下可视化大屏的制作。
2、奥运会相关信息爬取
爬取字段: 国家、国家ID、排名、金牌数、银牌数、铜牌数、奖牌总数、项目名、运动员、获奖类型、获奖时间;
爬取说明: 基于两个接口的数据爬取【json格式的数据】,直接采用键值对的方式获取相关数据;
使用工具: Pandas+requests
本文是基于两个接口的数据爬取,相对容易的多。
# 这个链接主要展示:各国的金银铜牌及其总数! https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609 # 这个链接主要展示:每个参赛队员的参赛项目和获得的奖牌情况! https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609
① 导入相关库
import requests import pandas as pd from pprint import pprint
requests库用于发起网页请求,获取网页中的源代码;
pandas库用于存储和读取获取到的信息;
pprint库是漂亮的打印,对于json格式的数据,能够很好的展示结构,方便我们解析;
② 爬虫讲解
url = 'https://app-sc.miguvideo.com/vms-livedata/olympic-medal/total-table/15/110000004609' data = requests.get(url).json() pprint(data)
三行代码就可以获取到网页的源代码,利用pprint库,可以清晰的展示json结构,对于我们解析数据很有帮助。
从图中可以很清晰地看到,我们要的数据,都存在于body键下面的allMedalData键中,allMedalData键的值是一个列表,里面有很多字典组成的键值对信息,就是我们要爬取的数据。
直接利用键获取对应的值信息,代码如下:
df1 = pd.DataFrame() for info in data1['body']['allMedalData']: name = info['countryName'] name_id = info['countryId'] rank = info['rank'] gold = info['goldMedalNum'] silver = info['silverMedalNum'] bronze = info['bronzeMedalNum'] total = info['totalMedalNum'] # 组织数据 orangized_data = [[name,name_id,rank,gold,silver,bronze,total]] # 然后追加df df1 = df1.append(orangized_data) df1.columns = ['名称', 'ID', '排名', '金牌', '银牌', '铜牌', '奖牌总数'] df1
结果如下:
对于另外一个网页,我们采取同样的方式。
url = 'https://app-sc.miguvideo.com/vms-livedata/olympic-medal/detail-total/15/110000004609' data2 = requests.get(url).json() pprint(data2)