页面分析

寻找Ajax接口

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pq6LqtuY-1630031342051)(http://markdowntc.wanqqq29.cn//image-20210807144005795.png)]

接口地址:https://api.cntv.cn/olympic/getOlyMedals?serviceId=pcocean&itemcode=GEN-------------------------------&t=jsonp&cb=omedals1

尝试请求接口,看是否能直接获取到数据

获取数据

伪造请求

url="https://api.cntv.cn/olympic/getOlyMedals?serviceId=pcocean&itemcode=GEN-------------------------------&t=jsonp&cb=omedals1"
data = requests.get(url=url).text
print(data)

数据清洗

将获取到的数据转化为JSON格式

将直接获取到的数据用json.loads函数报错,把数据放到JSON校验中查看并在代码中用正则处理

分析得出:数据多了omedals1,用正则处理掉

data = re.sub("omedals1\(",'',data)
data = re.sub("\);",'',data)

将处理后的数据转为JSON格式

jData = json.loads(data)

可以看到,现在输出的数据为字典与列表的结合,说明转码成功

将数据定位到奖牌

MedalList = jData['data']['medalsList']

分类

 rank = i['rank']countryname = i['countryname']gold = i['gold']silver = i['silver']bronze = i['bronze']count = i['count']

开始拼接字符串

    ItemText = '排名:'+ rank + '\t' + countryname + '\t金牌:' + gold + '\t银牌:' + silver + '\t铜牌' + bronze + '\t总数:' + count + '\n'String += ItemText

保存

with open('奖牌榜.csv', 'a', encoding="utf-8", newline='') as f:header = ['排名', '国家', '金牌', '银牌', '铜牌', '总数']f_csv = csv.writer(f)f_csv.writerow(header)with open('奖牌榜.csv', 'a', encoding="utf-8", newline='') as f:f_csv = csv.writer(f)f_csv.writerow(Csvitem)

输出

2020东京奥运会金牌榜
排名:1 中国  金牌:38    银牌:29    铜牌17    总数:84
排名:2 美国  金牌:33    银牌:36    铜牌32    总数:101
排名:3 日本  金牌:24    银牌:12    铜牌16    总数:52
排名:4 英国  金牌:19    银牌:20    铜牌21    总数:60
排名:5 俄罗斯奥运队  金牌:17    银牌:24    铜牌22    总数:63
排名:6 澳大利亚    金牌:17    银牌:6 铜牌21    总数:44
排名:7 德国  金牌:10    银牌:11    铜牌16    总数:37
排名:8 意大利 金牌:10    银牌:10    铜牌18    总数:38
排名:9 荷兰  金牌:9 银牌:10    铜牌12    总数:31
排名:10    法国  金牌:7 银牌:12    铜牌9 总数:28
排名:11    新西兰 金牌:7 银牌:6 铜牌7 总数:20
排名:12    匈牙利 金牌:6 银牌:7 铜牌6 总数:19
排名:13    加拿大 金牌:6 银牌:6 铜牌11    总数:23
排名:14    韩国  金牌:6 银牌:4 铜牌9 总数:19
排名:15    巴西  金牌:6 银牌:4 铜牌8 总数:18
排名:16    古巴  金牌:6 银牌:3 铜牌4 总数:13
排名:17    波兰  金牌:4 银牌:4 铜牌5 总数:13
排名:18    捷克  金牌:4 银牌:3 铜牌2 总数:9
排名:19    牙买加 金牌:4 银牌:1 铜牌3 总数:8
排名:20    西班牙 金牌:3 银牌:6 铜牌5 总数:14
排名:21    瑞士  金牌:3 银牌:4 铜牌6 总数:13
排名:22    克罗地亚    金牌:3 银牌:3 铜牌2 总数:8
排名:22    肯尼亚 金牌:3 银牌:3 铜牌2 总数:8
排名:24    挪威  金牌:3 银牌:2 铜牌1 总数:6
排名:25    比利时 金牌:3 银牌:1 铜牌1 总数:5
排名:25    斯洛文尼亚   金牌:3 银牌:1 铜牌1 总数:5
排名:27    瑞典  金牌:2 银牌:6 铜牌0 总数:8
排名:28    格鲁吉亚    金牌:2 银牌:5 铜牌1 总数:8
排名:29    中国台北    金牌:2 银牌:4 铜牌6 总数:12
排名:30    丹麦  金牌:2 银牌:3 铜牌4 总数:9
排名:31    土耳其 金牌:2 银牌:2 铜牌8 总数:12
排名:32    伊朗  金牌:2 银牌:2 铜牌2 总数:6
排名:33    塞尔维亚    金牌:2 银牌:1 铜牌4 总数:7
排名:34    保加利亚    金牌:2 银牌:1 铜牌2 总数:5
排名:35    乌干达 金牌:2 银牌:1 铜牌1 总数:4
排名:36    厄瓜多尔    金牌:2 银牌:1 铜牌0 总数:3
排名:37    乌兹别克斯坦  金牌:2 银牌:0 铜牌2 总数:4
排名:38    希腊  金牌:2 银牌:0 铜牌1 总数:3
排名:38    卡塔尔 金牌:2 银牌:0 铜牌1 总数:3
排名:40    科索沃 金牌:2 银牌:0 铜牌0 总数:2
排名:40    巴哈马 金牌:2 银牌:0 铜牌0 总数:2
排名:42    乌克兰 金牌:1 银牌:5 铜牌10    总数:16
排名:43    白俄罗斯    金牌:1 银牌:3 铜牌2 总数:6
排名:44    罗马尼亚    金牌:1 银牌:3 铜牌0 总数:4
排名:44    委内瑞拉    金牌:1 银牌:3 铜牌0 总数:4
排名:46    中国香港    金牌:1 银牌:2 铜牌2 总数:5
排名:47    菲律宾 金牌:1 银牌:2 铜牌1 总数:4
排名:47    斯洛伐克    金牌:1 银牌:2 铜牌1 总数:4
排名:49    南非  金牌:1 银牌:2 铜牌0 总数:3
排名:50    奥地利 金牌:1 银牌:1 铜牌5 总数:7
排名:51    印度尼西亚   金牌:1 银牌:1 铜牌3 总数:5
排名:52    葡萄牙 金牌:1 银牌:1 铜牌2 总数:4
排名:53    埃塞俄比亚   金牌:1 银牌:1 铜牌1 总数:3
排名:54    突尼斯 金牌:1 银牌:1 铜牌0 总数:2
排名:55    以色列 金牌:1 银牌:0 铜牌2 总数:3
排名:55    爱尔兰 金牌:1 银牌:0 铜牌2 总数:3
排名:57    爱沙尼亚    金牌:1 银牌:0 铜牌1 总数:2
排名:57    泰国  金牌:1 银牌:0 铜牌1 总数:2
排名:57    斐济  金牌:1 银牌:0 铜牌1 总数:2
排名:57    拉脱维亚    金牌:1 银牌:0 铜牌1 总数:2
排名:61    百慕大 金牌:1 银牌:0 铜牌0 总数:1
排名:61    波多黎各    金牌:1 银牌:0 铜牌0 总数:1
排名:61    摩洛哥 金牌:1 银牌:0 铜牌0 总数:1
排名:64    哥伦比亚    金牌:0 银牌:4 铜牌1 总数:5
排名:65    多米尼加    金牌:0 银牌:3 铜牌2 总数:5
排名:66    印度  金牌:0 银牌:2 铜牌3 总数:5
排名:67    亚美尼亚    金牌:0 银牌:2 铜牌2 总数:4
排名:68    吉尔吉斯斯坦  金牌:0 银牌:2 铜牌1 总数:3
排名:69    蒙古  金牌:0 银牌:1 铜牌3 总数:4
排名:69    阿塞拜疆    金牌:0 银牌:1 铜牌3 总数:4
排名:71    阿根廷 金牌:0 银牌:1 铜牌2 总数:3
排名:71    圣马力诺    金牌:0 银牌:1 铜牌2 总数:3
排名:73    约旦  金牌:0 银牌:1 铜牌1 总数:2
排名:73    尼日利亚    金牌:0 银牌:1 铜牌1 总数:2
排名:75    土库曼斯坦   金牌:0 银牌:1 铜牌0 总数:1
排名:75    北马其顿    金牌:0 银牌:1 铜牌0 总数:1
排名:75    纳米比亚    金牌:0 银牌:1 铜牌0 总数:1
排名:75    立陶宛 金牌:0 银牌:1 铜牌0 总数:1
排名:79    哈萨克斯坦   金牌:0 银牌:0 铜牌7 总数:7
排名:80    墨西哥 金牌:0 银牌:0 铜牌4 总数:4
排名:80    埃及  金牌:0 银牌:0 铜牌4 总数:4
排名:82    芬兰  金牌:0 银牌:0 铜牌2 总数:2
排名:83    科威特 金牌:0 银牌:0 铜牌1 总数:1
排名:83    科特迪瓦    金牌:0 银牌:0 铜牌1 总数:1
排名:83    马来西亚    金牌:0 银牌:0 铜牌1 总数:1
排名:83    加纳  金牌:0 银牌:0 铜牌1 总数:1
排名:83    叙利亚 金牌:0 银牌:0 铜牌1 总数:1
排名:83    布基纳法索   金牌:0 银牌:0 铜牌1 总数:1
排名:83    格林纳达    金牌:0 银牌:0 铜牌1 总数:1
排名:83    摩尔多瓦    金牌:0 银牌:0 铜牌1 总数:1进程已结束,退出代码为 0

可视化

数据处理

声明x轴y轴的数据

 tGold = []tSilver = []tBronze = []tCountryName = []for i in Medallist:tGold.append(i['gold'])tSilver.append(i['silver'])tBronze.append(i['bronze'])tCountryName.append(i['countryname'])

调用Pyecharts 生成条形图

c = (Bar(init_opts=opts.InitOpts(width='1440px',height='2000px')).add_yaxis("金牌", tGold, stack="stack1").add_yaxis("银牌", tSilver, stack="stack1").add_yaxis("铜牌", tBronze, stack="stack1").add_xaxis(tCountryName).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="2020东京奥运奖牌榜"),yaxis_opts=opts.AxisOpts(is_inverse=True)))c.render("MedalList.html")

