如何在 Python 中读取 HTML 表格

如何在 Python 中读取 HTML 表格

在本教程中,我们将学习使用 Python 读取 HTML 表格。我们知道,每天会产生大量数据,我们需要提取相关信息。互联网是获取与我们要求相关数据的好地方,而网络爬虫是从网络上收集数据的最佳选择之一。

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

我们将使用 Python 的 pandas 库进行数据处理。它提供了 read_html() 函数,该函数帮助在网页上以 DataFrame 对象列表的形式读取 HTML 表格。

先决条件

要使用 Python 脚本读取 HTML 文件,我们需要安装 pandas 库。一旦安装了库,我们还需要 lxml 模块来使用 read_xml() 函数。我们可以使用以下命令安装它。

pip install lxml

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

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

例子 –

html_table = """
<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>Name</th>
      <th>Branch</th>
      <th>Result</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>5</td>
      <td>Patrick</td>
      <td>Civil</td>
      <td>Pass</td>
    </tr>
    <tr>
      <td>1</td>
      <td>Maverick</td>
      <td>Mechanical</td>
      <td>Fail</td>
    </tr>
    <tr>
      <td>4</td>
      <td>Peter</td>
      <td>Computer Science</td>
      <td>Pass</td>
    </tr>
    <tr>
      <td>8</td>
      <td>Parker</td>
      <td>Chemical</td>
      <td>Fail</td>
    </tr>
  </tbody>
</table>
"""

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

import pandas as pd
df = pd.read_html(html_table)
df

输出

[ 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() 函数用于解析表格并返回一个数据帧列表,本例中仅包含一个数据帧。变量 html_table 包含具有四列(ID、姓名、分支和结果)的 HTML 表格的字符串表示形式。该表格具有标题行和四个数据行。在对 html_table 变量调用 pd.read_html() 函数之后,生成的数据框将存储在变量 df 中。然后可以使用 df 变量访问表中的数据并根据需要进行操作。

正如我们所看到的,输出是以列表的形式呈现,其中包含了一个表格。我们可以使用索引来查看列表中特定索引处的元素。

df[0]

如何在 Python 中读取 HTML 表格

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

df[0].dtypes

输出

ID int64 
Name object 
Branch object 
Result object 
dtype: object

从 URL 获取表格数据

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

例子 –

import pandas as pd
url = 'https://www.infoplease.com/geography/largest-countries-world-area'
df = pd.read_html(url)
df[0]

输出

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

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

从文件中提取表格

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

import pandas as pd
file_path = 'sample_table.txt'
with open(file_path, 'r') as f:
    df = pd.read_html(f.read())
df

输出

[   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]

上面的列表中包含两个元素。我们可以使用索引获取每个表格。

df[0]

输出

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
df[1]

输出

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 加载的表格。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python 教程