在本指南中,我们将抓取互联网最大的百科全书维基百科。无论您是学术研究员、内容创建者、数据科学家,还是只是对如何构建维基百科抓取工具感到好奇,本教程都适合您。

我们将为您提供有关如何使用 Python 从维基百科提取数据的分步说明,Python 是一种流行的编程语言,以其简单性和多功能性而闻名。此外,我们还将向您介绍 Crawlbase 的 Crawling API,这是一个功能强大的工具,可以简化抓取过程并使其更加高效。

在本教程结束时,您将拥有为各种项目轻松提取维基百科并从其文章中收集信息的技能和知识。让我们开始。

目录

I. 从维基百科抓取数据的最佳方法是什么?

二.项目范围

三.先决条件

四.安装依赖项

五、如何从维基百科中提取 HTML

  • 第1步:导入Crawlbase库
  • 步骤 2:定义 crChoosing an Endpointawl 函数
  • 第三步:初始化CrawlingAPI对象
  • 第 4 步:发出 GET 请求
  • 步骤5:检查响应状态码
  • 第 6 步:提取并打印 HTML 内容
  • 第 7 步:处理错误
  • 第8步:主要功能
  • 第 9 步:指定 Wikipedia 页面 URL 和 API 令牌
  • 第10步:调用爬取函数

六.如何抓取维基百科

  • 第 1 步:导入库
  • 第二步:初始化爬取API
  • 第三步:抓取维基百科页面标题
  • 第 4 步:抓取 Nickname 属性
  • 第五步:剥夺公民财产
  • 第 6 步:抓取图像
  • 第7步:抓取个人资料标题
  • 第 8 步:完成代码

七、 结论

八. 经常问的问题

一、提取维基百科的最佳方法是什么?

维基百科成立于 2001 年,是由全球志愿者维护的免费在线百科全书。截至 4.3 年 2023 月,它的全球独立访问者数量接近 XNUMX 亿,成为各种主题信息的重要资源。维基百科由维基媒体基金会运营,允许开放协作和民主化知识共享,使其成为全球用户的重要平台。

维基百科 2024 年访问量

来源

维基百科抓取可以通过多种方法实现,每种方法都有自己的优点。以下是一些有效的方法:

  1. 蜜蜂: 维基百科提供了 MediaWiki API,允许以编程方式访问大量维基百科内容。虽然此 API 允许检索特定数据集,但它可能有其局限性。在本教程中,我们将探索另一种类型的 API,即爬行 API,它可以提高数据提取的效率和灵活性。
  2. 网页搜罗: 使用 BeautifulSoup(适用于 Python)、Scrapy 或 Cheerio(适用于 Node.js)等库,您可以直接抓取 Wikipedia 页面。请谨慎遵守维基百科的 robots.txt 文件,并避免因过多的请求而导致服务器过载。稍后在本博客中,我们将把 BeautifulSoup 与 Crawling API 结合起来,以实现抓取 Wikipedia 页面的最有效方法。
  3. 数据库转储: 维基百科定期发布完整的 数据库转储 包含其全部内容。尽管这些转储可能很大并且需要专门的软件进行解析,但它们提供了对维基百科数据的全面访问。
  4. 第三方数据集: 这里有 第三方数据集 已从维基百科提取并格式化数据。这些数据集对于特定用例可能有益,但验证其准确性和可靠性至关重要。

使用抓取的数据时,正确地确定来源非常重要。此外,请考虑您的抓取活动对维基百科服务器的影响,并确保遵守其使用政策。

二.项目范围

本教程的目标是开发一个基于 Python 的维基百科抓取工具,以从维基百科页面提取数据。我们的项目范围包括利用 BeautifulSoup 库进行 HTML 解析和集成 Crawlbase 爬取 API 以实现高效的数据提取。我们将介绍从维基百科页面抓取各种元素,例如页面标题、昵称、公民身份详细信息、图像和个人资料标题。

该项目的关键组成部分包括:

  1. HTML 抓取: 我们将利用 Python 和 Crawlbase Crawling API 从维基百科页面提取完整的 HTML 内容,确保高效的数据检索,同时尊重维基百科的使用政策。

