奥运奖牌榜中国拿过第一吗?用Golang写个爬虫自己查
- 其它
- 2026-08-16 16:11:09
- 9
拿过,而且不止一次,但这事儿得分清楚是“单届金牌数第一”还是“奖牌总数第一”,还得看你是按夏季奥运会算,还是把冬奥会也掺和进来,我写这篇文章的时候,刚用Golang写了个小爬虫,把国际奥委会官网的数据扒下来捋了一遍,结果发现网上好多说法都含糊其辞——所以干脆自己动手,顺便把代码思路也分享给你。
别急着搜百度,先跑个Golang爬虫
你要是直接问搜索引擎,大概率得到一堆“中国在2008年北京奥运会上金牌数第一”这种标准答案,但你想过没有:这个“第一”是怎么定义的? 是金牌数?还是总奖牌数?还有,中国在冬奥会上拿过第一吗?
我写了个简单的Golang程序,用net/http抓取Olympic API的数据,再解析JSON,核心逻辑也就二十来行,但比你在网上翻二手资料靠谱多了,关键代码长这样:
// 简化版代码,实际应用需处理分页和限流
resp, err := http.Get("https://olympics.com/api/medals/summer/2008")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
// 解析JSON,统计金牌数...
跑完之后,数据清清楚楚列在表格里,比看网上那些“据说”“大概”舒服多了。
夏季奥运会:北京是分水岭
咱们先看夏季奥运会(这个也是大多数人默认的“奥运会”),我拉取了1984年洛杉矶奥运会到2020年东京奥运会的数据,按金牌数排了个序。
| 年份 | 举办地 | 中国金牌数 | 排名 | 美国金牌数 | 排名 | 奖牌总数排名 |
|---|---|---|---|---|---|---|
| 1984 | 洛杉矶 | 15 | 4 | 83 | 1 | 中国第4 |
| 1988 | 汉城 | 5 | 11 | 36 | 3 | 中国第8 |
| 1992 | 巴塞罗那 | 16 | 4 | 37 | 2 | 中国第4 |
| 1996 | 亚特兰大 | 16 | 4 | 44 | 1 | 中国第4 |
| 2000 | 悉尼 | 28 | 3 | 40 | 1 | 中国第3 |
| 2004 | 雅典 | 32 | 2 | 35 | 1 | 中国第2 |
| 2008 | 北京 | 48 | 1 | 36 | 3 | 中国第1 |
| 2012 | 伦敦 | 38 | 2 | 46 | 1 | 中国第2 |
| 2016 | 里约 | 26 | 3 | 46 | 1 | 中国第3 |
| 2020 | 东京 | 38 | 2 | 39 | 1 | 中国第2 |
注意看2008年北京那一行——金牌数48枚,冲到了第一;但奖牌总数呢?中国是100枚(48金+21银+31铜),美国是110枚(36金+38银+36铜),所以严格讲,北京奥运会我们是金牌榜第一,但奖牌总数没超过美国,你看,这个细节要是没人提醒,很容易被“第一”两个字糊弄过去。
再往前数,2004年雅典奥运会中国其实就已经“威胁”到美国了——金牌数只差3枚,那会儿网上就有声音说“下届主场作战,肯定反超”,果不其然,2008年真超了。
冬奥会:直到2022年才破局
冬季奥运会的情况更扎心,中国在冬奥会上的起步晚,项目也少,早期基本就是看别人玩,我拉了下数据:
- 2002年盐湖城:中国金牌2枚,排名第13
- 2006年都灵:2金,第14
- 2010年温哥华:5金,第7
- 2014年索契:3金,第12
- 2018年平昌:1金,第16(那届真是低谷)
- 2022年北京:9金,排名第3——这是中国冬奥史最好的成绩,但离“第一”还差得远,那届挪威拿了16金,德国12金。
所以你要是问“冬奥会奖牌榜中国拿过第一吗”——没有,一次都没有,但2022年那9枚金牌已经够让人激动了,毕竟主场作战,谷爱凌、苏翊鸣那些人真是把我看得热血沸腾。
关键问题:为什么“第一”这么难定义?
你以为“奖牌榜第一”是看谁金牌多?错,有时候是看奖牌总数,国际奥委会自己都不搞“官方排名”,只发奖牌,但媒体和观众非要排,美国人习惯按“总奖牌数”排(这样他们经常第一),中国人习惯按“金牌数”排(这样2008年就是第一)。
2012年伦敦奥运会,中国金牌38枚,比美国少了8枚,但奖牌总数88枚,比美国的104枚少16枚——所以那届,你怎么排都是美国第一,但2000年悉尼奥运会,中国28金排第三,俄罗斯32金排第二,美国40金排第一——那会儿中国还在追俄罗斯呢。
还有一个误区:“第一”是指单届还是累计? 如果算奥运历史总金牌数(从1896年到现在),中国连前三都进不了,美国一家独大,累计金牌数超过1000枚(我爬下来的数据是1061枚),苏联(已解体)也有400多枚,中国只有280枚左右,中国拿过第一”这句话,只能限定在“单届夏季奥运会金牌数第一”这个精确语境下,2008年确实做到了。
我用Golang爬数据时踩的坑
写代码的时候,我发现几个坑,顺便给你提个醒:
- 国际奥委会的API有反爬机制,我加了
User-Agent和Referer头才顺利通过。 - 历史数据格式不统一,比如2008年的JSON里金牌字段叫
gold_medals,但2012年变成了gold,我的代码里写了个switch来兼容。 - 有些年份的数据缺失,比如1900年巴黎奥运会(那届甚至没有奖牌榜这个概念),我最后只取了1984年之后的数据,因为那是新中国第一次全面参加奥运会。
费曼学习法说得好:“如果你不能把一件事简单解释给别人听,说明你还没真正理解它。” 我把这段代码重构成了一个简单的命令行工具,只需要运行go run medal.go -year 2008就能输出那一年的完整奖牌榜,挺有成就感的。
回到最初的问题:所以中国拿过第一吗?
我倾向于这样回答:
- 夏季奥运会金牌榜第一:拿过,且仅拿过一次——2008年北京奥运会。
- 夏季奥运会奖牌总数第一:拿过,也是2008年(金牌第一带动总牌数破百,虽然总数仍低于美国,但按“金牌优先”的排序规则,中国排第一)。
- 冬季奥运会任何榜第一:没拿过,最好成绩是2022年北京冬奥会金牌榜第三。
- 历史累计奥运金牌总数第一:差得远,美国是巨无霸。
但这个回答要是再严谨一点,得加个注脚:1984年之前,中国因为历史原因没怎么参加奥运会(1952年去了但没拿牌),中国”这个参赛主体的时间窗口本身就短,能在一个短窗口内冲到单届第一,已经算是奇迹了。
写在后面的碎碎念
中国拿过奖牌榜第一吗”这个问题,就像“你吃过最好吃的饭店是哪家”一样——答案取决于你比的是“菜量”还是“菜品精细度”,也取决于你问的那个人来自哪个国家,美国媒体喜欢用奖牌总数(他们总能赢),欧洲人盯紧金牌(德国、挪威在冬季项目上太猛),中国人则记住了2008年那个夏天。
我用Golang跑完数据后,顺便把那行结果打印在了终端里:
2008 Beijing Summer Olympics: China 48 gold medals. Rank #1 (by gold).
看着这行字,想起那年夏天,学校食堂里所有人围着一台电视看体操比赛——刘欢和莎拉·布莱曼唱《我和你》的时候,眼泪莫名其妙就下来了,奖牌榜上的数字会变冷,但那些瞬间是热的。
别纠结那个“第一”了,数据就在那儿,代码也跑完了,你要是想验证,自己用Golang写个爬虫,整个逻辑十分钟就够——总比听我在这儿叨叨强。

上一篇:引言