当前位置: 首页 > news >正文

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)

运行结果如下:

相关文章:

Python网络爬虫练习

爬取历年中国大学排名(前20名),并随机选取一所高校画图展示其历年总分变化,并计算平均分,在图上展示该平均分直线: 代码如下: import matplotlib.pyplot as plt import pandas as pd import requests import randomdef main(yea…...

《opencv实用探索·九》中值滤波简单理解

1、引言 均值滤波、方框滤波、高斯滤波,都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合,因此含有噪声的像素也会被考虑进去,噪声不会被消除,而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…...

PC行内编辑

点击编辑,行内编辑输入框出现,给列表的每条数据定义编辑标记,最后一定记得 v-model双向绑定,使数据回显。 步骤: 1、给行数据定义编辑标记 2、点击行编辑标记(isedit) 3、插槽根据标记渲染表单 …...

鸿蒙开发:Stage模型开发-应用/组件级配置以及UIAbility组件初步使用【鸿蒙专栏-20】

文章目录 Stage模型开发概述基本概念UIAbility组件和ExtensionAbility组件WindowStageContextAbilityStage开发流程应用组件开发了解进程模型了解线程模型应用配置文件应用版本声明配置Module支持的设备类型配置Module权限配置进阶应用配置...

Django回顾【五】

目录 一、多表操作 【1】基于对象的跨表查 【2】基于双下滑线的连表查 【3】related_name 二、聚合查询与分组查询 【1】聚合查询 【2】分组查询 三、F与Q查询 【1】F查询 【2】Q查询 四、其他字段和字段参数 【1】其他字段 【2】ORM字段参数 【3】ForeignKey 属…...

Python容器——字典

Key——Value 键值对...

基于Java SSM框架实现实现四六级英语报名系统项目【项目源码+论文说明】

基于java的SSM框架实现四六级英语报名系统演示 摘要 本论文主要论述了如何使用JAVA语言开发一个高校四六级报名管理系统,本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作…...

翻硬币(第四届蓝桥杯省赛C++B组)(java版)

//翻硬币,每次都会改变两个硬币的状态 //因此我们可以从前往后枚举,s1[i] 与 s2[i] 状态不同就改变它的状态 //同时s1[i 1] 与 s2[i 1] 的状态会因此改变 // 所以继续往下枚举s1[i 1] 与 s2[i 1] //因为题目有说必须有解,因此枚举到 n - 1位的时候,两个字符串的…...

原生GPT本地及云端部署方式保姆级教程

前提条件 部署必须要有一个超过1年的Github账号 本地服务部署 运行效果 部署方法 下载安装包 暂时无法在飞书文档外展示此内容 GitHub授权登录: https://dash.pandoranext.com/ 登录后是这个样子: 复制下面红框里面这个License Id 编辑Config.js…...

Docker容器(一)概述

一、虚拟化概述 1.1引⼊虚拟化技术的必要性 服务器只有5%的时间是在⼯作的;在其它时间服务器都处于“休眠”状态. 虚拟化前 每台主机⼀个操作系统; 软硬件紧密结合; 在同⼀个主机上运⾏多个应⽤程序通常会遭遇冲突; 系统的资源利⽤率低; 硬件成本⾼昂⽽且不够灵活…...

Facebook引流怎么做?写个脚本就好!

在当今的数字化时代,流量对于任何一个网站或应用程序来说都至关重要,Facebook,作为全球最大的社交网络平台,无疑是一个获取流量的绝佳场所,但是,如何有效地从Facebook引流呢?写个脚本就好了! 在本文中&am…...

自动化集成有哪些典型应用场景?

为什么要做自动化场景集成? 主要分为以下几点: 提高效率/减少错误:减少人工操作、人为错误、人力成本,提高生产效率、生产质量和稳定性。 提高可靠性:提高系统的可靠性和稳定性,减少系统故障和停机时间。…...

探讨几种在CentOS 7上实现文件上传的方法

最近服务器过期了,把之前服务器的数据库都备份了下来,现在准备迁移各种服务,这就涉及到文件传输。之前用得多的都是xshell里的xtp来传,校园网禁用了ssh协议,还有一大堆乱七八糟的协议,我一般用的代理方法或…...

AWS EC2使用 instance profile 访问S3

AWS EC2 instance可以使用instance profile 配置访问S3的权限。 然后就可以直接在EC2上执行 python代码或者AWS CLI去访问S3了。 唯一需要注意的地方是,申明region。 示例代码: aws s3 ls xxxx-s3-bucket --region xxx-region import boto3 client …...

python中函数式编程

文章目录 map()函数filter()函数reduce()函数 map()函数 当使用map()函数时,可以使用lambda表达式来定义一个简单的转换函数。 以下是一个使用map()函数和lambda表达式的简单示例: numbers [1, 2, 3, 4, 5] squared_numbers map(lambda x: x**2, nu…...

Java_JDK8到JDK21各版本发行时间及重要特性

Java_JDK8到JDK21各版本发行时间及重要特性 背景JDK8新特性(2014年3月)JDK9新特性(2017年9月)JDK10新特性(2018年3月)JDK11新特性(2018年9月)(LTS版本)JDK12新特性(2019年…...

03 数仓平台 Kafka

kafka概述 定义 Kafka 是一个开源的分布式事件流平台(Event Streaming Plantform),主要用于大数据实时领域。本质上是一个分布式的基于发布/订阅模式的消息队列(Message Queue)。 消息队列 在大数据场景中主要采用…...

2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——解析版

文章目录 2023年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题三、逻辑推理真题(2023-26)真题(2023-27)真题(2023-28)真题(2023-29)真题(2023-30)真题(2023-31-32)真题(2023-33)真题(2023-34)真题(2023-35)真题(2023-36)真题(2023-37-38...

Matlab论文插图绘制模板第129期—函数网格曲面图

在之前的文章中,分享了Matlab函数折线图的绘制模板: 函数三维折线图: 进一步,再来分享一下函数网格曲面图。 先来看一下成品效果: 特别提示:本期内容『数据代码』已上传资源群中,加群的朋友请自…...

无限移动的风景 css3 动画 鼠标移入暂停

<style>*{margin:0;padding:0;/* box-sizing: border-box; */}ul{list-style: none;}#nav{width:900px;height:100px;border:2px solid rgb(70, 69, 69);margin:100px auto; overflow: hidden;}#nav ul{animation:moving 5s linear infinite;width:200%; /*怎么模拟动画…...

项目分享|VibeVoice:微软开源的前沿语音AI

引言 在语音合成&#xff08;TTS&#xff09;技术领域&#xff0c;长篇幅、多说话者、低延迟的自然语音生成一直是行业痛点。传统TTS模型往往受限于生成时长、说话者数量或实时响应速度&#xff0c;难以满足播客制作、智能对话等复杂场景需求。微软开源的VibeVoice框架彻底打破…...

RustDesk 中继服务器搭建指南:告别卡顿,实现高效远程控制

1. 为什么你需要自建RustDesk中继服务器 远程办公已经成为现代工作方式的标配&#xff0c;但很多人在使用公共远程控制服务时都遇到过令人抓狂的卡顿问题。想象一下&#xff0c;你正在紧急处理服务器故障&#xff0c;画面却卡成了PPT&#xff1b;或者需要远程协助家人修电脑&a…...

二进制入门及其运算

二进制,十进制以及它们之间的转换- 十进制:我们日常生活中最常用的计数系统是\它的基数是10,使用0 - 9这十个数字来表示数。每个数位的权重是10的幂次方,从右往左依次是10⁰、10、10等。例如,数字234可以表示为210 310 410⁰。- 二进制:是计算机科学中广泛使用的计数系统。它的…...

RK3576/RK3588 Yolo11 目标检测 Demo

前言 以前的大作业&#xff0c;根据rknn_model_zoo和easy eai示例代码修改&#xff08;缝合&#xff09;&#xff0c;仅供参考 后来我试着模块化一些&#xff0c;方便看&#xff0c;但因为核心代码都是直接用的示例代码&#xff0c;所以有些模块还是耦合&#xff08;composit…...

OpenClaw语音控制扩展:Qwen3.5-4B-Claude对接Whisper实现声控自动化

OpenClaw语音控制扩展&#xff1a;Qwen3.5-4B-Claude对接Whisper实现声控自动化 1. 为什么需要语音控制自动化 去年冬天的一个深夜&#xff0c;我在赶制项目文档时突发奇想&#xff1a;如果能让AI听懂我的语音指令直接操作电脑&#xff0c;是不是连键盘都不用碰了&#xff1f…...

开源电池管理系统:SmartBMS的技术创新与实践应用

开源电池管理系统&#xff1a;SmartBMS的技术创新与实践应用 【免费下载链接】SmartBMS Open source Smart Battery Management System 项目地址: https://gitcode.com/gh_mirrors/smar/SmartBMS SmartBMS是一套开源智能电池管理系统&#xff0c;专为锂离子电池组&#…...

硬件工程师职业发展路径与核心技术解析

硬件工程师的职业发展路径与技术深度探讨1. 行业现状与职业定位1.1 硬件工程师的职责演变现代硬件工程师的职责范围已从传统的电路设计扩展到系统集成、信号完整性分析、EMC设计等多个领域。典型的职责矩阵包括&#xff1a;职责类别传统要求现代扩展要求电路设计原理图绘制、PC…...

避开这5个坑!用HipSTR分析NGS数据时最容易出错的STR检测问题

避开这5个坑&#xff01;用HipSTR分析NGS数据时最容易出错的STR检测问题 STR检测在二代测序数据分析中扮演着关键角色&#xff0c;但实际操作中常会遇到各种"坑"。本文将结合实战经验&#xff0c;剖析使用HipSTR进行STR检测时最容易出错的五个关键环节&#xff0c;帮…...

Doris从入门到上天系列第六篇:Doris中修改表的操作

一&#xff1a;修改表使用 ALTER TABLE 命令可以对表进行修改&#xff0c;包括 partition 、rollup、schemachange、rename 和 index 五种。语法&#xff1a;ALTER TABLE [database.]table alter_clause1[, alter_clause2, ...];alter_clause 分为 partition 、rollup、schema …...

手把手教你为i.MX6ULL开发板适配非标准分辨率LCD(以1024x600 OV5640为例)

i.MX6ULL开发板非标准分辨率LCD适配实战&#xff1a;从寄存器配置到图像稳定输出 在嵌入式视觉系统开发中&#xff0c;摄像头与显示设备的适配往往成为项目落地的关键瓶颈。当面对非标准分辨率的LCD屏幕时&#xff0c;开发者需要深入理解图像采集与显示的全链路原理&#xff0c…...