在 Python 中解析 HTML 数据

通过网络浏览器的出现,网络上的数据被广泛地吸收和用于各种目的。但是,这种 HTML 数据很难以原始方式以编程方式注入。

我们需要一些媒介来解析 HTML 脚本,以便以编程方式使用。本文将提供我们可以通过 Python 方法/库快速解析 HTML 数据的各种方法。

在 Python 中使用 BeautifulSoup 模块解析 HTML 数据

Python 提供了 BeautifulSoup 模块来解析和提取 HTML 和 XML 文件中的基本数据。

这可以帮助每个程序员在文件结构中导航以从 HTML 或标记结构中以可读格式解析和获取数据,从而为每个程序员节省时间。

BeautifulSoup 模块接受 HTML 数据/文件或网页 URL 作为输入,并使用模块中可用的自定义函数返回请求的数据。

让我们通过下面的例子来看看 BeautifulSoup 提供的一些功能。我们将解析下面的 HTML 文件 (example.html) 以提取一些数据。

<html>
<head>
    <title>Heading 1111</title>
</head>

<body>
    <p class="title"><b>Body</b></p>
    <p class="Information">Introduction
        <a href="http://demo.com" id="sync01">Amazing info!!</a>
    <p> Stay tuned!!</p>
</body>
</html>

要使用 BeautifulSoup 模块中可用的功能,我们需要使用以下命令安装它。

pip install beautifulsoup4

完成后,我们将 HTML 文件 (example.html) 传递给模块,如下所示。

from bs4 import BeautifulSoup
with open("example.html") as obj:
    data = BeautifulSoup(obj, "html.parser")

BeautifulSoup() 函数通过 HTML.parser 导航器创建一个指向 HTML 文件的对象/指针。我们现在可以使用指针 data(如上面的代码所示)来遍历网站或 HTML 文件。

让我们通过下图了解 HTML 标签组件分解。

在 Python 中解析 HTML 数据

我们使用 object.html_outer_tag.html_inner_tag 从整个脚本或网页中提取特定 HTML 标记内的数据。使用 BeautifulSoup 模块,我们甚至可以针对单独的 HTML 标签获取数据,例如标题、div、p 等。

让我们尝试以完整的代码格式针对不同的 HTML 标签提取数据。

from bs4 import BeautifulSoup
with open("example.html") as obj:
    data = BeautifulSoup(obj, "html.parser")
    print(data.head.title)
    print(data.body.a.text)

我们尝试使用上面的代码提取包裹在 <head> 周围的 <title> 标签内的数据作为外部标签。因此,我们将 BeautifulSoup 对象指向该标签。

我们还可以通过将 BeautifulSoup 对象指向其文本部分来提取与 <a> 标记关联的文本。

输出:

Heading 1111
Amazing info!!

让我们参考下面的例子来理解通过 BeautifulSoup 对象解析 <div> 等 HTML 标签。

参考下面的 HTML 代码。

<html>
<head>Heading 0000</head>
<body>
    <div>Data</div>
</body>
</html>

如果我们希望显示或提取标签 <div> 的信息,我们需要制定代码以帮助 BeautifulSoup 对象指向该特定标签以进行数据解析。

from bs4 import BeautifulSoup
with open("example.html") as obj:
    data = BeautifulSoup(obj, "html.parser")
    print(data.body.div)

输出:

<div>Data</div>

因此,我们可以直接使用该模块抓取网页。它通过 web/HTML/XML 页面与数据交互,并根据标签获取必要的定制数据。

在 Python 中使用 PyQuery 模块解析 HTML 数据

Python PyQuery 模块是一个 jQuery 库,它使我们能够针对 XML 或 HTML 文档触发 jQuery 函数,从而轻松地解析 XML 或 HTML 脚本以提取有意义的数据。

要使用 PyQuery,我们需要使用以下命令安装它。

pip install pyquery

pyquery 模块为我们提供了一个 PyQuery 函数,它使我们能够设置指向 HTML 代码的指针以进行数据提取。它接受 HTML 片段/文件作为输入并将指针对象返回到该文件。

该对象还可用于指向要解析其内容/文本的确切 HTML 标记。参考下面的 HTML 片段(demo.html)。

<html>
<head>Heading 0000</head>
<body>
    <div>Data</div>
</body>
</html>

然后我们从 pyquery 模块中导入 PyQuery 函数。使用 PyQuery 函数,我们将对象指向可读格式的 demo.html 文件。

然后,object('html_tag').text() 使我们能够提取与任何 HTML 标签关联的文本。

from pyquery import PyQuery
data_html = open("demo.html", 'r').read()
obj = PyQuery(data_html)
print (obj('head').text())
print (obj('div').text())

