增补博客 第八篇 python 中国大学排名数据分析与可视化

【题目描述】以软科中国最好大学排名为分析对象,基于requests库和bs4库编写爬虫程序,对2015年至2019年间的中国大学排名数据进行爬取:

(1)按照排名先后顺序输出不同年份的前10位大学信息,并要求对输出结果的排版进行优化;

(2)结合matplotlib库,对2015-2019年间前10位大学的排名信息进行可视化展示。

(3附加)编写一个查询程序,根据从键盘输入的大学名称和年份,输出该大学相应的排名信息。如果所爬取的数据中不包含该大学或该年份信息,则输出相应的提示信息,并让用户选择重新输入还是结束查询;

【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。

 

import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
from sympy.physics.control.control_plots import matplotlibplt.rcParams['font.sans-serif']=['SimHei']    # 用来设置字体样式以正常显示中文标签
plt.rcParams['axes.unicode_minus']=False    # 默认是使用Unicode负号,设置正常显示字符,如正常显示负号# 设置请求头部信息
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3"
}def get_ranking(year):url = f'https://www.shanghairanking.cn/rankings/bcur/{year}.html'# 发送HTTP请求以获取网页内容response = requests.get(url, headers=headers)# 检查请求是否成功if response.status_code == 200:# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(response.content, 'html.parser')# 找到包含大学信息的表格table = soup.find('table', class_='rk-table')# 提取前10所大学的信息universities = table.find_all('tr', {'data-v-90b0d2ac': True})[1:11]  # 排除表头行# 存储排名数据的列表ranking_data = []for university in universities:rank_element = university.find('td', {'data-v-90b0d2ac': True})# 检查排名元素是否存在if rank_element:rank = rank_element.text.strip()name = university.find('a').text.strip()# 将排名数据存储到列表中ranking_data.append({"排名": rank, "名称": name})return ranking_dataelse:print("请求失败。状态码:", response.status_code)def main():# 1. 获取并输出前10位大学信息for year in range(2015, 2020):ranking_data = get_ranking(year)if ranking_data:print(f"{year}年前10所大学:")for data in ranking_data:print(f"{data['排名']}. {data['名称']}")print()# 创建一个表格的figurefig, ax = plt.subplots()# 隐藏坐标轴ax.axis('off')# 创建表格table = ax.table(cellText=[list(data.values()) for data in ranking_data], colLabels=list(ranking_data[0].keys()), loc='center')# 调整表格字体大小table.auto_set_font_size(False)table.set_fontsize(12)# 调整单元格高度table.scale(1, 1.5)# 显示表格plt.title(f"{year}年,中国软科排名前十的大学", pad=20)plt.show()else:print(f"未能获取{year}年的大学排名数据。")def get_specific_ranking(university, year):  # Renamed the function# 构建URLurl = f'https://www.shanghairanking.cn/rankings/bcur/{year}.html'# 发送HTTP请求response = requests.get(url)# 检查响应状态码if response.status_code == 200:# 使用BeautifulSoup解析HTML内容soup = BeautifulSoup(response.content, 'html.parser')# 找到包含大学信息的表格table = soup.find('table', class_='rk-table')# 提取前30所大学的信息universities = table.find_all('tr', {'data-v-90b0d2ac': True})[1:31]  # 排除表头行# 存储排名数据的列表ranking_data = []for university_row in universities:name_element = university_row.find('a')# 检查大学名称元素是否存在if name_element:name = name_element.text.strip()# 检查大学名称是否与输入的大学名称匹配if name == university:rank_element = university_row.find('td', {'data-v-90b0d2ac': True})if rank_element:rank = rank_element.text.strip()print(f"{year} 年 {university} 排名是 {rank}")return rank# 如果未找到匹配的大学名称,打印消息print(f"找不到 {university} 在 {year} 年的排名信息。")else:print("请求失败。状态码:", response.status_code)if __name__ == "__main__":main()while True:university = input("请输入大学名称(输入 '退出' 结束查询):")if university.lower() == '退出':breakyear = input("请输入年份:")print(get_specific_ranking(university, year))

  

 

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

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

相关文章

增补博客 第四篇 python 中文级联菜单