我们将瞄准 这个URL 对于这个项目。

埃隆·马斯克维基百科
  1. 维基百科抓取: 我们的重点是借助 BeautifulSoup (Python) 从维基百科页面中提取特定数据元素,包括 标题, 昵称, 公民身份详细信息, 图片个人资料标题.

  2. 错误处理: 我们将解决抓取过程中的错误处理问题,为数据提取过程中遇到的常见问题提供指南和故障排除提示。

现在这已经清楚了,让我们继续了解该项目的先决条件。

三.先决条件

在深入研究我们的网络抓取项目以使用 Python 抓取维基百科之前,您应该考虑一些先决条件:

  1. Python基础知识: 熟悉 Python 编程语言对于理解本教程中介绍的代码示例和概念至关重要。如果您是 Python 新手,请考虑阅读介绍性内容 Python教程 或掌握基础知识的课程。

  2. 具有 API 凭证的活动 Crawlbase API 帐户: 要以编程方式高效地访问维基百科页面,您需要在 Crawlbase 上拥有一个活跃帐户并获取 API 凭据。

通过启动 报名 让 Crawlbase 抓取 API 获得免费的 1,000 个请求并从以下位置获取您的 API 凭据 账户文件。对于这个特定的项目,我们将利用 普通请求令牌.

Crawlbase 帐户文档
  1. Python 安装在您的开发机器上: 确保您的本地开发计算机上安装了 Python。您可以从官方下载并安装Python Python网站 基于您的操作系统。此外,请确保安装了 pip(Python 包管理器),它通常默认包含在 Python 安装中。

满足这些先决条件后,您就可以开始使用 Python 进行网络抓取维基百科页面的旅程了。在接下来的部分中,我们将逐步指导您完成整个过程,从设置环境到有效提取和处理数据。让我们继续这个项目吧!

四.安装依赖项

如果您的系统上尚未安装Python,您可以从官方下载并安装最新版本 Python网站.

软件包安装:

  1. 打开命令提示符或终端:
  • 对于 Windows 用户:按 Win + R,类型 cmd,然后按Enter键。
  • 对于 macOS/Linux 用户:打开终端应用程序。
  1. 为您的 Python Scraper 创建一个目录:
  • 导航到要存储 Python scraper 项目的目录。
  1. 安装必要的库:
  • 使用以下命令安装所需的 Python 库:
1
2
3
点安装爬虫库
点安装beautifulsoup4
pip 安装熊猫

关于图书馆:

  • 熊猫: 熊猫 是一个流行的开源 Python 库,用于数据操作和分析。它提供了强大的数据结构和功能,旨在使结构化或表格数据的处理无缝且高效。 Pandas 中的主要数据结构是 DataFrame,它是类似于电子表格或 SQL 表的二维标记数据结构。
  • 爬行基地: Crawlbase Python 库 简化了 Crawling API 的集成,我们将利用它从网站(包括维基百科页面)获取 HTML 内容。通过利用 Crawlbase Python 库,我们可以简化检索数据的过程,从而为我们的项目实现高效的网络抓取操作。
  • 美丽汤: 美丽汤 是一个流行的 Python 库,用于网络抓取和解析 HTML 和 XML 文档。它提供了一种通过浏览 HTML 结构并搜索特定标签、属性或文本内容来从网页提取数据的便捷方法。

设置您的开发环境:

要开始对网络抓取工具进行编码,请打开您喜欢的文本编辑器或集成开发环境 (IDE)。您可以使用您选择的任何 IDE,例如 PyCharm, VS代码Jupyter笔记本.

创建一个新的 Python 文件: 打开 IDE 并创建一个新的 Python 文件。让我们命名它 wikipedia_scraper.py 对于这个例子。该文件将作为我们的抓取脚本。

现在您已经安装了 Python 并设置了必要的库,您就可以开始编写网络抓取工具以从维基百科页面提取数据了。让我们继续构建抓取脚本!

五、如何从维基百科中提取 HTML

为了从维基百科网页提取完整的 HTML 源代码,我们将利用 Crawlbase 包发出请求并检索 HTML 内容。下面是编写代码的步骤:

