📜  Beautifulsoup – 对象的种类(1)

📅  最后修改于: 2023-12-03 15:13:38.687000             🧑  作者: Mango

Beautifulsoup – 对象的种类

Beautifulsoup 是一个功能强大的 Python 包,用于从 HTML 和 XML 文档中提取数据。它可以轻松地处理整个文档、部分文档或特定标记的数据,使数据从文本中提取变得更加容易。

Beautifulsoup 把 HTML 或 XML 的所有标记转换成 Python 对象,这些对象可以使用 Python 类、属性、方法和索引访问,使得对 HTML 和 XML 的解析非常简单。

在 Beautifulsoup 中,有几种不同类型的对象。下面将逐一介绍这些对象。

Tag

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

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

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

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 解析时,这些对象会十分有用。