增补博客 第八篇 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 matplotlib plt.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_data
else:
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()
# 创建一个表格的figure
fig, 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
# 构建URL
url = 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() == '退出':
break
year = input("请输入年份:")
print(get_specific_ranking(university, year))

增补博客 第八篇 python 中国大学排名数据分析与可视化的更多相关文章
- Python 中国大学排名定向爬虫
代码来自于中国大学Mooc北京理工大学Pythont教学团队:https://www.icourse163.org/learn/BIT-1001870001#/learn/content?type=d ...
- 一鼓作气 博客--第八篇 note8
0.,222] list[33] except IndexError as e : print('index error ') except ValueError as e : print('valu ...
- Scrum 冲刺博客第八篇
一.当天站立式会议照片一张 二.每个人的工作 (有work item 的ID),并将其记录在码云项目管理中 昨天已完成的工作 对界面进行美化 今天计划完成的工作 连接数据库实现排行榜的基本功能 工作中 ...
- [转]有哪些值得关注的技术博客(Java篇)
有哪些值得关注的技术博客(Java篇) 大部分程序员在自学的道路上不知道走了多少坑,这个视频那个网站搞得自己晕头转向.对我个人来说我平常在学习的过程中喜欢看一些教程式的博客.这些博客的特点: 1. ...
- Django 系列博客(八)
Django 系列博客(八) 前言 本篇博客介绍 Django 中的模板层,模板都是Django 使用相关函数渲染后传输给前端在显式的,为了想要渲染出我们想要的数据,需要学习模板语法,相关过滤器.标签 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 终结篇之发布项目
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 年度十佳 DevOps 博客文章(前篇)
如果说 15 年你还没有将 DevOps 真正应用起来,16 年再不实践也未免太落伍了.国内 ITOM 领军企业 OneAPM 工程师为您翻译整理了,2015 年十佳 DevOps 文章,究竟是不是深 ...
- # Do—Now——团队冲刺博客_总结篇
Do-Now--团队冲刺博客_总结篇 目录 博客链接 作者 1. 第一篇(领航篇) @仇夏 2. 第二篇 @侯泽洋 3. 第三篇 @仇夏 4. 第四篇 @周亚杰 5. 第五篇 @唐才铭 6. 第六篇 ...
- 为了确认是您本人在申请搬家,请在原博客发表一 篇标题为《将博客搬至CSDN》的文章,并将文章地址填写在上方的"搬家通知地址"中
为了确认是您本人在申请搬家,请在原博客发表一 篇标题为<将博客搬至CSDN>的文章,并将文章地址填写在上方的"搬家通知地址"中
- thinkphp5项目--个人博客(八)
thinkphp5项目--个人博客(八) 项目地址 fry404006308/personalBlog: personalBloghttps://github.com/fry404006308/per ...
随机推荐
- 技术揭秘:从双11看实时数仓Hologres高可用设计与实践
简介:本文将会从阿里巴巴双11场景出发,分析实时数仓面临的高可用挑战以及针对性设计. 2021年阿里巴巴双11完美落下为帷幕,对消费者来说是一场购物盛宴,对背后的业务支撑技术人来说,更是一场年度大考 ...
- 自己动手写符合自己业务需求的eslint规则
简介:eslint是构建在AST Parser基础上的规则扫描器,缺省情况下使用espree作为AST解析器.rules写好对于AST事件的回调,linter处理源代码之后会根据相应的事件来回调ru ...
- 阿里云力夺FewCLUE榜首!知识融入预训练+小样本学习的实战解析
简介: 7月8日,中文语言理解权威评测基准CLUE公开了中文小样本学习评测榜单最新结果,阿里云计算平台PAI团队携手达摩院智能对话与服务技术团队,在大模型和无参数限制模型双赛道总成绩第一名,决赛答辩总 ...
- [GPT] 使用 nodejs的 puppeteer 库使用完关闭后,linux上面有很多 chrome 进程
在使用 Node.js 的 Puppeteer 库时,如果你在使用完后关闭了浏览器,但在 Linux 上仍然存在很多 Chrome 进程,可能是因为没有正确地关闭所有相关的进程. 可以尝试以下方法 ...
- dockerfile构建镜像常用命令
一.什么是dockerfile Dockerfile是一个包含用于组合映像的命令的文本文档.可以使用在命令行中调用任何命令. Docker通过读取Dockerfile中的指令自动生成映像. docke ...
- Winform项目中纯代码创建WCF服务
接口: [ServiceContract(CallbackContract = typeof(IViewCallback), SessionMode = SessionMode.Required)] ...
- WEB服务与NGINX(3)-NGINX基础及配置文件
WEB服务与NGINX(3)-NGINX基础及配置文件 目录 WEB服务与NGINX(3)-NGINX基础及配置文件 1. NGINX初识与安装 1.1 NGINX特性 1.2 NGINX功能和应用场 ...
- linux文本三剑客之awk详解
linux文本三剑客之awk详解 目录 linux文本三剑客之awk详解 1.awk命令详解 1.1 awk的处理流程 1.2 awk中的变量 1.2.1 内置变量 1.2.2 自定义变量 1.3 a ...
- leaflet利用hotline实现河流差值渲染热力图
实现效果(这里做了1条主河道和5个支流): 核心代码使用了Leaflet.hotline插件,github下载地址链接 详情见我之前整理的一篇文章介绍河流热力图 核心代码逻辑: // 处理河流数据以及 ...
- d3d12龙书阅读----绘制几何体(下)
d3d12龙书阅读----绘制几何体(下) 本节在上一节的基础上,对整个绘制过程进行优化,将绘制单个几何体的内容拓展到了多个几何体,同时对根签名进行了进一步地探索. 帧资源 在之前绘制每帧的结尾,我们 ...