如何在 Python 中读取 HTML 表格

17 Mar 2025 | 4 分钟阅读

在本教程中,我们将学习如何使用 Python 读取 HTML 表格。众所周知,每天都会产生大量数据,我们需要提取相关信息。互联网是获取相关数据的绝佳来源,网络爬虫是从网络收集数据的最佳选择之一。

此外,Python 借助 BeautifulSoup 模块可以使网络爬虫变得更加容易。

我们将使用 Python 的 pandas 库,该库因其数据处理能力而广受欢迎。它提供了 read_html() 函数,该函数有助于将网页上的 HTML 表格读取为 DataFrame 对象列表。

前提条件

要使用 Python 脚本读取 HTML 文件,我们需要安装 pandas 库。安装完库后,我们还需要 lxml 模块才能使用 read_xml() 函数。我们可以使用以下命令进行安装。

使用 Python 从 HTML 字符串中提取表格

在以下示例中,我们创建了一个简单的 HTML 表格,并将其分配给 html_table 变量。让我们看下面的例子。

示例 -

现在我们将读取上述 HTML 表格。

输出

[ ID Name Branch Result 
0 5 Patrick Civil Pass 

1 1 Maverick Mechanical Fail 
2 4 Peter Computer Science Pass 
3 8 Parker Chemical Fail]

解释 -

在上面的代码中,我们使用了 Python 的 pandas 库来解析表示为字符串的 HTML 表格。pd.read_html() 函数用于解析表格并返回一个包含单个 DataFrame 的列表。html_table 变量包含一个 HTML 表格的字符串表示,该表格有四列:ID、Name、Branch 和 Result。该表格有一个标题行和四行数据。在 html_table 变量上调用 pd.read_html() 函数后,生成的 DataFrame 将存储在 df 变量中。然后可以使用 df 变量来访问表格中的数据并根据需要进行操作。

如我们所见,输出是列表形式,只包含一个表格。我们可以使用索引来查看列表中的特定索引。


How to read HTML table in Python

我们还可以检查每列的数据类型,如下所示。

输出

ID int64 
Name object 
Branch object 
Result object 
dtype: object

从 URL 获取表格数据

我们也可以将 URL 作为参数传递给 read_html() 函数来读取网页上的 HTML 表格。让我们通过以下示例来理解。

示例 -

输出

0	1	   2
0	Rank	Country	Area in sq. km
1	1.	Russia	17098242
2	2.	Canada	9984670
3	3.	United States	9826675
4	4.	China	9596961
5	5.	Brazil	8514877
6	6.	Australia	7741220
7	7.	India	3287263
8	8.	Argentina	2780400
9	9.	Kazakhstan	2724900
10	10.	Algeria	2381741

注意 - 网页的内容可能会随时间变化,因此我们可能会得到不同的结果。

从文件中提取表格

我们也可以从文本文件中读取表格。我们需要将文件路径传递给函数。让我们通过以下示例来理解。

示例 -

输出

[   ID    Name         Designation  Salary
 0   5   Peter               HR          50000
 1   1   Parker         Salesperson   38000
 2   4  Stark                 Analyst   85000
 3   8     Falcon  Software Developer   67000,
    
      Roll No.  Name  Marks
 0        10     Natasha     23
 1         5      Bruce     40
 2        18   Banner     44]

上面的列表包含两个元素。我们可以通过索引来获取每个表格。

输出

ID    Name         Designation  Salary
 0   5   Peter               HR          50000
 1   1   Parker         Salesperson   38000
 2   4  Stark                 Analyst   85000
 3   8     Falcon  Software Developer   67000

输出

ID    Name         Designation  Salary
 0   5   Peter               HR          50000
 1   1   Parker         Salesperson   38000
 2   4  Stark                 Analyst   85000
 3   8     Falcon  Software Developer   67000

结论

read_html() 是一个有用且高效的方法,可以从多种源读取 HTML 表格。在执行网络爬虫时非常有用。但是,read_html() 方法无法读取通过 JavaScript 加载的表格。