Python爬虫零基础入门:30分钟爬取软科中国大学排名,新手复制粘贴就能跑
一、写在前面:为什么选这个项目
很多想学爬虫的新手都卡在了第一步:要么教程太复杂,满屏看不懂的专业术语;要么选的网站反爬太严,代码写了半天全是403错误;要么爬下来的数据乱七八糟,根本没法用。
今天这个项目专门为零基础设计:
- 零门槛:只需要会复制粘贴,不需要任何编程基础
- 零失败:软科中国大学排名网站反爬极弱,几乎不会被拦截
- 见效快:30分钟就能看到完整的Excel表格结果
- 实用性强:爬下来的排名数据可以用来择校、做分析、写报告
跟着本文一步步做,保证你第一次写爬虫就能成功。
二、准备工作:5分钟搞定环境
2.1 安装Python
- 打开Python官网:https://www.python.org/downloads/
- 下载最新版本的Python(推荐3.11或3.12)
- 安装时一定要勾选"Add Python to PATH"(最关键的一步,很多新手失败都是因为这个)
- 安装完成后,按Win+R打开运行,输入cmd回车,在命令行输入
python --version,如果显示版本号就说明安装成功了
2.2 安装需要的库
在命令行中依次输入以下三行命令,每输完一行按回车:
pipinstallrequests-ihttps://pypi.tuna.tsinghua.edu.cn/simple pipinstallbeautifulsoup4-ihttps://pypi.tuna.tsinghua.edu.cn/simple pipinstallpandas openpyxl-ihttps://pypi.tuna.tsinghua.edu.cn/simple这里用了清华的国内源,下载速度会快很多。
2.3 准备代码编辑器
推荐使用VS Code(免费好用),如果不想安装,用系统自带的记事本也可以。
三、爬虫基本原理(1分钟看懂)
爬虫其实就是模拟浏览器访问网站,把网页上的数据提取出来整理好。整个过程只有四步:
就这么简单,没有任何神秘的地方。
四、分步实现:20分钟写完全部代码
我们要爬取的是2026软科中国大学排名:https://www.shanghairanking.cn/rankings/bcur/2026
4.1 第一步:导入需要的库
新建一个文件,命名为university_ranking.py,输入以下代码:
# 导入发送网络请求的库importrequests# 导入解析网页的库frombs4importBeautifulSoup# 导入处理数据和保存Excel的库importpandasaspdimporttime4.2 第二步:发送请求获取网页内容
# 目标网站URLurl="https://www.shanghairanking.cn/rankings/bcur/2026"# 请求头,模拟浏览器访问,防止被拦截headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"}try:# 发送GET请求response=requests.get(url,headers=headers,timeout=10)# 设置编码,解决中文乱码问题response.encoding="utf-8"# 打印状态码,200表示请求成功print(f"请求成功,状态码:{response.status_code}")exceptExceptionase:print(f"请求失败:{e}")exit()解释:
requests.get()就是模拟浏览器打开这个网址headers里的User-Agent告诉网站"我是一个正常的浏览器,不是爬虫"response.encoding = "utf-8"非常重要,否则中文会变成乱码
4.3 第三步:解析网页提取数据
这是最核心的一步,我们需要用浏览器的开发者工具找到数据所在的位置。
操作步骤:
- 用Chrome打开软科排名网站
- 按F12打开开发者工具
- 点击左上角的箭头图标
- 点击网页上的"清华大学"
- 在右侧就能看到对应的HTML标签
我们可以看到,所有的排名数据都在一个<table>标签里,每一行是一个<tr>标签,每一列是一个<td>标签。
继续写代码:
# 创建BeautifulSoup对象,解析HTMLsoup=BeautifulSoup(response.text,"html.parser")# 找到排名表格table=soup.find("table",class_="rk-table")# 存储所有大学数据的列表universities=[]# 遍历表格的每一行(跳过表头)forrowintable.find_all("tr")[1:]:# 获取所有列cols=row.find_all("td")# 提取数据ranking=cols[0].text.strip()name=cols[1].find("a").text.strip()total_score=cols[4].text.strip()province=cols[2].text.strip()category=cols[3].text.strip()# 添加到列表universities.append({"排名":ranking,"学校名称":name,"总分":total_score,"省市":province,"类型":category})# 打印进度print(f"已获取:{ranking}{name}")print(f"\n共获取到{len(universities)}所大学的排名数据")4.4 第四步:保存数据到Excel文件
# 创建DataFramedf=pd.DataFrame(universities)# 保存到Excel文件df.to_excel("2026中国大学排名.xlsx",index=False,engine="openpyxl")print("\n数据已保存到:2026中国大学排名.xlsx")五、运行代码,查看结果
- 保存文件
- 打开命令行,进入文件所在的文件夹
- 输入命令:
python university_ranking.py - 等待运行完成
- 你会在同一个文件夹下看到一个名为
2026中国大学排名.xlsx的文件,打开它就能看到完整的排名数据了!
六、新手最容易遇到的问题及解决方案
问题1:提示ModuleNotFoundError: No module named ‘requests’
- 解决方案:重新执行
pip install requests命令,确保安装成功
- 解决方案:重新执行
问题2:中文显示乱码
- 解决方案:确保代码中有
response.encoding = "utf-8"这一行
- 解决方案:确保代码中有
问题3:运行后没有数据,或者只获取到前30条
- 解决方案:软科排名默认只显示前30条,要获取全部数据需要翻页。本文最后会给出翻页版的完整代码。
问题4:提示ConnectionError
- 解决方案:检查网络连接,关闭VPN和代理,重新运行代码。
问题5:Excel文件打不开
- 解决方案:确保已经安装了
openpyxl库,执行pip install openpyxl。
- 解决方案:确保已经安装了
七、进阶:获取全部590所大学的排名数据
上面的代码只能获取前30条,要获取全部数据,我们只需要加一个翻页循环:
defget_university_ranking(page):"""获取指定页的大学排名数据"""url=f"https://www.shanghairanking.cn/rankings/bcur/2026?page={page}"try:response=requests.get(url,headers=headers,timeout=10)response.encoding="utf-8"soup=BeautifulSoup(response.text,"html.parser")table=soup.find("table",class_="rk-table")universities=[]forrowintable.find_all("tr")[1:]:cols=row.find_all("td")ranking=cols[0].text.strip()name=cols[1].find("a").text.strip()total_score=cols[4].text.strip()province=cols[2].text.strip()category=cols[3].text.strip()universities.append({"排名":ranking,"学校名称":name,"总分":total_score,"省市":province,"类型":category})returnuniversitiesexceptExceptionase:print(f"获取第{page}页失败:{e}")return[]# 获取全部20页数据all_universities=[]forpageinrange(1,21):print(f"\n正在获取第{page}页数据...")page_data=get_university_ranking(page)all_universities.extend(page_data)# 每页间隔1秒,不要给服务器造成太大压力time.sleep(1)print(f"\n共获取到{len(all_universities)}所大学的排名数据")# 保存到Exceldf=pd.DataFrame(all_universities)df.to_excel("2026中国大学排名完整版.xlsx",index=False,engine="openpyxl")print("完整数据已保存到:2026中国大学排名完整版.xlsx")八、最后提醒:合法合规使用爬虫
- 爬虫只是获取公开数据的工具,一定要在合法合规的范围内使用
- 遵守网站的robots.txt协议
- 控制请求频率,不要给服务器造成太大压力
- 不要爬取非公开数据和用户隐私信息
- 不要将爬取的数据用于商业用途
九、下一步学习方向
恭喜你完成了第一个爬虫项目!如果你想继续学习,可以从以下几个方向入手:
- 爬取其他网站的数据,比如豆瓣电影、天气、新闻等
- 学习处理简单的反爬机制,比如Cookie、验证码、请求头
- 学习异步爬虫,提升爬取速度
- 学习Scrapy框架,开发更复杂的爬虫项目