全部代码

import requests,json,re,csv
from pyecharts import options as opts
from pyecharts.charts import Bardef spyder():url ="https://api.cntv.cn/olympic/getOlyMedals?serviceId=pcocean&itemcode=GEN-------------------------------&t=jsonp&cb=banomedals"data = requests.get(url=url).textdata = re.sub('omedals1\(','',data)data = re.sub('\);','',data)jData = json.loads(data)MedalsList = jData['data']['medalsList']String = '奥运奖牌榜\n'with open('奖牌榜.csv', 'a', encoding="utf-8", newline='') as f:header = ['排名', '国家', '金牌', '银牌', '铜牌', '总数']f_csv = csv.writer(f)f_csv.writerow(header)for i in MedalsList:rank = i['rank']count = i['count']gold = i['gold']silver = i['silver']bronze = i['bronze']countryname = i['countryname']Csvitem = []Csvitem.append(rank)Csvitem.append(countryname)Csvitem.append(count)Csvitem.append(gold)Csvitem.append(silver)Csvitem.append(bronze)String += '排名:'+ rank + '\t' + countryname + '\t金牌:' + gold + '\t银牌:' + silver + '\t铜牌' + bronze + '\t总数:' + count + '\n'#print(String)with open('奖牌榜.csv', 'a', encoding="utf-8", newline='') as f:f_csv = csv.writer(f)f_csv.writerow(Csvitem)return  MedalsList# 可视化def drow(medalslist):tGold = []tSilver = []tBronze = []tCountryName = []for i in medalslist:tGold.append(i['gold'])tSilver.append(i['silver'])tBronze.append(i['bronze'])tCountryName.append(i['countryname'])c = (Bar(init_opts=opts.InitOpts(width='1440px', height='2000px')).add_yaxis("金牌", tGold, stack="stack1").add_yaxis("银牌", tSilver, stack="stack1").add_yaxis("铜牌", tBronze, stack="stack1").add_xaxis(tCountryName).reversal_axis().set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="2020东京奥运奖牌榜"),yaxis_opts=opts.AxisOpts(is_inverse=True)))c.render("MedalList.html")print('ok')if __name__ == '__main__':drow(spyder())

