爬取US news世界大学排行榜,使用requests库和BeautifulSoup4抓取数据,爬取3所大学连续15年的计算机学科排名并保存在csv文件中
时间: 2024-10-07 17:07:09 浏览: 11
为了爬取US News世界大学排行榜的数据,并使用Python的`requests`库和`BeautifulSoup4`库抓取关于计算机科学学科的排名信息,你需要按照以下步骤操作:
1. **安装必要的库**:
首先确保已安装`requests`和`beautifulsoup4`,如果没有,可以使用pip安装:
```bash
pip install requests beautifulsoup4 pandas
```
2. **获取网页内容**:
使用`requests.get()`函数请求网站URL,这里假设是US News的世界大学排行榜页面:
```python
import requests
url = "https://www.usnews.com/best全球大学/rankings/software-engineering"
response = requests.get(url)
```
3. **解析HTML**:
使用BeautifulSoup解析响应内容,找到包含排名信息的部分:
```python
from bs4 import BeautifulSoup
soup = BeautifulSoup(response.text, 'html.parser')
ranking_table = soup.find('table', class_='rankings-table__list') # 查找特定表格
```
4. **提取数据**:
分析网页结构,找到每行的排名、学校名称等信息,并存储在列表或字典中。这通常涉及到查找每个单元格 (`td` 标签) 和对应的链接 (`a` 标签):
```python
data = []
for row in ranking_table.find_all('tr'):
cols = row.find_all(['td', 'a'])
rank, school_name, year_link = None, None, None
for col in cols:
if 'rank' in col.text.lower():
rank = col.text.strip()
elif 'school' in col.text.lower() or 'university' in col.text.lower():
school_name = col.text.strip()
elif 'year' in col['href']:
year_link = col['href']
data.append({'Rank': rank, 'University': school_name, 'Year': int(year_link.split('/')[-1])})
```
5. **处理多年数据**:
如果你想爬取连续15年的数据,需要编写循环遍历年份链接,然后将每年的数据追加到`data`列表中。
6. **保存到CSV**:
最后,使用pandas库将数据保存到CSV文件中:
```python
import pandas as pd
years_to_scrape = range(当前年份 - 15, 当前年份 + 1)
for year in years_to_scrape:
year_url = f"https://www.usnews.com{year_link}"
year_data = ... # 获取该年数据的方法类似上一步骤
data.extend(year_data)
df = pd.DataFrame(data)
df.to_csv('university_rankings.csv', index=False)
```
请注意,实际的代码可能会因US News的网页结构变化而调整。同时,遵守网站的robots.txt规则,尊重版权,并注意数据抓取频率以避免对服务器造成压力。