引言
这几天东京奥运会搞出了许多大新闻啊
这不, 东京直接变成《义勇军进行曲》速成班
所以, 让我们来写一个爬虫爬取奥运金牌榜, 看看祖国母亲到底有多牛逼!
代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| import os import time import codecs import requests import prettytable as pt
url = 'https://api.cntv.cn/olympic/getOlyMedals' params = { 'serviceId': 'pcocean', 'itemcode': 'GEN-------------------------------', }
json = requests.get(url, params=params).json()
result = json['data']['medalsList']
tb = pt.PrettyTable() tb.field_names = ["排名", "国家或地区", "金牌数", "银牌数", "铜牌数", "总获奖数"]
for r in result: tb.add_row([r['rank'], r['countryname'].ljust(10), r['gold'], r['silver'], r['bronze'], r['count']])
print(tb)
filePath = 'medal.txt' f = codecs.open(filePath, 'a', encoding='utf-8') f.write(str(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) + os.linesep + os.linesep + str(tb) + os.linesep)
print(os.linesep + "done!" + os.linesep)
|
代码说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| os - 操作系统库 - 此处用于获取系统的换行符 time - 时间库 - 此处用于添加写入到文件的时间标记 codecs - 编码库 - 此处用于以 utf8 编码格式写入文本文件 requests - 请求库 - 此处用于获取网络请求来获取信息 prettytable - 制表库 - 用于绘制表格
金牌榜的网络信息 参数 - - -
获取 json 格式信息
获取返回结果
创建 表格 表格列名设定
循环所有结果 添加行到表格 -
打印表格
文件路径 追加模式打开文件 将表格写入文件
打印完成信息
|
效果
截至 8 月 5 日,
爬取到的数据效果是这样的:
当然, 由于字体原因, 表格看上去的不是那么齐, 将就啦!
数据效果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| +------+------------------+--------+--------+--------+----------+ | 排名 | 国家或地区 | 金牌数 | 银牌数 | 铜牌数 | 总获奖数 | +------+------------------+--------+--------+--------+----------+ | 1 | 中国 | 32 | 22 | 16 | 70 | | 2 | 美国 | 25 | 31 | 23 | 79 | | 3 | 日本 | 21 | 7 | 12 | 40 | | 4 | 英国 | 15 | 18 | 15 | 48 | | 5 | 澳大利亚 | 15 | 4 | 17 | 36 | | 6 | 俄罗斯奥运队 | 14 | 21 | 18 | 53 | | 7 | 德国 | 8 | 8 | 16 | 32 | | 8 | 法国 | 6 | 10 | 9 | 25 | | 9 | 意大利 | 6 | 9 | 15 | 30 | | 10 | 荷兰 | 6 | 8 | 9 | 23 | | 11 | 韩国 | 6 | 4 | 9 | 19 | | 12 | 新西兰 | 6 | 4 | 5 | 15 | | 13 | 古巴 | 5 | 3 | 4 | 12 | | 14 | 匈牙利 | 4 | 5 | 3 | 12 | | 15 | 加拿大 | 4 | 4 | 7 | 15 | | 16 | 巴西 | 4 | 3 | 8 | 15 | | 17 | 捷克 | 4 | 3 | 1 | 8 | | 18 | 瑞士 | 3 | 4 | 5 | 12 | | 19 | 波兰 | 3 | 3 | 4 | 10 | | 20 | 克罗地亚 | 3 | 3 | 2 | 8 | | 21 | 瑞典 | 2 | 5 | 0 | 7 | | 22 | 中国台北 | 2 | 4 | 5 | 11 | | 23 | 格鲁吉亚 | 2 | 4 | 1 | 7 | | 24 | 丹麦 | 2 | 2 | 3 | 7 | | 25 | 挪威 | 2 | 2 | 1 | 5 | | 26 | 牙买加 | 2 | 1 | 2 | 5 | | 27 | 伊朗 | 2 | 1 | 1 | 4 | | 27 | 斯洛文尼亚 | 2 | 1 | 1 | 4 | | 29 | 厄瓜多尔 | 2 | 1 | 0 | 3 | | 30 | 乌兹别克斯坦 | 2 | 0 | 1 | 3 | | 30 | 希腊 | 2 | 0 | 1 | 3 | | 32 | 科索沃 | 2 | 0 | 0 | 2 | | 32 | 卡塔尔 | 2 | 0 | 0 | 2 | | 34 | 西班牙 | 1 | 4 | 5 | 10 | | 35 | 罗马尼亚 | 1 | 3 | 0 | 4 | | 35 | 委内瑞拉 | 1 | 3 | 0 | 4 | | 37 | 乌克兰 | 1 | 2 | 8 | 11 | | 38 | 肯尼亚 | 1 | 2 | 2 | 5 | | 39 | 中国香港 | 1 | 2 | 0 | 3 | | 39 | 南非 | 1 | 2 | 0 | 3 | | 39 | 斯洛伐克 | 1 | 2 | 0 | 3 | | 42 | 塞尔维亚 | 1 | 1 | 4 | 6 | | 43 | 印度尼西亚 | 1 | 1 | 3 | 5 | | 43 | 奥地利 | 1 | 1 | 3 | 5 | | 45 | 比利时 | 1 | 1 | 1 | 3 | | 45 | 埃塞俄比亚 | 1 | 1 | 1 | 3 | | 45 | 乌干达 | 1 | 1 | 1 | 3 | | 48 | 突尼斯 | 1 | 1 | 0 | 2 | | 48 | 菲律宾 | 1 | 1 | 0 | 2 | | 50 | 土耳其 | 1 | 0 | 5 | 6 | | 51 | 以色列 | 1 | 0 | 2 | 3 | | 51 | 爱尔兰 | 1 | 0 | 2 | 3 | | 53 | 爱沙尼亚 | 1 | 0 | 1 | 2 | | 53 | 斐济 | 1 | 0 | 1 | 2 | | 53 | 拉脱维亚 | 1 | 0 | 1 | 2 | | 53 | 白俄罗斯 | 1 | 0 | 1 | 2 | | 57 | 泰国 | 1 | 0 | 0 | 1 | | 57 | 百慕大 | 1 | 0 | 0 | 1 | | 57 | 波多黎各 | 1 | 0 | 0 | 1 | | 57 | 摩洛哥 | 1 | 0 | 0 | 1 | | 61 | 哥伦比亚 | 0 | 2 | 1 | 3 | | 61 | 多米尼加 | 0 | 2 | 1 | 3 | | 61 | 亚美尼亚 | 0 | 2 | 1 | 3 | | 61 | 吉尔吉斯斯坦 | 0 | 2 | 1 | 3 | | 65 | 印度 | 0 | 1 | 2 | 3 | | 65 | 蒙古 | 0 | 1 | 2 | 3 | | 65 | 葡萄牙 | 0 | 1 | 2 | 3 | | 68 | 保加利亚 | 0 | 1 | 1 | 2 | | 68 | 圣马力诺 | 0 | 1 | 1 | 2 | | 68 | 尼日利亚 | 0 | 1 | 1 | 2 | | 71 | 约旦 | 0 | 1 | 0 | 1 | | 71 | 土库曼斯坦 | 0 | 1 | 0 | 1 | | 71 | 北马其顿 | 0 | 1 | 0 | 1 | | 71 | 纳米比亚 | 0 | 1 | 0 | 1 | | 75 | 哈萨克斯坦 | 0 | 0 | 4 | 4 | | 76 | 墨西哥 | 0 | 0 | 3 | 3 | | 76 | 埃及 | 0 | 0 | 3 | 3 | | 76 | 阿塞拜疆 | 0 | 0 | 3 | 3 | | 79 | 科威特 | 0 | 0 | 1 | 1 | | 79 | 科特迪瓦 | 0 | 0 | 1 | 1 | | 79 | 阿根廷 | 0 | 0 | 1 | 1 | | 79 | 芬兰 | 0 | 0 | 1 | 1 | | 79 | 马来西亚 | 0 | 0 | 1 | 1 | | 79 | 加纳 | 0 | 0 | 1 | 1 | | 79 | 叙利亚 | 0 | 0 | 1 | 1 | +------+------------------+--------+--------+--------+----------+
|