
#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()getHTMLText:网页请求与异常处理这一段代码使用 requests 模块发送 GET 请求,并且对响应做了编码处理,避免乱码问题。加了 try/except 是为了防止网站挂掉时程序崩溃。
fillUnivList:用 BeautifulSoup 抓取表格数据目标网站的结构是标准的 HTML 表格,我们用 .find('table') 定位,再用 .find_all('tr') 抓所有行,然后一行行提取出“排名”、“学校名称”和“总分”。
注意:有些行数据可能不完整,所以我们加了个 len(tds) >= 4 的判断。
printUnivList:优雅打印前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 是不是感觉有些耳熟能详的“老大哥”没进前十?这就对了,数据永远比印象更靠谱。
如果你刚好也想:
pandas.to_excel()。matplotlib 或 pyecharts。cron + python 脚本。👉 GitHub地址(附打包下载):
👉 CSDN资源下载(含.py源码和.xlsx表格)
这一篇我主要是用 Python 写了个小爬虫,把软科官网的大学排名数据抓了下来。代码不长,但实践性非常强,特别适合新手上手练手。而且还能顺便提升你对 HTML结构分析、异常处理、字符串处理 的理解。
下篇我会讲讲如何把这份数据导出为 Excel 并可视化,有兴趣记得关注。