引言
软科(ShanghaiRanking)是一个全球知名的大学排名机构,每年都会发布不同领域的大学排名。如果你想获取这些排名数据并进行分析,Python 是一个非常强大的工具。本文将详细介绍如何使用 Python 爬取软科大学排名的数据,包括思路梳理和详细步骤。
思路梳理
- 确定目标URL:首先,确定软科大学排名的目标网页URL。
- 分析网页结构:使用浏览器的开发者工具(如Chrome的DevTools)分析网页的HTML结构,找到包含排名数据的标签。
- 发送HTTP请求:使用Python的
requests
库发送HTTP请求,获取网页内容。 - 解析网页内容:使用
BeautifulSoup
库解析HTML内容,提取所需数据。 - 存储数据:将提取的数据保存到本地文件(如CSV格式)或数据库中。
详细步骤
-
安装必要的库
首先,确保你已经安装了
requests
和BeautifulSoup
库。如果没有安装,可以使用以下命令进行安装:pip install requests beautifulsoup4
-
确定目标URL
以软科2023年中国最好大学排名为例,目标URL可能是:
https://www.shanghairanking.com/Best-Chinese-Universities-Rankings/2023.html
-
分析网页结构
打开目标网页,使用浏览器的开发者工具检查网页源代码,找到包含大学排名信息的HTML标签。通常,排名信息会被组织在表格(
<table>
)标签中。 -
发送HTTP请求并获取网页内容
使用
requests
库发送HTTP请求,获取网页内容:import requests url = 'https://www.shanghairanking.com/Best-Chinese-Universities-Rankings/2023.html' response = requests.get(url) response.encoding = 'utf-8' # 设置正确的编码 html_content = response.text
-
解析网页内容并提取数据
使用
BeautifulSoup
库解析HTML内容,提取排名数据:from bs4 import BeautifulSoup import pandas as pd soup = BeautifulSoup(html_content, 'html.parser') # 假设排名数据在id为'ranking-table'的表格中 table = soup.find('table', {'id': 'ranking-table'}) # 提取表头 headers = [header.text.strip() for header in table.find_all('th')] # 提取每一行的数据 rows = [] for row in table.find_all('tr')[1:]: # 跳过表头行 cells = row.find_all('td') row_data = [cell.text.strip() for cell in cells] rows.append(row_data) # 将数据转换为DataFrame df = pd.DataFrame(rows, columns=headers)
-
存储数据
将提取的数据保存到CSV文件中:
df.to_csv('soft_science_ranking_2023.csv', index=False, encoding='utf-8-sig')
完整代码示例
import requests
from bs4 import BeautifulSoup
import pandas as pd
# 目标URL
url = 'https://www.shanghairanking.com/Best-Chinese-Universities-Rankings/2023.html'
# 发送HTTP请求
response = requests.get(url)
response.encoding = 'utf-8' # 设置正确的编码
html_content = response.text
# 解析HTML内容
soup = BeautifulSoup(html_content, 'html.parser')
# 假设排名数据在id为'ranking-table'的表格中
table = soup.find('table', {'id': 'ranking-table'}) # 根据实际情况调整
# 提取表头
headers = [header.text.strip() for header in table.find_all('th')]
# 提取每一行的数据
rows = []
for row in table.find_all('tr')[1:]: # 跳过表头行
cells = row.find_all('td')
row_data = [cell.text.strip() for cell in cells]
rows.append(row_data)
# 将数据转换为DataFrame
df = pd.DataFrame(rows, columns=headers)
# 存储数据到CSV文件
df.to_csv('soft_science_ranking_2023.csv', index=False, encoding='utf-8-sig')
注意事项
- 网页结构变化:网页结构可能会发生变化,导致代码失效。因此,建议定期检查并更新代码。
- 反爬虫机制:部分网站有反爬虫机制,可能需要添加一些伪装(如设置请求头)来绕过。
- 合法性:确保你的爬虫行为符合相关法律法规和网站的使用条款。
通过以上步骤,你可以成功爬取软科大学排名的数据,并进行后续的分析和处理。希望这篇文章对你有所帮助!
如果你正在学习Python,那么你需要的话可以,点击这里👉Python重磅福利:入门&进阶全套学习资料、电子书、软件包、项目源码等等免费分享!或扫描下方CSDN官方微信二维码获娶Python入门&进阶全套学习资料、电子书、软件包、项目源码