场景介绍
- 数据截止于2021-07-31
- 使用urllib库爬取东京奥运会奖牌榜
- 使用pandas库快速导入、处理网页中的表格
- 查看奖牌榜网址(url=‘https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/medal-standings.htm’)
实例环境及工具
- Python开发环境、Jupyter notebook编辑器
- urllibs是python自带的库
- pandas库需要自行安装
pip install pandas
爬取奖牌榜
-
导入相关库
import pandas as ps from urllib import request
-
获取网页页面
url = 'https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/medal-standings.htm' page1 = request.urlopen(url)
-
读取网页数据
html = page1.read() print(html)
-
读取表格数据
df = pd.read_html(html)[0] # 转换成Pandas数据 df1 = df[:10] # 仅查看排名前十 df1
-
转换嵌套字典
df1.T.to_dict().values() # 转换成嵌套字典的格式
代码汇总
import pandas as pd
from urllib import request
url = 'https://olympics.com/tokyo-2020/olympic-games/zh/results/all-sports/medal-standings.htm'
page = request.urlopen(url).read() # 获取网页
df = pd.read_html(page)[0] # 转换成Pandas数据
df1 = df[:3] # 仅查看排名前三
list(df1.T.to_dict().values()) # 转换成列表嵌套字典的格式
[{'排名': 1,
'国家奥委会': '中国',
'Unnamed: 2': 22,
'Unnamed: 3': 13,
'Unnamed: 4': 12,
'总分': 47,
'按总数排名': 2,
'国家奥委会代码': 'CHN'},
{'排名': 2,
'国家奥委会': '美国',
'Unnamed: 2': 19,
'Unnamed: 3': 20,
'Unnamed: 4': 13,
'总分': 52,
'按总数排名': 1,
'国家奥委会代码': 'USA'},
{'排名': 3,
'国家奥委会': '日本',
'Unnamed: 2': 17,
'Unnamed: 3': 5,
'Unnamed: 4': 8,
'总分': 30,
'按总数排名': 5,
'国家奥委会代码': 'JPN'}]