首页 > 其他分享 >2024.5.29

2024.5.29

时间:2024-06-13 15:55:36浏览次数:24  
标签:ranking 2024.5 university 29 rank year table data

8-1 【Python0025】中国大学排名数据分析与可视化 分数 10 作者 doublebest 单位 石家庄铁道大学

【题目描述】以软科中国最好大学排名为分析对象,基于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))


image.png

标签:ranking,2024.5,university,29,rank,year,table,data
From: https://www.cnblogs.com/luoqingci/p/18246063

相关文章

  • 2024.5.31
    8-3【Python0027】函数图形绘制分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】设,,,其中,完成下列操作:(1)在同一坐标系下用不同的颜色和线型绘制y1、y2和y3三条曲线;(2)在同一绘图框内以子图形式绘制y1、y2和y3三条曲线。【练习要求】......
  • 2024.5.11
    8-3【Python0004】验证6174猜想分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】1955年,卡普耶卡(D.R.Kaprekar)对4位数字进行了研究,发现一个规律:对任意各位数字不相同的4位数,使用各位数字能组成的最大数减去能组成的最小数,对得......
  • 2024.5.13
    8-5【Python0006】爬楼梯分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】假设一段楼梯共n(n>1)个台阶,小朋友一步最多能上3个台阶,那么小朋友上这段楼梯一共有多少种方法。【练习要求】请给出源代码程序和运行测试结果,源代码程......
  • 2024.5.15
    8-7【Python0008】筛法求素数分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】用户输入整数n和m(1<n<m<1000),应用筛法求[n,m]范围内的所有素数。【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。【输入......
  • 2024.5.14
    8-6【Python0007】杨辉三角形分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】输出n(0<n)行杨辉三角形,n由用户输入。【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。【输入格式】一行中输入1个整数n。【输......
  • 2024.5.17
    8-9【Python0010】正整数的因子展开式分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】编写程序,输出一个给定正整数x(x>1)的质因子展开式。【输入格式】请在一行中输入整数x的值。【输出格式】对每一组输入的x,按以下格式输出x的质因子......
  • 2024.5.16
    8-8【Python0009】查找鞍点分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】对于给定5X5的整数矩阵,设计算法查找出所有的鞍点的信息(包括鞍点的值和行、列坐标,坐标从1开始)。提示:鞍点的特点:列上最小,行上最大。【练习要求】请给出源代......
  • 2024.5.18
    8-10【Python0011】牛顿迭代法分数10全屏浏览作者 doublebest单位 石家庄铁道大学【题目描述】编写程序,使用牛顿迭代法求方程在x附近的一个实根。【练习要求】请给出源代码程序和运行测试结果,源代码程序要求添加必要的注释。【输入格式】请在一行......
  • 2024.5.19
    8-11【Python0012】对比Python中的列表、元组、字典、集合、字符串等之间异同分数10全屏浏览作者 doublebest单位 石家庄铁道大学针对Python中的列表、元组、字典、集合、字符串,查阅资料,请以条目形式从各方面对比它们之间的异同。要求结合代码......
  • 2024.05.29
    function[section]=JinTuiFa(fx,x0,h0,t)%%%输入目标函数x,初始点x0,初始步长h0和加停系数t:%%%采用进退法确定搜索区间ra,bl;输出搜索区间f=inline(fx);h=h0;a=x0;k=0;%k是计数器,同时也做指示器:如果第1次目标函数就没有下降,将%作为反白搜索的指示标记:......