from pypinyin import pinyin, Style# 定义菜单项和对应的子菜单 menu = {"文件": {"新建": {},"打开": {},"保存": {}},"编辑": {"撤销": {},"重做": {},"剪切": {},"复制": {},&…

如何在Windows中kill进程

可以使用taskkill 命令 1.先查询出端口的进程号 netstat -ano|findstr 端口号端口被进程号为3253的进程占用 2.直接强制杀死指定进程 taskkill /pid 3253 -t -f 还可也通过进程名取kill 进程 先获取端口号,再用 tasklist |findstr 进程号taskkill -t -f /im java.exe

增补博客 第一篇 python 简易带参计算器

设计一个简易的参数计算器。【输入格式】第一行输入待计算的带变量参数的计算式第二行输入各变量参数的赋值序列【输出格式】输出带变量参数的计算式的计算结果【输入样例】a+ba=1,b=10【输出样例】11def calculate(expression, values):# 将赋值序列解析为字典value_dict = {}…

解决JDBC Request调用存储过程只能写一条SQL

JDBC Request调用存储过程后的响应结果没有带上过程执行完的输出参数。而是简单提示:1行收到影响在这个场景下需要获取到输出参数用于断言或后续业务使用,于是修改下sql语句,执行后发现报错,sql语句错误解决方法: 在JDBC Connection Configuration-Database URL中末尾添加…

结组作业,第二次冲刺(8)

今天是第二次冲刺第八天,今天继续做昨天没做完的帖子功能,今天完成,管理员对帖子进行编辑的操作,以下为今日代码:<!DOCTYPE html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> &l…

vscode报错

参考—— https://www.cnblogs.com/greystone/p/14062510.html https://www.cnblogs.com/WMT-Azura/p/11137972.html具体报错: . : 无法加载文件 ...\WindowsPowerShell\profile. ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microso ft.com/fwlin…

cc链:不同链之间的异同

由不同入口进入,最后落到命令执行/代码执行之中cc链小复习 由不同入口进入,最后落到命令执行/代码执行之中 其中AnnotationInvocationHandler这个入口需要jdk1.8以前(8u71之后已修复不可利用) 其中cc2、cc4针对的commons-collections4版本大于4.0(含) 其中cc0就是前面写的…

php返回数据后如何让程序继续执行其它操作

最近遇到一个需求,异步请求对一个慢查询的结果进行缓存,先返回缓存的结果,然后继续获取数据缓存下来。写个demo记录下 使用register_shutdown_function函数 register_shutdown_function — 注册在关闭时执行的函数 register_shutdown_function(callable $callback, mixed ..…

Visual Instruction Tuning

目录概LLaVA代码Liu H., Li C., Wu Q. and Lee Y. J. Visual Instruction Tuning. NeurIPS, 2023.概 LLaVA. LLaVALLaVA 希望用 LLM 推理模态特征, 想法很简单:用 Vision Encoder 得到模态特征:\[\mathbf{Z}_v = g(\mathbf{X}_v). \] 用 Linear 投影:\[\mathbf{H}_v = \mathbf{…

如何从阿里云ECS迁移到AWS EC2?

随着云计算技术的迅速发展,众多跨国企业正在考虑将其工作负载迁移到AWS EC2,以获得更多的功能、灵活性和性能。在这个过程中,如何顺利迁移业务主机,并且保障迁移过程中业务的正常稳定访问,成为了一个具有挑战性的问题。九河云凭借丰富的多云迁移经验,借助AWS Application…

编程题目解析

编程题目解析 假设数据项定义如下: DATA1 DBHELLO!GOOD MORNING! DATA2 DB20DUP(?) 用串操作指令编写程序段,使其分别完成以下功能: (1)从左到右将DATA1中的字符串传送到DATA2中。 (2)传送完毕后,比较DATA1和DATA2中的内容是否相同:(3)把DATA1中的第3和第4字节装人AX。 (4)将A…

ASCII字符表和说明

ASCII,全称 American Standard Code for Information Interchange,即美国信息互换标准代码ASCII,全称 American Standard Code for Information Interchange,即美国信息互换标准代码,特点如下:一个字符用一个字节存储。 每个字节的最高位为 0,剩下的 7 位二进制数来对每…