本文将介绍如何用Python爬取中国大学排行榜,包括获取页面HTML、解析页面、存储数据等内容。
一、获取页面HTML
要爬取数据,首先需要获取页面HTML。这可以通过Python中的requests库实现:
import requests
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2021.html'
response = requests.get(url)
print(response.text)
上述代码中,我们首先需要指定要爬取的网址,这里使用了2021年的中国大学排行榜。接着使用requests库发送一个HTTP GET请求获取页面数据,最后使用response.text打印出获取到的HTML代码。
二、解析HTML页面
获取到页面HTML之后,接下来需要解析HTML,提取页面数据。这里我们使用BeautifulSoup库:
import requests
from bs4 import BeautifulSoup
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2021.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
print(soup)
上述代码中,我们导入了BeautifulSoup库,并传入了response.text和html.parser,将页面HTML代码转换成BeautifulSoup对象。这样我们就可以用BeautifulSoup提供的各种方法来提取页面中的数据了。
三、提取数据
根据页面结构,大学排名和大学名称都在表格中,所以我们可以通过提取表格数据的方式来获取排名信息。
import requests
from bs4 import BeautifulSoup
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2021.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table', {'class': 'tableList'})
rank_list = []
for tr in table.find_all('tr'):
rank_info = []
for td in tr.find_all('td'):
rank_info.append(td.text.strip())
if rank_info:
rank_list.append(rank_info)
print(rank_list)
上述代码中,我们首先使用find方法找到排名表格,并进一步使用find_all方法找到所有的行和单元格,使用strip方法去除空白符和换行符。最后将提取到的数据存储到rank_list中。
四、存储数据
得到了提取到的数据之后,我们可以将数据保存到本地文件或数据库中。
import requests
from bs4 import BeautifulSoup
import csv
url = 'http://www.zuihaodaxue.com/zuihaodaxuepaiming2021.html'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
table = soup.find('table', {'class': 'tableList'})
rank_list = []
for tr in table.find_all('tr'):
rank_info = []
for td in tr.find_all('td'):
rank_info.append(td.text.strip())
if rank_info:
rank_list.append(rank_info)
with open('university_rank.csv', 'w', newline='') as f:
writer = csv.writer(f)
writer.writerows(rank_list)
上述代码中,我们使用csv库将提取到的数据存储到CSV文件中。这里使用了open方法打开一个文件,传入'w'表示写入模式,传入newline=''表示不插入额外的换行符。然后使用csv.writer创建一个写入器对象,传入文件句柄和CSV格式参数。最后使用writerows方法将rank_list写入到CSV文件中。