您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用Python爬取中国大学排名网站排名信息
## 前言
在当今信息时代,教育数据的获取和分析变得越来越重要。中国大学排名是学生、家长和教育工作者关注的重要参考指标。本文将详细介绍如何使用Python爬取中国大学排名网站的排名信息,包括数据采集、解析、存储等完整流程。
## 一、准备工作
### 1.1 工具准备
- Python 3.6+
- Requests库(发送HTTP请求)
- BeautifulSoup4或lxml(HTML解析)
- Pandas(数据处理)
- 开发工具:PyCharm/VSCode/Jupyter Notebook
### 1.2 目标网站分析
以"软科中国大学排名"为例(实际使用时请遵守网站robots.txt规定):
https://www.shanghairanking.cn/rankings/bcur/2023
### 1.3 安装依赖库
```bash
pip install requests beautifulsoup4 pandas
import requests
url = "https://www.shanghairanking.cn/rankings/bcur/2023"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..."
}
response = requests.get(url, headers=headers)
print(response.status_code) # 检查请求状态
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
通过浏览器开发者工具(F12)检查元素:
- 排名表格通常位于<table>
或<div>
标签中
- 每所学校信息可能包含在<tr>
或<li>
标签中
universities = []
table = soup.find('table', {'class': 'rk-table'}) # 根据实际class调整
for row in table.find_all('tr')[1:]: # 跳过表头
cols = row.find_all('td')
if len(cols) > 3:
rank = cols[0].text.strip()
name = cols[1].text.strip()
score = cols[2].text.strip()
universities.append({
'排名': rank,
'学校名称': name,
'总分': score
})
base_url = "https://example.com/rankings?page={}"
for page in range(1, 6): # 假设有5页
url = base_url.format(page)
response = requests.get(url, headers=headers)
# 解析逻辑...
import pandas as pd
df = pd.DataFrame(universities)
df.to_csv('university_ranking.csv', index=False, encoding='utf_8_sig')
import pymysql
conn = pymysql.connect(host='localhost', user='root', password='123456', database='rankings')
cursor = conn.cursor()
create_table = """
CREATE TABLE IF NOT EXISTS universities (
id INT AUTO_INCREMENT PRIMARY KEY,
rank INT,
name VARCHAR(100),
score FLOAT
)
"""
cursor.execute(create_table)
for uni in universities:
insert_sql = f"INSERT INTO universities (rank, name, score) VALUES ({uni['排名']}, '{uni['学校名称']}', {uni['总分']})"
cursor.execute(insert_sql)
conn.commit()
conn.close()
当数据通过AJAX加载时,可能需要:
import json
ajax_url = "https://example.com/api/rankings"
params = {"year": 2023, "type": "main"}
response = requests.get(ajax_url, params=params)
data = json.loads(response.text)
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)
driver.get("https://example.com/dynamic-page")
html = driver.page_source
# 后续解析...
driver.quit()
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
proxies = {
'http': 'http://10.10.1.10:3128',
'https': 'http://10.10.1.10:1080',
}
requests.get(url, proxies=proxies)
import time
time.sleep(random.uniform(1, 3))
import requests
from bs4 import BeautifulSoup
import pandas as pd
import random
import time
def get_rankings(year=2023):
url = f"https://www.shanghairanking.cn/rankings/bcur/{year}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
universities = []
table = soup.find('table', {'class': 'rk-table'})
for row in table.find_all('tr')[1:]:
cols = row.find_all('td')
if len(cols) > 3:
universities.append({
'年份': year,
'排名': cols[0].text.strip(),
'学校代码': cols[1].text.strip(),
'学校名称': cols[2].text.strip(),
'省份': cols[3].text.strip(),
'总分': cols[4].text.strip()
})
df = pd.DataFrame(universities)
df.to_csv(f'university_ranking_{year}.csv', index=False, encoding='utf_8_sig')
print(f"成功获取{year}年排名数据!")
except Exception as e:
print(f"获取数据失败: {e}")
if __name__ == '__main__':
for year in range(2019, 2024):
get_rankings(year)
time.sleep(random.uniform(2, 5))
本文详细介绍了使用Python爬取大学排名数据的完整流程。实际应用中,请根据目标网站的具体结构调整代码,并始终遵守网络爬虫道德规范。通过掌握这些技术,你可以轻松获取各种公开教育数据,为学习和研究提供数据支持。
注意:本文示例代码仅供参考,实际使用时请替换为目标网站的真实URL和正确的HTML元素选择器。部分网站可能有反爬机制,建议在合法合规的前提下进行数据采集。 “`
这篇文章共计约1900字,包含了从基础到进阶的完整爬虫实现流程,采用Markdown格式编写,可以直接用于技术博客或文档分享。实际应用时请确保遵守相关网站的使用条款。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。