📅  最后修改于: 2023-12-03 15:13:38.687000             🧑  作者: Mango
Beautifulsoup 是一个功能强大的 Python 包,用于从 HTML 和 XML 文档中提取数据。它可以轻松地处理整个文档、部分文档或特定标记的数据,使数据从文本中提取变得更加容易。
Beautifulsoup 把 HTML 或 XML 的所有标记转换成 Python 对象,这些对象可以使用 Python 类、属性、方法和索引访问,使得对 HTML 和 XML 的解析非常简单。
在 Beautifulsoup 中,有几种不同类型的对象。下面将逐一介绍这些对象。
Tag 对象是 HTML 或 XML 中的一个标记。例如,如果有一个 HTML 文件如下所示:
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
我们可以使用 Beautifulsoup 从中提取出标记,并创建 Tag 对象。例如,提取出第一个段落标记,可以这样做:
from bs4 import BeautifulSoup
html = """
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
p_tag = soup.find('p')
print(p_tag)
输出结果为:
<p>这是第一个段落。</p>
这里的 p_tag
是一个 Tag 对象,它包含了 HTML 中的 <p>
标记。我们可以使用 Tag 对象的属性或方法获取标记的内容或属性。
NavigableString 对象是 HTML 或 XML 中的一个字符串。如果有一个 HTML 文件如下所示:
<p>这是一个 <b>重要的</b> 信息。</p>
我们可以使用 Beautifulsoup 从中提取出字符串,并创建 NavigableString 对象。例如,提取出 <p>
标记内的所有字符串,可以这样做:
from bs4 import BeautifulSoup
html = """
<p>这是一个 <b>重要的</b> 信息。</p>
"""
soup = BeautifulSoup(html, 'html.parser')
p_tag = soup.find('p')
text = p_tag.string
print(text)
输出结果为:
这是一个 重要的 信息。
这里的 text
是一个 NavigableString 对象,它包含了 <p>
标记内的所有字符串。我们可以使用 NavigableString 对象的属性或方法获取字符串的内容。
BeautifulSoup 对象是整个 HTML 或 XML 文档的对象。它是所有其他对象的根节点。例如,如果有一个 HTML 文件如下所示:
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
我们可以使用 Beautifulsoup 创建一个 BeautifulSoup 对象,如下所示:
from bs4 import BeautifulSoup
html = """
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
print(soup)
输出结果为:
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
这里的 soup
是一个 BeautifulSoup 对象,它包含了整个 HTML 文档的所有信息。我们可以使用 BeautifulSoup 对象的属性或方法获取整个 HTML 文档中的标记、字符串等内容。
Comment 对象是 HTML 或 XML 中的注释。例如,如果有一个 HTML 文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<!-- 这是一个注释 -->
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
我们可以使用 Beautifulsoup 从中提取出注释,并创建 Comment 对象。例如,提取出注释内容,可以这样做:
from bs4 import BeautifulSoup
html = """
<!DOCTYPE html>
<html>
<head>
<title>Beautifulsoup Objects</title>
</head>
<body>
<div class="content">
<!-- 这是一个注释 -->
<p>这是第一个段落。</p>
<p>这是第二个段落。</p>
<ul>
<li>这是列表项 1。</li>
<li>这是列表项 2。</li>
<li>这是列表项 3。</li>
</ul>
</div>
</body>
</html>
"""
soup = BeautifulSoup(html, 'html.parser')
comment = soup.find(text=lambda text: isinstance(text, Comment))
print(comment)
输出结果为:
这是一个注释
这里的 comment
是一个 Comment 对象,它包含了 HTML 中的注释。我们可以使用 Comment 对象的属性或方法获取注释内容。
到此,我们已经介绍了 Beautifulsoup 中的所有对象种类。在使用 Beautifulsoup 进行 HTML 或 XML 解析时,这些对象会十分有用。