is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title=“2020东京奥运奖牌榜”),
yaxis_opts=opts.AxisOpts(is_inverse=True)
)
)
c.render(“MedalList.html”)
print(‘ok’)

if name == ‘main’:
drow(spyder())

2020东京奥运会金牌榜爬虫相关推荐

  1. Pyecharts“可视化大屏“,带你重温 “2020东京奥运会“,不看直播尽知其事!

    本文禁止其他人转载,违者必究! 目录   1.项目背景   2.奥运会相关信息爬取    ① 导入相关库    ② 爬虫代码完整讲解   3.数据预处理    ① 数据替换    ② 数据分组     ...

  2. 爬虫+可视化 | 动态展示2020东京奥运会奖牌世界分布

    文章目录 前言 1. 导入模块 2. 数据爬取 3. 地图展示 3.1 2020东京奥运会奖牌数世界分布 3.2 2020东京奥运会金牌世界分布 3.3 2020东京奥运会金.银.铜世界分布

  3. 【2020东京奥运会】奥运榜单以及各国参赛运动员数据可视化~

    项目 本文中的代码是基于notebook写的,可以访问https://www.heywhale.com/mw/project/61015e73aca24600179ec778获取完整notebook. ...

  4. 宝洁聚焦“用爱指引”的2020东京奥运会参赛运动员,称颂他们的举动,并鼓励其他运动员采取积极行动

    奥运会金牌得主Nastia Liukin和奥运会银牌得主Gus Kenworthy与宝洁"运动员向善基金"补助款接受者以及在2020东京奥运会上继续"用爱指引" ...

  5. 宝洁和2020东京奥运会宣布领奖台项目 – 即将举行的奥运会和残奥会将首次使用利用回收塑料制作的领奖台

    辛辛那提--(美国商业资讯)--宝洁(Procter & Gamble, NYSE:PG)与2020东京奥运会组委会和国际奥委会(IOC)合作,于今日宣布在奥运会和残奥会历史上将首次全部使用回 ...

  6. 2020东京奥运会数据集echarts可视化分析

    1.数据集的下载 2021 Olympics in Tokyo | Kaggle 部分数据集的内容如下 2.金牌榜前10名 <!DOCTYPE html> <html> < ...

  7. 爬取2020东京奥运会的所有赛事的情况,并分类输出,使用Python实现

    在爬取2020年东京奥运会的赛事情况并分类输出时,你可以使用 Python 语言实现. 首先,你需要找到一个可以爬取这些信息的网站或数据源.你可以使用 Python 的第三方库 BeautifulSo ...

  8. 2020东京奥运会奖牌排行--数据可视化

    爬取数据1 1.数据来源:https://2020.cctv.com/medal_list/index.shtml 数据为下面图片的表格数据 2.具体代码 2.1需要提前下载好的pip install ...

  9. 数据爬虫及可视化——东京奥运会奖牌榜

    东京奥运会奖牌榜爬虫 通过手机浏览器实时查看奥运会奖牌信息 将手机浏览器访问的地址复制,通过计算机浏览器访问 打开谷歌浏览器的开发者工具,切换到network选项卡,刷新页面重新请求. 拖动滚动条,找 ...

