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.mzph.cn/news/175547.shtml

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

相关文章

普乐蛙绵阳科博会一场VR科普航天科学盛宴科普知识

普乐蛙绵阳科普展:一场科学盛宴,点燃孩子探索欲望的火花! 普乐蛙绵阳科普展正在如火如荼地进行中,吸引了无数孩子和家长的热情参与。这场科普盛宴以独特的内外视角,让人们感受到科学的魅力,激发了孩子们对知识的渴望和…

【挑战业余一周拿证】二、在云中计算 - 第 3 节 - Amazon EC2 定价

目录 第 3 节 - Amazon EC2 定价 一、按需 适用场景 二、Savings Plans 适用场景 三、预留实例 三种付款模式 四、Spot 实例 适用场景 五、专用主机 适用场景 关注订阅号 首页:【挑战业余一周拿证】AWS 认证云从业者 - 基础 课程目录:【挑…

机器视觉应用开发

机器视觉应用开发是指利用计算机视觉技术进行图像或视频数据处理和分析,实现自动化、智能化的应用程序开发。下面是机器视觉应用开发的一般步骤和常见任务。 需求分析:明确开发的机器视觉应用的具体需求和目标,例如人脸识别、目标检测、图像分…

【阅读记录】《联邦学习》杨强

第2章 隐私、安全及机器学习 2.3 威胁与安全模型 2.3.1 隐私威胁模型 对机器学习系统的攻击可能在任何阶段发生,包括数据发布、模型训练和模型推理。 模型训练阶段:重构攻击(避免使用寻存储显式特征值的模型,SVM KNN等&…

深度学习之循环神经网络

视频链接:6 循环神经网络_哔哩哔哩_bilibili 给神经网络增加记忆能力 对全连接层而言,输入输出的维数固定,因此无法处理序列信息 对卷积层而言,因为卷积核的参数是共享的,所以卷积操作与序列的长度无关。但是因为卷积…

第十八章 控制 XML 元素和属性名称

文章目录 第十八章 控制 XML 元素和属性名称默认 XML 元素和属性名称控制映射为顶级元素的对象的元素或属性的名称 第十八章 控制 XML 元素和属性名称 类和属性名称与 XML 元素和属性的名称之间存在默认对应关系,可以覆盖这些默认值。 类和属性参数 XMLNAMEXMLTY…

人工智能与供应链行业融合:预测算法的通用化与实战化

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 让我们一起深入探索人工智能与供应链的融合,以及预测算法在实际应用中的价值!🔍🚀 文章目录 前言供应链预测算法的基本流程统计学习模型与机…

git突然失效:无法提交的问题 无法推送到远程仓库

git配置分为全局配置和局部配置 一般需要设置一个用户名和邮箱,将生成的ssh密钥绑定到远程账户上,拉取代码时会需要输入用户名与密码,输入正确即可。 局部配置为当前项目的配置 但尝试修改没有什么用 下面是一些修改git配置的命令 git conf…

N字形变换 Golang leecode_6

首先还是暴力,先构建一个 numRows 行,1000列的二维数组,然后将字符串 s 变成字符数组按照 N 字形排列,然后再 Z 字形遍历,代码逐过程调试很好看懂。 package mainimport ("fmt" )func convert(s string, nu…

MATLAB算法实战应用案例精讲-【图像处理】图像配准

目录 前言 知识储备 如何选择图像处理软件? OpenCV图像处理基础知识 图像的基本表示方法 像素处理

Mybatis入门(三)

作用域(Scope)和生命周期 对象生命周期和依赖注入框架 依赖注入框架可以创建线程安全的、基于事务的 SqlSession 和映射器,并将它们直接注入到你的 bean 中,因此可以直接忽略它们的生命周期。 如果对如何通过依赖注入框架使用 M…

【亚马逊云】基于EC2以 All-in-One 模式快速部署 KubeSphere 和 Kubernetes

文章目录 1. 云实例配置说明2. SSH连接云实例3. 查看系统版本4. 修改主机名5. 安装依赖项6. 安全组和DNS修改7. 下载KubeKey8. 同时安装Kubesphere和Kubernetes[可选]单独安装Kubernetes[可选]单独安装KubeSphere9. 验证KubeSphere安装结果10. 登录KubeSphere控制台[可选]安装K…

C/C++字节对齐

C/C字节对齐 C/C字节对齐1.G_PACKED2.1 pack(push)2.2 pack(1) 全部例子 C/C字节对齐 1.G_PACKED #ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) #else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Decla…

sqli-labs靶场详解(less11-less16)

目录 less-11 less-12 less-13 less-14 less-15 less-16 提交参数后 动态参数不存在url中 存在于post表单中 于是在表单中进行注入点测试 先看一看这种提交数据的关卡输入提交后会有什么反应 unameadmin&passwdadmin&submitSubmit 输出 usernameadmin passwordadmin un…

seata集成springboot的一些错误小计

1 seata依赖没找到 dependencies.dependency.version for com.alibaba.cloud:spring-cloud-starter-alibaba-seata:jar is missing. line 126, column 21错误原因:未指定具体的seata版本 解决 <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-st…

Java中弗洛伊德三角

包含连续自然整数的直角三角形被称为弗洛伊德三角形&#xff0c;以计算机科学家罗伯特弗洛伊德的名字命名。它是通过按顺序放置数字而创建的&#xff0c;从顶部的 1 开始&#xff0c;每一行都比前一行多一个数字。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 …

uni-app图片上传

注意&#xff1a; 1、定义&#xff1a;fileList&#xff0c; 2、图片上传请求地址按照自己的修改 async afterReadList(event) { let lastFileIndex this.fileList.length - 1; let remainingCount lastFileIndex > 9 ? 0 : 10 - lastFileIndex; …

vuex的使用笔记

1.安装 npm安装 npm install vuexnext --saveyarn安装 yarn add vuexnext --save2.基本结构 import Vuex from vuexconst store createStore({ //状态&#xff1a;相当于vue中的data&#xff08;&#xff09; state() {return {name: 0,code:"",todos: [{ id: 1…

安卓横竖屏切换后,应用只展示半屏问题 AndroidAutoSize

项目使用的是这个屏幕适配框架&#xff1a;GitHub - JessYanCoding/AndroidAutoSize: &#x1f525; A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版&#xff0c;一个极低成本的 Android 屏幕适配方案). 最近需要做一个特殊设备的横竖屏切换适配&…

稳定视频扩散数据管理解密【stable video diffusion】

Stability AI 最近于 2023 年 11 月 21 日推出了其最新模型—稳定视频扩散&#xff08;SVD&#xff09;。视频生成模型的这一突破取决于数据管理的关键作用。 除了模型检查点之外&#xff0c;他们还发布了一份技术报告。 让我们在 Stability AI 的技术报告和一些引人注目的示例…