Python网络爬虫练习

爬取历年中国大学排名(前20名),并随机选取一所高校画图展示其历年总分变化,并计算平均分,在图上展示该平均分直线:

代码如下:

import matplotlib.pyplot as plt
import pandas as pd
import requests
import randomdef main(year):for i in range(2015, year + 1):html = get_one_page(i)if html == '':print('爬取失败')else:tb = parse_one_page(html, i)save_csv(tb)print(i, '年排名提取完成')analysis()#获取网页
def get_one_page(year):try:url='https://www.shanghairanking.cn/rankings/bcur/{}'.format(year)r=requests.get(url,timeout=30)r.raise_for_status()r.encoding='utf-8'return r.textexcept:return ''#在网页上爬取数据
def parse_one_page(html,i):tb=pd.read_html(html)[0]print(tb.to_string())tb.columns=['排名','学校名称',2,3,'总分',5]tb.drop([2,3,5],axis=1,inplace=True)  #删除不需要的列tb['年份']=i #添加一列名称为"年份"的列,其值为ireturn tb #返回DataFrame#将DataFrame转化为csv文件
def save_csv(tb):tb.to_csv(r'university_rank.csv',mode='a',encoding='utf-8',header=True,index=0)#绘制图像
def analysis():df = pd.read_csv('university_rank.csv') #读取指定文件csv数据# 选取一个高校进行展示(这里随机选择一个)university = random.choice(df["学校名称"].unique())df = df[df["学校名称"] == university] #将选定学校的数据筛选出来df = df.sort_values('年份', ascending=True) #将年份设为排序的关键字,升序排列#将df中的年份转换为列表,并将列表中的元素转换为整型类型,保存到变量year中year = [int(x) for x in df.loc[:, '年份'].tolist()] #将df中的总分转换为列表,并将列表中的元素保存到rank中rank = [eval(x) for x in df.loc[:, '总分'].tolist()]# 计算平均分avg_score = sum(rank) / len(rank)plt.rcParams['font.sans-serif'] = ['SimHei']#设置折线图,反应不同年份总分变化趋势plt.plot(year, rank, label=university)#绘制平均分的直线,并设置之前的相应性质plt.axhline(y=avg_score, color='r', linestyle='--', label='平均分')#用注释标出平均分数值plt.annotate(f'平均分: {avg_score:.2f}', xy=(year[-1], avg_score), xytext=(10, 10),textcoords='offset points', color='r')plt.xlabel('年份')plt.ylabel('总分')plt.legend()plt.show()#调用main函数
main(2023)

运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/205129.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【c++j继承】

在编程领域中,面向对象是一种非常流行的程序设计方法。C 继承是面向对象编程中的一个重要概念,它允许我们创建一个新的类(子类)来继承已有的类(父类)的属性和方法。通过继承,我们可以实现代码的…

Banana Pi BPI-R3 Mini 开源路由器,也能拍出艺术美感

香蕉派BPI-R3 Mini路由器板开发板采用联发科MT7986A(Filogic 830)四核ARM A53芯片设计,板载2G DDR 内存,8G eMMC和128MB SPI NAND存储,是一款非常高性能的开源路由器开发板,支持Wi-Fi6 2.4G/5G(MT7976C)&am…

零基础学Python第三天||写一个简单的程序

通过对四则运算的学习,已经初步接触了Python中内容,如果看官是零基础的学习者,可能有点迷惑了。难道敲几个命令,然后看到结果,就算编程了?这也不是那些能够自动运行的程序呀? 的确。到目前为止…

仿美团外卖源码/在线外卖平台源码PHP/支持多商户+多样化配送费+本土外卖+支持第三方配送

源码简介: 进云仿美团外卖源码,作为外卖平台源码,它不仅支持多商户、多样化配送费、本土外卖,还支持第三方配送。 进云仿美团外卖源码是一个进云源生插件,支持多商户多样化配送费模式本土外卖平台支持第三方配送&…

【工业智能】Solutions

各类问题对应的解决方案 工艺参数推荐APC 排产调度智能算法强化学习 运筹优化空压机群控 预测 工艺参数推荐 APC 排产调度 智能算法 遗传算法 强化学习 DDQN 运筹优化 空压机群控 MIP混合整数规划 能耗优化 预测 电池容量预测 时序预测,回归预测 点击剩余…

亲子开衫外套 I 真的好温柔好有气质