最新文章

  1. Python3面向对象编程的三大特性 封装、继承、多态
  2. 5G时代下,AI赋能行业的思考
  3. 一致的数据访问技术ADO/OLE DB
  4. Oracle和Mysql获取uuid的方法对比
  5. 彻底弄懂css中单位px和em,rem的区别
  6. eclipse color theme 主题颜色
  7. slice_input_producer在2.0版本里怎么用_微信提醒对方账号异常应该怎么办
  8. 怎样基于谷歌地图的Server缓存公布Image Service服务
  9. 南方方洲号无人测量船系统简介
  10. [react] 什么时候使用状态管理器?
  11. CentOS7设置自定义开机启动,添加自定义系统服务
  12. 正态分布解释“剩女”现象——只因爱才子
  13. python3 三级菜单-基础版
  14. 电脑远程服务_上海苹果笔记本电脑维修寄修上门服务远程双系统组装机安重装更换主板键盘屏...
  15. 2020年30米二级分类北京市土地利用数据
  16. 读书札记:Fiddler--中文版(本人自己汉化的)下载
  17. 概念模型向逻辑模型的转换规则
  18. 58到家数据库30条军规解读 【转】
  19. Kubernetes集群高可用方案
  20. python使用turtle画五星红旗!

热门文章

  1. 用Python制作销售数据可视化看板,展示分析一步到位!
  2. Android GPS定位详解
  3. 命令行执行sql脚本
  4. dataGrip导出sql脚本
  5. 计算机二级C语言程序设计题+答案解析+源代码(一)
  6. 触摸屏左右屏幕外向内滑动_外向内发展的案例
  7. 用SQL语句备份SQL数据库
  8. 双十一选IT培训?都在这,超低价
  9. win10字体突然变成了繁体快速解决
  10. 嵌入式linux指令