obj('head') 函数指向 HTML 脚本的 <head> 标签,text() 函数使我们能够检索绑定到该标签的数据。

同样,使用 obj('div').text(),我们提取绑定到 <div> 标签的文本数据。

输出:

Heading 0000
Data

在 Python 中使用 lxml 库解析 HTML 数据

Python 为我们提供了一个 lxml.html 模块来有效地解析和处理 HTML 数据。BeautifulSoup 模块也执行 HTML 解析,但在抓取网页时处理复杂的 HTML 脚本时效率较低。

使用 lxml.html 模块,我们可以解析 HTML 数据并使用 parse() 函数针对特定的 HTML 标签提取数据值。此函数接受 Web URL 或 HTML 文件作为输入,并将指向 HTML 脚本根元素的指针与 getroot() 函数相关联。

然后我们可以使用与 cssselect(html_tag) 函数相同的指针来显示由传递的 HTML 标记绑定的内容。我们将通过 lxml.html 模块解析下面的 HTML 脚本。

<html>
<head>Heading 0000</head>
<body>
    <a>Information 00</a>
    <div>Data</div>
    <a>Information 01</a>
</body>
</html>

让我们看一下下面的 Python 代码片段。

from lxml.html import parse
info = parse('example.html').getroot()
for x in info.cssselect('div'):
    print(x.text_content())
for x in info.cssselect('a'):
    print(x.text_content())

在这里,我们通过 parse() 函数将对象 info 与 HTML 脚本 (example.html) 关联起来。此外,我们使用 cssselect() 函数来显示与 HTML 脚本的 <div> 和 <a> 标签绑定的内容。

它显示了由 <a> 和 div 标签包围的所有数据。

输出:

Data
Information 00
Information 01

在 Python 中使用 justext 库解析 HTML 数据

Python justext 模块让我们从 HTML 脚本中提取更简化的文本形式。它可以帮助我们从 HTML 脚本、页眉、页脚、导航链接等中消除不必要的内容。

使用 justext 模块,我们可以轻松提取适合生成语言数据源的成熟文本/句子。justext() 函数接受 Web URL 作为输入,以 HTML 脚本的内容为目标,并从中提取英文语句/段落/文本。

参考下面的例子。

我们使用 requests.get() 函数对传递给它的 Web URL 进行 GET 调用。一旦我们将指针指向网页,我们就使用 justext() 函数来解析 HTML 数据。

justext() 函数接受网页指针变量作为参数,并将其与 content 函数一起存放以获取网页内容。

此外,它使用 get_stoplist() 函数来查找特定语言的句子以进行解析(英语,在下面的示例中)。

import requests
import justext

link = requests.get("http://www.google.com")
data = justext.justext(link.content, justext.get_stoplist("English"))
for x in data:
    print (x.text)

输出:

Search Images Maps Play YouTube News Gmail Drive More `
Web History | Settings | Sign in
Advanced search
Google offered in: हिन्दीবাংলাతెలుగుमराठीதமிழ்ગુજરાતીಕನ್ನಡമലയാളംਪੰਜਾਬੀ
Advertising Programs Business Solutions About Google Google.co.in
© 2022 - Privacy - Terms

在 Python 中使用 EHP 模块解析 HTML 数据

在探索了用于解析 HTML 数据的不同 Python 模块之后,诸如 BeautifulSoup 和 PyQuery 之类的奇特模块无法有效地处理庞大或复杂的 HTML 脚本。要处理损坏或复杂的 HTML 脚本,我们可以使用 Python EHP 模块。

这个模块的学习曲线非常简单,很容易适应。EHP 模块为我们提供了 Html() 函数,它生成一个指针对象并接受 HTML 脚本作为输入。

为此,我们使用 feed() 函数将 HTML 数据提供给 Html() 函数以进行识别和处理。最后,find() 方法使我们能够解析和提取与作为参数传递给它的特定标签相关的数据。

看看下面的例子。

from ehp import *

script = '''<html>
<head>Heading</head>
<body>
    <div>
        Hello!!!!
    </div>
</body>
</html>
'''

obj = Html()
x = obj.feed(script)
for i in x.find('div'):
    print(i.text())

在这里,我们在 script 变量中有 HTML 脚本。我们通过对象解析在内部使用 feed() 函数将 HTML 脚本提供给 Html() 方法。

然后,我们尝试解析 HTML 数据并使用 find() 方法针对 <div> 标记获取数据。

输出:

Hello!!!!

结论

本教程讨论了使用各种 Python 内置模块/库解析 HTML 数据的不同方法。我们还看到了实际示例的实际实现,以了解 Python 中 HTML 数据解析的过程。