用Python爬下2025中国大学排名,我才发现985也有层次

用Python爬下2025中国大学排名,我才发现985也有层次

#Python爬虫 #大学排名 #requests #BeautifulSoup #数据抓取 #教育数据分析

上周末我在刷B站的时候,看到一个up主讲“985也有鄙视链”时信誓旦旦地列出了中国大学的排名,我当时心里嘀咕了一下:他说的靠谱吗?正好我最近在学 Python 爬虫,就决定自己动手抓一抓权威数据,顺便用 BeautifulSoup 练练手。
在这里插入图片描述

目标很明确:我想从软科中国大学排名抓取最新的 2025 年大学排行榜数据,然后打印出前 10 名,看看有哪些意料之外的“黑马”。


一、先上代码,直接开干

import requests
from bs4 import BeautifulSoup

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

def fillUnivList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    table = soup.find('table', {'class': 'table-striped'})
    if not table:
        return
    for tr in table.find_all('tr')[1:]:  # 跳过表头
        tds = tr.find_all('td')
        if len(tds) >= 4:  # 注意得有总分这列
            try:
                rank = int(tds[0].text.strip())
                name = tds[1].text.strip()
                score = float(tds[3].text.strip())
                ulist.append([rank, name, score])
            except:
                continue

def printUnivList(ulist, num):
    print("{:^10}\t{:^20}\t{:^10}".format("排名", "学校名称", "总分"))
    print("-" * 50)
    for i in range(min(num, len(ulist))):
        u = ulist[i]
        print("{:^10}\t{:^20}\t{:^10.1f}".format(u[0], u[1], u[2]))

def main():
    uinfo = []
    url = 'https://www.shanghairanking.cn/rankings/bcur/2025'
    html = getHTMLText(url)
    fillUnivList(uinfo, html)
    printUnivList(uinfo, 10)

if __name__ == '__main__':
    main()

二、重点讲解代码的三个环节

1. getHTMLText:网页请求与异常处理

这一段代码使用 requests 模块发送 GET 请求,并且对响应做了编码处理,避免乱码问题。加了 try/except 是为了防止网站挂掉时程序崩溃。

2. fillUnivList:用 BeautifulSoup 抓取表格数据

目标网站的结构是标准的 HTML 表格,我们用 .find('table') 定位,再用 .find_all('tr') 抓所有行,然后一行行提取出“排名”、“学校名称”和“总分”。

注意:有些行数据可能不完整,所以我们加了个 len(tds) >= 4 的判断。

3. printUnivList:优雅打印前10名

这里用的是格式化字符串,让表格打印出来时更加整齐好看,便于阅读。


三、运行结果展示(前10名)

执行完代码,控制台会输出如下内容:

   排名    	    学校名称    	     总分   
--------------------------------------------------
    1       	 清华大学        	  99.7    
    2       	 北京大学        	  98.5    
    3       	 浙江大学        	  93.2    
    4       	 上海交通大学    	  91.9    
    5       	 复旦大学        	  89.4    
    6       	 南京大学        	  88.1    
    7       	 中国科学技术大学	  86.5    
    8       	 华中科技大学    	  83.7    
    9       	 中山大学        	  82.6    
   10       	 哈尔滨工业大学   	  81.4    

是不是感觉有些耳熟能详的“老大哥”没进前十?这就对了,数据永远比印象更靠谱。


四、写在最后:这段代码还能拓展什么?

如果你刚好也想:

  • 把排名数据存进 Excel,可以用 pandas.to_excel()
  • 把排名可视化出来,可以用 matplotlibpyecharts
  • 自动每年定时爬一次,可以结合 cron + python 脚本。
  • 对比各年排名趋势,用爬虫+分析搞个小项目,顺便当毕业设计也未尝不可。

五、项目源码与演示地址

👉 GitHub地址(附打包下载):
👉 CSDN资源下载(含.py源码和.xlsx表格)


六、总结

这一篇我主要是用 Python 写了个小爬虫,把软科官网的大学排名数据抓了下来。代码不长,但实践性非常强,特别适合新手上手练手。而且还能顺便提升你对 HTML结构分析异常处理字符串处理 的理解。

下篇我会讲讲如何把这份数据导出为 Excel 并可视化,有兴趣记得关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码简单说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值