📜  使用Python解析 HTML 文档并将其转换为 XML 格式(1)

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

在Python中使用模块 Beautiful Soup 解析 HTML 文档并将其转换为 XML 格式

如果你正在开发一个基于网络的应用程序,比如爬虫、数据分析或者 Web 工具,那么你通常需要解析 Web 页面中的 HTML 或 XML 数据。Python 提供了很多工具和模块来处理这个任务,其中一个最受欢迎的是 Beautiful Soup。

Beautiful Soup 简介

Beautiful Soup 是一个用于解析 HTML 和 XML 文档的 Python 库。因为这两种类型的文档常常包含非常复杂的结构和规则,使用纯 Python 代码解析它们是很麻烦的。Beautiful Soup 使用了一些类似正则表达式的技巧,让你可以通过简洁的 API 提取出感兴趣的数据。

beautifulsoup4 是 Beautiful Soup 的最新版本,可以通过下面的命令安装:

pip install beautifulsoup4
解析 HTML 文档

下面是一个简单的示例,演示如何使用 Beautiful Soup 解析 HTML 文档。

from bs4 import BeautifulSoup

html = '''
<html>
  <head>
    <title>示例 HTML 文档</title>
  </head>
  <body>
    <h1>Title</h1>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
  </body>
</html>
'''

# 创建 Beautiful Soup 对象
soup = BeautifulSoup(html, 'html.parser')

# 获取标题
title = soup.title.string
print(f'Title: {title}')

# 获取所有段落
paragraphs = soup.find_all('p')
for p in paragraphs:
    print(f'Paragraph: {p.string}')

运行结果如下:

Title: 示例 HTML 文档
Paragraph: Paragraph 1
Paragraph: Paragraph 2

首先,我们创建了一个包含 HTML 内容的字符串。接下来,使用 Beautiful Soup 创建了一个对象 soup,它的类型是 BeautifulSoup。我们指定解析器为 html.parser,这是 Python 原生的 HTML 解析器。

使用 soup.title.string 可以获取 HTML 页面的标题,使用 soup.find_all('p') 可以查询 HTML 页面中所有的段落标签。

将 HTML 转换为 XML

在有些情况下,我们需要将 HTML 文档转换为 XML 格式。例如,有些工具可能只支持 XML 数据,而不支持 HTML 数据。Beautiful Soup 提供了一个简单的解决方案。

from bs4 import BeautifulSoup

html = '''
<html>
  <head>
    <title>示例 HTML 文档</title>
  </head>
  <body>
    <h1>Title</h1>
    <p>Paragraph 1</p>
    <p>Paragraph 2</p>
  </body>
</html>
'''

# 创建 Beautiful Soup 对象
soup = BeautifulSoup(html, 'html.parser')

# 将 Beautiful Soup 对象转换为字符串,并移除 DOCTYPE
xml = soup.prettify(formatter="xml")
xml = xml.replace('<?xml version="1.0" encoding="utf-8"?>\n', '')
xml = xml.replace('<!DOCTYPE html>', '')

print(xml)

运行结果如下:

<html>
 <head>
  <title>
   示例 HTML 文档
  </title>
 </head>
 <body>
  <h1>
   Title
  </h1>
  <p>
   Paragraph 1
  </p>
  <p>
   Paragraph 2
  </p>
 </body>
</html>

我们首先创建了一个 Beautiful Soup 对象 soup,然后使用 soup.prettify(formatter="xml") 方法将它转换为字符串。注意,这里使用的是 XML 格式化程序(formatter="xml"),而不是默认的 HTML 格式化程序。Beautiful Soup 有很多内置的格式化程序,你可以根据需要选择合适的。

最后,我们将字符串中的 DOCTYPE 移除,并得到了一个完全符合 XML 规范的字符串。

以上是使用 Python 解析 HTML 文档并将其转换为 XML 格式的介绍。