返回博客
指南
Andrei OgiolanLast updated on Mar 31, 20262 min read

了解如何使用 Python 抓取 HTML 表格

了解如何使用 Python 抓取 HTML 表格

简介

网络爬虫是一种强大的工具,它允许您从网站中提取数据,并将其用于各种目的,例如数据挖掘、数据分析和机器学习。 网页抓取中的一项常见任务是从 HTML 表格中提取数据。这类表格常见于各类网站,用于以结构化的表格形式呈现数据。本文将指导您如何使用 Python 从 HTML 表格中抓取数据,并将其存储为便于处理和分析的格式。

读完本文后,您将掌握构建自定义网络爬虫所需的技能和知识,该爬虫能够从 HTML 表格中提取数据并将其用于多种用途。无论您是希望为下一个项目收集数据的数据科学家、希望为市场调研收集数据的企业主,还是希望构建自己的网络爬虫工具的开发者,本文都将为您提供使用 Python 开始进行 HTML 表格爬取的宝贵资源。

什么是 HTML 表格?

HTML表格是HTML(超文本标记语言)中的一种元素,用于在网页上呈现表格数据。一个HTML表格由行和列组成的单元格构成,这些单元格可以包含文本、图片或其他HTML元素。HTML表格通过table元素创建,其结构由‘<tr>’(表格行)、‘<td>(表格单元格)、‘<th>’(表格标题)、‘<caption>’、‘<col>’、‘<colgroup>’、‘<tbody>’(表格主体)、‘<thead>’(表格页眉)以及‘<tfoot>’(表格页脚)等元素构建。现在让我们逐一详细探讨:

  • table 元素:定义 HTML 表格的起始和结束。
  • tr(表格行)元素:定义 HTML 表格中的一行。
  • td(表格单元格)元素:定义 HTML 表格中的一个单元格。
  • th(表格标题)元素:定义 HTML 表格中的标题单元格。标题单元格默认以粗体居中显示,用于标注表格的行或列。
  • caption 元素:定义 HTML 表格的标题。标题通常显示在表格上方或下方。
  • col 和 colgroup 元素:定义 HTML 表格中列的属性,例如宽度或对齐方式。
  • tbody、thead 和 tfoot 元素:分别定义 HTML 表格的主体、表头和表尾部分。这些元素可用于对行进行分组,并为表格的特定部分应用样式或属性。

为了更好地理解这一概念,让我们看看 HTML 表格的样式:

乍看之下,这似乎是一个普通的表格,我们无法看到上述元素构成的结构。这并不意味着它们不存在,而是浏览器已经为我们解析了这些内容。若要查看 HTML 结构,您需要深入一步,使用开发者工具。 操作方法如下:右键点击页面,选择“检查”,点击“选择元素”工具,然后点击您想查看其 HTML 结构的元素(本例中为 table)。完成这些步骤后,您应该会看到类似以下内容:

HTML表格常用于以结构化、表格化的形式呈现数据,例如整理结果或展示数据库内容。它们广泛存在于各类网站中,也是从网页抓取数据时需要重点考虑的元素。

环境搭建

