如何在 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]
我们还可以如下所示检查每列的数据类型。
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 加载的表格。