第1步:导入Crawlbase库

1
 爬行基地 进口 抓取API
  • 该行导入 CrawlingAPI 班级从 crawlbase 库,它允许我们向 Crawlbase API 发出请求以执行网络爬行和抓取任务。

第 2 步:定义 crawl 功能

1
DEF (page_url、api_token):
  • 这个函数,名为 crawl,有两个参数: page_url (要抓取的维基百科页面的 URL)和 api_token (访问 Crawlbase API 所需的 API 令牌)。

第三步:初始化CrawlingAPI对象

1
api = 爬行API({'令牌': api_token})
  • 在这里,我们创建了一个实例 CrawlingAPI 类,将 API 令牌作为参数传递,以验证我们对 Crawlbase API 的请求。

第 4 步:发出 GET 请求

1
响应 = api.get(page_url)
  • 该行发送 GET 请求到指定的 page_url 使用 get api 对象的方法。它检索维基百科页面的 HTML 内容。

步骤5:检查响应状态码

1
if 回复['状态代码'] == 200:
  • 我们检查响应状态代码是否为 200,表明请求成功并且 HTML 内容已检索且没有任何错误。

第 6 步:提取并打印 HTML 内容

1
打印(f'{回复[“身体”]}')
  • 如果请求成功,我们将打印维基百科页面的 HTML 内容。 HTML 内容存储在 response 字典下的键 'body'.

第 7 步:处理错误