在开始从 HTML 表格中抓取数据之前,我们需要配置环境,并确保已安装所有必要的工具和库。第一步是确认您的计算机上已安装 Python。若尚未安装,可从 Python 官方网站 (https://www.python.org/) 下载并按照说明进行安装。

接下来,我们需要安装一些有助于从 HTML 表格中抓取数据的库。Python 中最常用的网络爬虫库包括 Beautiful SoupSeleniumScrapy。本文将重点介绍 Beautiful Soup,因为与其他库相比,它的使用非常直观。 Beautiful Soup 是一个便于解析 HTML 和 XML 文档的库,特别适用于从网页中提取数据。虽然仅凭它足以抓取我们所需的 HTML 数据,但 HTML 格式对人眼而言并不易读,因此您可能需要对数据进行某种形式的处理。此时,Pandas 库便派上了用场。

Pandas 是一个数据分析库,它提供了处理结构化数据(如 HTML 表格)的工具。你可以使用 Python 自带的 pip 包管理器安装这些库:

$ pip install beautifulsoup4 pandas

安装好 Python 及所需库后,您就可以开始从 HTML 表格中抓取数据了。在下一节中,我们将逐步演示如何构建一个 Web 爬虫,它能够从 HTML 表格中提取数据并以结构化格式存储。

开始抓取

现在我们已经搭建好环境,并对 HTML 表格有了基本了解,可以开始构建一个从 HTML 表格中提取数据的网络爬虫了。在本节中,我们将逐步演示如何构建一个简单的爬虫,它能够从表格中提取数据并以结构化格式存储。

第一步是使用 requests 库向包含目标 HTML 表格的网页发送 HTTP 请求。

您可以像安装其他 Python 包一样,通过 pip 安装它:

$ pip install requests

该库允许我们将网页的 HTML 内容作为字符串获取:

import requests

url = 'https://www.w3schools.com/html/html_tables.asp'

html = requests.get(url).text

接下来,我们将使用 BeautifulSoup 库来解析 HTML 内容并从表格中提取数据。BeautifulSoup 提供了多种方法和属性,使我们能够轻松地遍历 HTML 文档并从中提取数据。以下是一个示例,展示如何使用它来查找表格元素并从单元格中提取数据:

soup = BeautifulSoup(html, 'html.parser')

# Find the table element

table = soup.find('table')

# Extract the data from the cells

data = []

for row in table.find_all('tr'):

   cols = row.find_all('td')

   # Extracting the table headers

   if len(cols) == 0:

       cols = row.find_all('th')

   cols = [ele.text.strip() for ele in cols]

   data.append([ele for ele in cols if ele])  # Get rid of empty values

print(data)


现在,二维数据数组已填充了表格的行和列值。为了便于我们阅读,现在我们可以非常轻松地将内容转换为 Pandas DataFrame:

import pandas as pd

# Getting the headers from the data array

# It is important to remove them from the data array afterwards in order to be parsed correctly by Pandas

headers = data.pop(0)

df = pd.DataFrame(data, columns=headers)

print(df)

从表格中提取数据后,您可以将其用于多种用途,例如数据分析、机器学习,或将其存储在数据库中。您还可以修改代码,从同一网页或多个网页中抓取多个表格。

请注意,并非所有网站都像这样容易抓取数据。许多网站实施了高级防护措施来防止抓取,例如验证码(CAPTCHA)和IP地址封禁,但幸运的是,有第三方服务(如WebScrapingAPI)提供IP轮换验证码绕过功能,使您能够抓取这些目标。

希望本节内容能为您提供关于使用 Python 从 HTML 表格中抓取数据流程的实用概述。在下一节中,我们将探讨一些优化此流程的方法以及最佳的网页抓取实践。

进阶技巧

虽然上一节构建的爬虫功能完备且能从 HTML 表格中提取数据,但仍有许多方法可以对其进行改进和优化,以提升其效率和效果。以下是一些建议:

  • 处理分页:若要抓取的 HTML 表格分布在多个页面上,则需修改爬虫程序以处理分页,并从所有页面中抓取数据。通常可通过跟随链接或使用分页控件(如“下一页”按钮)来导航至下一页数据。
  • 处理 AJAX:如果 HTML 表格是通过 AJAX 或 JavaScript 生成的,您可能需要使用 Selenium 等工具来执行 JavaScript 并加载数据到表格中。Selenium 是一个 Web 测试库,可以模拟用户与网页的交互,并允许您抓取动态生成的数据。一个不错的替代方案是使用我们的抓取工具,该工具可以在页面上渲染完 JavaScript 后返回数据。 您可查阅我们的文档了解更多详情。
  • 错误处理:在爬虫中优雅地处理错误和异常非常重要,因为网络或服务器问题可能会导致请求失败或数据不完整。您可以使用 try/except 代码块来捕获异常并进行适当处理,例如重试请求或记录错误。
  • 扩展爬虫:如果您需要从多个表格或网站抓取大量数据,可能需要扩展爬虫以应对增加的工作负载。这可以通过并行处理或将工作分配到多台机器等技术来实现。

通过改进和优化您的网络爬虫,您可以更高效、更有效地提取数据,并确保爬虫的可靠性和可扩展性。在下一节中,我们将探讨为何使用专业的爬虫服务可能比自行构建爬虫更优。

总结

本文介绍了网络爬取的基础知识,并演示了如何构建一个简单的 Python 爬虫程序来从 HTML 表格中提取数据。虽然自行构建爬虫既实用又能提升技能,但在许多情况下,使用专业的爬虫服务可能更优,原因如下:

  • 专业爬虫通常更可靠、更高效,因为它们专为大规模网页抓取而设计和优化。
  • 专业爬虫通常具备自建爬虫所不具备的功能,例如支持验证码识别、速率限制以及处理 AJAX 和 JavaScript。
  • 使用专业爬虫可节省您的时间和资源,因为您无需自行开发和维护爬虫。
  • 专业爬虫通常提供多种定价方案,其性价比往往高于自建爬虫,尤其在需要抓取海量数据时。

虽然构建自己的爬虫可能是一次有价值的体验,但在许多情况下,使用专业的爬虫服务可能更为实用且经济高效。归根结底,是构建自己的爬虫还是使用专业服务,取决于您的具体需求和资源。

希望本文能为您提供关于网页抓取以及使用 Python 构建简单 HTML 表格抓取器的过程的实用概述。

关于作者
Andrei Ogiolan, 全栈开发工程师 @ WebScrapingAPI
Andrei Ogiolan全栈开发工程师

安德烈·奥吉奥兰(Andrei Ogiolan)是 WebScrapingAPI 的全栈开发工程师,他在产品各领域均有贡献,并协助为该平台构建可靠的工具和功能。

开始构建

准备好扩展您的数据收集规模了吗?

加入2,000多家企业,使用WebScrapingAPI在无需任何基础设施开销的情况下,以企业级规模提取网络数据。