📜  Beautiful Soup-搜索树(1)

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

Beautiful Soup-搜索树

Beautiful Soup是一个用于HTML和XML文档解析的Python库,其主要作用是将HTML或XML文档转化为Python对象,使得开发者可以方便地筛选出所需的信息。

安装

使用pip安装:

pip install beautifulsoup4
基本用法
解析HTML
from bs4 import BeautifulSoup

html_doc = """
<html>
<head>
    <title>Beautiful Soup-搜索树示例</title>
</head>
<body>
    <p class="first">Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。</p>
    <p class="second">它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。</p>
    <p class="third">在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。</p>
    <img src="http://www.example.com/img/logo.png" alt="logo">
</body>
</html>
"""

soup = BeautifulSoup(html_doc, 'html.parser')
print(soup.prettify())

其中,html.parser是解析器的名称,用于指定使用哪种解析器进行解析。运行以上代码,输出的结果如下:

<html>
 <head>
  <title>
   Beautiful Soup-搜索树示例
  </title>
 </head>
 <body>
  <p class="first">
   Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。
  </p>
  <p class="second">
   它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。
  </p>
  <p class="third">
   在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。
  </p>
  <img alt="logo" src="http://www.example.com/img/logo.png"/>
 </body>
</html>
标签选择器

使用Beautiful Soup可以方便地进行标签选择器的筛选,以下是一些常用的方法。

  • soup.tagName:返回第一个匹配指定标签名的元素,等同于soup.find(tagName)

  • soup.find(tagName):返回第一个匹配指定标签名的元素。

  • soup.find_all(tagName):返回所有匹配指定标签名的元素,返回结果为一个列表。

  • soup.select(selector):返回所有匹配指定CSS选择器的元素,返回结果为一个列表。

print("soup.title:", soup.title)
print("soup.p:", soup.p)
print("soup.find('p'):", soup.find('p'))
print("soup.find_all('p'):", soup.find_all('p'))
print("soup.select('p'):", soup.select('p'))

输出结果:

soup.title: <title>Beautiful Soup-搜索树示例</title>
soup.p: <p class="first">Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。</p>
soup.find('p'): <p class="first">Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。</p>
soup.find_all('p'): [<p class="first">Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。</p>, <p class="second">它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。</p>, <p class="third">在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。</p>]
soup.select('p'): [<p class="first">Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。</p>, <p class="second">它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。</p>, <p class="third">在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。</p>]
标签内容获取

可以使用以下方法获取指定标签的内容。

  • soup.tagName.string:返回指定标签的文本内容。

  • soup.tagName.text:返回指定标签的文本内容,与string效果相同。

  • soup.tagName.attrs:返回指定标签的所有属性,以字典形式存储。

print("soup.title.string:", soup.title.string)
print("soup.p.string:", soup.p.string)
print("soup.img['src']:", soup.img['src'])
print("soup.img.get('alt'):", soup.img.get('alt'))

输出结果:

soup.title.string: Beautiful Soup-搜索树示例
soup.p.string: Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。
soup.img['src']: http://www.example.com/img/logo.png
soup.img.get('alt'): logo
标签内容修改

以下两种方式可以修改指定标签的内容。

  • 直接修改标签的string属性。

  • 使用replace_with()方法,将指定标签的内容替换为指定字符串。

print("修改前的内容:")
print(soup.p.string)

soup.p.string.replace_with("修改后的内容")

print("修改后的内容:")
print(soup.p.string)

输出结果:

修改前的内容:
Beautiful Soup 是一个Python库,用于从HTML和XML文件中提取数据。
修改后的内容:
修改后的内容
标签操作

可以使用以下方法,对指定标签进行操作。

  • soup.tagName.replace_with(new_tag):将指定标签替换为新标签。

  • soup.tagName.extract():将指定标签从文档树中移除。

print("修改前的内容:")
print(soup.prettify())

new_tag = soup.new_tag("h1")

soup.p.replace_with(new_tag)

soup.img.extract()

print("修改后的内容:")
print(soup.prettify())

输出结果:

修改前的内容:
<html>
 <head>
  <title>
   Beautiful Soup-搜索树示例
  </title>
 </head>
 <body>
  <p>
   修改后的内容
  </p>
  <p class="second">
   它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。
  </p>
  <p class="third">
   在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。
  </p>
  <img alt="logo" src="http://www.example.com/img/logo.png"/>
 </body>
</html>

修改后的内容:
<html>
 <head>
  <title>
   Beautiful Soup-搜索树示例
  </title>
 </head>
 <body>
  <h1></h1>
  <p class="second">
   它能够通过你喜欢的转换器实现惯用的文档导航、查找,修改文档的方式。
  </p>
  <p class="third">
   在Python 2.x系列中, Beautiful Soup 3 是bs3,但在Python3.x系列中,Beautiful Soup 4才是跟Python3兼容的版本。
  </p>
 </body>
</html>
总结

Beautiful Soup可以便捷地将HTML/XML文档解析为Python对象,并提供了丰富的操作方式,使得开发者可以方便地筛选出所需的信息。如果您需要进行爬虫、数据挖掘等操作,建议掌握Beautiful Soup的使用。