在文章开始之前,推荐一篇值得阅读的好文章!感兴趣的也可以去看一下,并关注作者!
今日推荐:Elasticsearch 重建索引 数据迁移
文章链接:https://cloud.tencent.com/developer/article/2472469
通过这篇文章,你将能够深入了解并介绍了重建索引的整体处理流程可以概括为以下几个步骤:首先,创建一个新的临时索引;接着,将原始索引中的数据逐步迁移至这个临时索引中;然后,删除原有的索引;随后,重新创建一个与原始索引结构相同的索引;最后,将临时索引中的数据迁回至新创建的索引中。通过这一系列操作,我们便能够顺利完成索引的重建工作。
随着网络技术的发展,数据抓取已经成为我们日常工作的一部分,尤其是在需要获取大量信息时,爬虫技术显得尤为重要。在这篇文章中,我们将学习如何爬取全国高校名单,获取各高校的基本信息,并将其保存到本地。无论你是数据分析师,还是想了解全国高校的分布情况,本篇文章都会为你提供一个完整的爬虫示范。
在开始爬取全国高校名单之前,你需要配置好相关的开发环境。我们将使用 Python 作为编程语言,主要用到以下几个库:
安装这些库的命令如下:
pip install requests beautifulsoup4 pandas
要获取全国高校的名单,我们可以选择一个包含全国高校列表的开放网站。比如,你可以选择一个高等教育相关的门户网站,如 2024中国大学排名 或其他公开高校信息的站点。
在写爬虫之前,我们需要分析目标网页的结构,确定如何提取所需的信息。通常,我们会打开浏览器,右键网页并选择“查看网页源代码”,来了解各个元素的 HTML 标签及其结构。通过使用浏览器的开发者工具,我们可以定位到包含高校信息的部分。
例如,假设我们找到了一个包含高校名称、所在省份等信息的表格,接下来我们就可以开始写爬虫了。
首先,我们需要导入爬虫所需的库。代码如下:
import requests
from bs4 import BeautifulSoup
import pandas as pd
使用 requests
获取网页的 HTML 内容:
# 目标网站的URL
url = "https://www.shanghairanking.cn/rankings/bcur/2024"
# 模拟浏览器请求头,避免被反爬机制封禁
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# 发送请求获取页面内容
response = requests.get(url, headers=headers)
response.encoding = 'utf-8' # 确保中文显示正确
接下来,我们将使用 BeautifulSoup
对网页进行解析,从中提取出高校名称、地址等信息。假设高校名单在网页的一个表格中,代码如下:
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 提取所有的排名信息(假设每个排名信息都在<tr>标签中)
universities = soup.find_all('tr', {'data-v-68a1907c': True})
# 创建一个列表存储提取的数据
university_list = []
# 遍历所有大学排名信息
for university in universities:
# 初始化变量
rank = None
univname_cn = None
univname_en = None
location = None
score = None
# 获取排名
rank_tag = university.find('div', class_='ranking')
if rank_tag:
rank = rank_tag.get_text(strip=True)
# 获取大学名称(中文和英文)
univname_cn_tag = university.find('span', class_='name-cn')
univname_en_tag = university.find('span', class_='name-en')
if univname_cn_tag and univname_en_tag:
univname_cn = univname_cn_tag.get_text(strip=True)
univname_en = univname_en_tag.get_text(strip=True)
# 获取所有<td>元素并确保有足够数量
td_elements = university.find_all('td')
if len(td_elements) > 2:
location = td_elements[2].get_text(strip=True) # 获取第三个<td>元素
if len(td_elements) > 4:
score = td_elements[4].get_text(strip=True) # 获取第五个<td>元素
# 创建字典保存数据
university_data = {
'Rank': rank,
'Chinese Name': univname_cn,
'English Name': univname_en,
'Location': location,
'Score': score
}
# 将数据添加到列表
university_list.append(university_data)
我们将数据存储到 pandas
的 DataFrame
中,便于后续处理或导出到 Excel 文件。
# 定义CSV文件路径
csv_file = "university_rankings.csv"
# 将数据保存到CSV文件
with open(csv_file, mode='w', newline='', encoding='utf-8-sig') as file:
writer = csv.DictWriter(file, fieldnames=['Rank', 'Chinese Name', 'English Name', 'Location', 'Score'])
writer.writeheader() # 写入表头
for university in university_list:
writer.writerow(university) # 写入每一行数据
print(f"Data has been saved to {csv_file}")
在实际爬取过程中,可能会遇到一些挑战。以下是一些常见问题和优化建议:
下图是完整的源码信息
import requests
from bs4 import BeautifulSoup
import csv
# 目标网站的URL
url = "https://www.shanghairanking.cn/rankings/bcur/2024"
# 模拟浏览器请求头,避免被反爬机制封禁
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
# 发送请求获取页面内容
response = requests.get(url, headers=headers)
response.encoding = 'utf-8' # 确保中文显示正确
# 使用BeautifulSoup解析HTML
soup = BeautifulSoup(response.text, 'html.parser')
# 提取所有的排名信息(假设每个排名信息都在<tr>标签中)
universities = soup.find_all('tr', {'data-v-68a1907c': True})
# 创建一个列表存储提取的数据
university_list = []
# 遍历所有大学排名信息
for university in universities:
# 初始化变量
rank = None
univname_cn = None
univname_en = None
location = None
score = None
# 获取排名
rank_tag = university.find('div', class_='ranking')
if rank_tag:
rank = rank_tag.get_text(strip=True)
# 获取大学名称(中文和英文)
univname_cn_tag = university.find('span', class_='name-cn')
univname_en_tag = university.find('span', class_='name-en')
if univname_cn_tag and univname_en_tag:
univname_cn = univname_cn_tag.get_text(strip=True)
univname_en = univname_en_tag.get_text(strip=True)
# 获取所有<td>元素并确保有足够数量
td_elements = university.find_all('td')
if len(td_elements) > 2:
location = td_elements[2].get_text(strip=True) # 获取第三个<td>元素
if len(td_elements) > 4:
score = td_elements[4].get_text(strip=True) # 获取第五个<td>元素
# 创建字典保存数据
university_data = {
'Rank': rank,
'Chinese Name': univname_cn,
'English Name': univname_en,
'Location': location,
'Score': score
}
# 将数据添加到列表
university_list.append(university_data)
# 定义CSV文件路径
csv_file = "university_rankings.csv"
# 将数据保存到CSV文件
with open(csv_file, mode='w', newline='', encoding='utf-8-sig') as file:
writer = csv.DictWriter(file, fieldnames=['Rank', 'Chinese Name', 'English Name', 'Location', 'Score'])
writer.writeheader() # 写入表头
for university in university_list:
writer.writerow(university) # 写入每一行数据
print(f"Data has been saved to {csv_file}")
运行效果
本文介绍了如何通过 Python 爬虫爬取全国高校名单,并将数据保存为 CSV 文件。我们利用了 requests
获取网页内容,BeautifulSoup
解析 HTML,最后用 pandas
存储和处理数据。希望通过这篇博客,你能掌握基础的爬虫技能,并能够应用到其他项目中去。
如果你对爬虫开发、数据处理或者其他相关内容有更多的兴趣,欢迎关注我的博客,获取更多有趣的技术分享!
片转存中...(img-w016goPj-1732600097808)]
本文介绍了如何通过 Python 爬虫爬取全国高校名单,并将数据保存为 CSV 文件。我们利用了 requests
获取网页内容,BeautifulSoup
解析 HTML,最后用 pandas
存储和处理数据。希望通过这篇博客,你能掌握基础的爬虫技能,并能够应用到其他项目中去。
如果你对爬虫开发、数据处理或者其他相关内容有更多的兴趣,欢迎关注我的博客,获取更多有趣的技术分享!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。