1
2
其他:
打印(f“错误: {回复}")
  • 如果请求失败(即,如果响应状态代码不是 200),我们将打印一条错误消息以及响应详细信息。

第8步:主要功能

1
if __名字__ == “__主要的__”:
  • 该代码块确保仅当直接运行脚本(不作为模块导入)时才执行以下代码。

第 9 步:指定 Wikipedia 页面 URL 和 API 令牌

1
2
页面网址 = 'https://en.wikipedia.org/wiki/Elon_Musk'
api_令牌= 'Crawlbase_Token'
  • 在这里,我们指定要抓取的维基百科页面的 URL(page_url)以及访问 Crawlbase API 所需的 API 令牌(api_token)。确保将 Crawlbase_Token 替换为您的实际 Crawling API 普通请求令牌.

第 10 步:调用 crawl 功能

1
抓取(page_url,api_token)
  • 最后,我们称 crawl 函数,传递 page_urlapi_token 作为启动抓取过程的参数。

这是完整的 Python 代码片段,您可以将其复制并粘贴到您的 wikipedia_scraper.py 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 爬行基地 进口 抓取API

DEF (page_url、api_token):
# 使用您的令牌初始化 CrawlingAPI 对象
api = 爬行API({'令牌': api_token})

# 获取页面内容
响应 = api.get(page_url)

# 检查请求是否成功
if 回复['状态代码'] == 200:
# 提取数据
打印(f'{回复[“身体”]}')
其他:
打印(f“错误: {回复}")

if __名字__ == “__主要的__”:
# 指定要抓取的维基百科页面 URL
页面网址 = 'https://en.wikipedia.org/wiki/Elon_Musk'

# 指定您的 Crawlbase API 令牌
api_令牌= 'Crawlbase_Token'

# 调用爬取函数
抓取(page_url,api_token)

现在让我们执行上面的代码片段。要运行它,我们需要执行以下命令:

1
python wikipedia_scraper.py

执行后,该脚本将向指定的维基百科页面 URL('https://en.wikipedia.org/wiki/Elon_Musk')使用提供的 Crawlbase API 令牌。如果请求成功,就会打印页面的HTML内容。否则,它将显示错误消息。

输出将是维基百科页面的 HTML 内容,然后可以对其进行进一步解析和处理以提取感兴趣的特定数据。

从维基百科爬取的html

六.如何抓取维基百科

要使用 BeautifulSoup 从维基百科抓取内容,我们需要导入必要的库并定义函数来处理抓取过程。我们可以这样继续:

第 1 步:导入库

我们需要导入 CrawlingAPI 班级从 crawlbase 用于向 Crawlbase API 发出请求的模块。此外,我们将导入 BeautifulSoup 来自 bs4 用于解析 HTML 的 (BeautifulSoup) 模块,以及 pandas 用于创建和操作数据框。

1
2
3
 爬行基地 进口 抓取API
bs4 进口 美丽汤
进口 大熊猫 as pd

第二步:初始化爬取API

我们将定义一个名为 crawl 初始化CrawlingAPI对象,使用API​​获取网页内容,并处理抓取过程。

我们还将定义一个名为的函数 scrape_data 使用 BeautifulSoup 从网页的 HTML 内容中提取特定信息。

最后,我们将指定要抓取的维基百科页面 URL、Crawlbase API 令牌,并调用 crawl 函数来启动抓取过程。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
DEF (page_url、api_token):
# 使用您的令牌初始化 CrawlingAPI 对象
api = 爬行API({'令牌': api_token})

# 获取页面内容
响应 = api.get(page_url)

# 检查请求是否成功
if 回复['状态代码'] == 200:
# 抓取数据
scraped_data = scrape_data(响应)

csv_文件名 = '维基百科.csv'
df = pd.DataFrame([scraped_data])
df.to_csv(csv_文件名,索引=)
其他:
打印(f“错误: {回复}")

if __名字__ == “__主要的__”:
# 指定要抓取的维基百科页面 URL
页面网址 = 'https://en.wikipedia.org/wiki/Elon_Musk'

# 指定您的 Crawlbase API 令牌
api_令牌= 'Crawlbase_Token'

# 调用爬取函数
抓取(page_url,api_token)

第 3 步:抓取维基百科页面标题

在 HTML 源代码中,找到表示标题的部分或容器。这通常涉及使用浏览器开发人员工具检查网页的结构或查看页面源。

如何抓取维基百科页面标题

利用 BeautifulSoup 选择器来定位网页中的标题元素。这涉及指定与所需元素匹配的适当类。

1
标题=汤.find('h1', id='第一个标题').get_text(条=True)

这行代码查找第一次出现的 <h1> 变量 soup 中存储的 HTML 内容中 ID 为“firstHeading”的元素。然后,它提取该元素内的文本,并使用以下命令删除任何多余的空格或换行符: get_text(strip=True) 方法。最后,它将清理后的文本分配给变量 title.

第 4 步:抓取 Wikipedia 昵称属性

如何抓取维基百科昵称属性
1
昵称=汤.find('div', 类_='昵称').get_text(条=)

此代码查找 HTML 元素 <div> 解析后的 H​​TML 文档中的 CSS 类“昵称”由变量 soup 表示。然后,它提取该元素的文本内容,删除文本前后的任何额外空白字符,并将其分配给变量 nick_name.

第5步:抓取维基百科公民身份财产

如何窃取维基百科公民财产
1
公民身份 = soup.select_one('.infobox-data .plainlist').text.strip().replace('\n', ',')

上面的代码在由变量 soup 表示的已解析 HTML 文档中搜索具有类“infobox-data”和“plainlist”的 HTML 元素。它选择第一个匹配元素并提取其文本内容。然后,它删除所有前导或尾随空白字符,并用逗号替换换行符。生成的文本表示公民身份信息并分配给变量公民身份。

第 6 步:抓取维基百科图像

如何抓取维基百科图像
1
image_src = soup.select_one('.mw-文件描述 .mw-文件-元素')['源代码']

此代码片段在由变量 soup 表示的已解析 HTML 文档中搜索同时具有类“mw-file-description”和“mw-file-element”的 HTML 元素。它选择第一个匹配元素并检索“src”属性的值,该属性通常包含图像的 URL。然后将 URL 分配给变量 image_src.

第7步:抓取维基百科个人资料标题

如何抓取维基百科个人资料标题
1
profile_title = soup.select_one('.infobox-data.title').text.strip().replace('\n', ',')

此代码在由变量 soup 表示的已解析 HTML 文档中搜索具有类“infobox-data”和“title”的 HTML 元素。它选择第一个匹配元素并检索文本内容。然后,它使用删除任何前导或尾随空格 strip() 并替换换行符 ('\n') 带逗号 (',')。最后,它将修改后的文本分配给变量 profile_title.

第 8 步:完成代码

将所有内容放在一起,您的代码应该如下所示。请随意复制并将其保存到本地计算机:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 爬行基地 进口 抓取API
bs4 进口 美丽汤

DEF (page_url、api_token):
# 使用您的令牌初始化 CrawlingAPI 对象
api = 爬行API({'令牌': api_token})

# 获取页面内容
响应 = api.get(page_url)

# 检查请求是否成功
if 回复['状态代码'] == 200:
# 抓取的数据
scraped_data = scrape_data(响应)

打印(f'{抓取数据}')
其他:
打印(f“错误: {回复}")

DEF 抓取数据(响应):
尝试:
# 使用 Beautiful Soup 解析 HTML 内容
汤 = BeautifulSoup(响应['身体'], 'html.parser')

# 提取维基百科页面的标题
标题=汤.find('h1', id='第一个标题').get_text(条=)

昵称=汤.find('div', 类_='昵称').get_text(条=)

公民身份 = soup.select_one('.infobox-data .plainlist').text.strip().replace('\n', ',')

# 提取图像源
image_src = soup.select_one('.mw-文件描述 .mw-文件-元素')['源代码']

profile_title = soup.select_one('.infobox-data.title').text.strip().replace('\n', ',')

回报 {
'标题': 标题,
'昵称': 昵称,
'国籍':公民身份,
'图片':图像源,
'个人资料标题': 个人资料标题
}
特殊课程 as e:
打印(f“发生错误: {e}")
回报 {}

if __名字__ == “__主要的__”:
# 指定要抓取的维基百科页面 URL
页面网址 = 'https://en.wikipedia.org/wiki/Elon_Musk'

# 指定您的 Crawlbase API 令牌
api_令牌= 'Crawlbase_Token'

# 调用爬取函数
抓取(page_url,api_token)

使用命令执行代码 python wikipedia_scraper.py 应提供类似的输出,如下所示:

从维基百科上抓取的数据

七、 结论

总之,本教程提供了有关使用 Python、BeautifulSoup 和 Crawlbase 库从 Wikipedia 抓取数据的全面指南。它涵盖了各个方面,包括抓取 HTML 内容、提取特定数据,例如页面标题、昵称、公民身份信息和维基百科页面的图像。

本教程中提供的代码可以免费使用。我们鼓励您修改和调整适合您的项目的代码。此外,这里演示的技术可以应用于从其他网站抓取数据,为网络抓取任务提供一种通用的方法。

我们希望本教程能够为任何想要学习维基百科抓取或其他在线资源以进行分析、研究或其他目的的人提供宝贵的资源。

如果您想查看更多此类项目,我们建议您浏览以下页面:

如何刮取三星产品

如何抓取谷歌学术搜索结果

从 Zillow 抓取房地产数据

如果您对 Crawlbase 或本文有疑问,请 联系我们的支持团队.

八. 经常问的问题

抓取维基百科通常是合法的,但有一些因素需要考虑。虽然维基百科的内容通常根据知识共享许可获得许可,允许在适当的归属下进行某些用途,但必须审查并遵守其使用条款,包括对自动访问的任何限制。

建议咨询法律专家或直接从维基百科寻求澄清,以确保遵守适用的法律和法规。这有助于减轻与网络抓取活动相关的潜在法律问题的风险。

问:是否可以使用不同的编程语言来抓取维基百科?

是的,除了 Python 之外,还可以使用各种编程语言来抓取维基百科。 Wikipedia 提供了一个 API,例如 MediaWiki API,它允许以编程方式访问其内容。这意味着您可以使用支持 HTTP 请求和 JSON/XML 解析的不同编程语言与 API 交互并检索维基百科数据。

但是,具体细节可能会有所不同,具体取决于编程语言以及用于发出 HTTP 请求和处理 JSON/XML 数据的可用库或框架。

此外,网络抓取技术,例如使用 BeautifulSoup 等库解析 HTML,也可以应用于不同的编程语言,以直接提取维基百科数据。