分享适合宝宝和麻麻 一起穿的开衫外套 包芯纱拼貂毛 软糯亲肤不扎人 上身体验感非常不错 这种面料还不易起球 质感满满,单穿内搭都可!

开源vs闭源,大模型的未来在哪一边?

开源和闭源,两种截然不同的开发模式,对于大模型的发展有着重要影响。开源让技术共享,吸引了众多人才加入,推动了大模的创新。而闭源则保护了商业利益和技术优势,为大模型的商业应用提供了更好的保障。 那么&#xff0c…

如何进行微服务测试?

微服务测试是一种特殊的测试类型,因为它涉及到多个独立的服务。以下是进行微服务测试的一般性步骤: 1. 确定系统架构 了解微服务架构对成功测试至关重要。确定每个微服务的职责、接口、依赖项和通信方式。了解这些信息可以帮助您更好地规划测试用例和测…

wvp如果确认音频udp端口开放成功

用到工具 在服务器上开启端口监听 选中udp server,点击创建按钮 设置服务器监听端口 在客户端连接服务器端口 选中udp客户端,点击创建 输入服务器地址 远程端口和本地端口,本地端口只要没被占用都可以使用 ,点击确认 发送数据 …

redis运维(十三) hash哈希

一 哈希 ① 定义 hash: 散列说明:key对应是值是键值对[python中的字典],其中键在redis中叫field.形如:value[{field1,value1},...{fieldN,valueN}],值本身又是一种键值对结构 ② 优点和缺点 wzj_height 180wzj_age 18等价 -->…

论文阅读:Distributed Initialization for VVIRO with Position-Unknown UWB Network

前言 Distributed Initialization for Visual-Inertial-Ranging Odometry with Position-Unknown UWB Network这篇论文是发表在ICRA 2023上的一篇文章,本文提出了一种基于位置未知UWB网络的一致性视觉惯性紧耦合优化测距算法( DC-VIRO )的分布式初始化方法。 对于…

数据仓库模式之详解 Inmon 和 Kimball

目录 一、前言 二、企业信息工厂(Inmon) 2.1 概念 2.2 主要组件 2.3 流程 三、多维数据仓库(Kimball) 3.1 概念 3.2 核心组件 3.3 流程 四、异同及用途对比 4.1 异同对比 4.2 特征比较 一、前言 大部分关于数据仓库构建…

软件测试测试文档的编写和阅读

在软件测试中的流程中,测试文档也是一个重要的流程,所以测试人员也需要学习测试文档的编写和阅读。 一、定义: 测试文档(Testing Documentation)记录和描述了整个测试流程,它是整个测试活动中非常重要的文…

外包干了5个月,技术退步明显.......

先说一下自己的情况,大专生,18年通过校招进入武汉某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

基于算网大脑的探索和实践

2022年2月,国家正式发布消息,同意在内蒙古、贵州、甘肃、宁夏等地启动建设国家算力枢纽节点,标志着,”东数西算“工程已全面启动。 “东数西算”战略是一项长期的策略,并非是一时的热点,跟“南水北调”工程…

【古月居《ros入门21讲》学习笔记】08_发布者Publisher的编程实现

目录 说明: 1. 话题模型 图示 说明 2. 实现过程(C) 创建功能包 创建发布者代码(C) 配置发布者代码编译规则 编译并运行 编译 运行 3. 实现过程(Python) 创建发布者代码(…

【JavaEE初阶】 HTTP 请求 (Request)详解

文章目录 🍀序言🎄认识URL🚩URL 基本格式🚩query string🚩关于 URL encode 🌴认识 "方法" (method)🚩GET方法🚩POST 方法🚩 GET 和 POST 的区别 🎋…

云服务器-从零搭建前后端服务(自动化部署、数据库)

云服务器-从零搭建前后端服务(自动化部署、数据库) 免密登陆 第一步就是能免密快速登录到服务器 可以直接使用 FinalShell、MobaXterm 或 XShell 等进行连接 如下方法是直接用命令行操作 安装 Remote - SSH 插件,即可在 VSCode 中进行配置…

小辰的智慧树(差分+前缀和)

登录—专业IT笔试面试备考平台_牛客网 1.考虑总长度之和不能超过m,2考虑限制每棵树高度不能低于ci,如果用二分最短输能截到的高度,还要另外去判断,是否每棵树mid都能严格大于ci ,这样容易超时,换个角度&…

设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1)

设计一个算法,将链表中所有结点的链接方向“原地”逆转,即要求仅利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1) 代码思路: 这里要求不用额外空间,那么就要考虑链表自身的…