- Beautiful Soup 教程
- Beautiful Soup - 首页
- Beautiful Soup - 概述
- Beautiful Soup - 网页抓取
- Beautiful Soup - 安装
- Beautiful Soup - 解析页面
- Beautiful Soup - 对象类型
- Beautiful Soup - 检查数据源
- Beautiful Soup - 抓取 HTML 内容
- Beautiful Soup - 通过标签导航
- Beautiful Soup - 通过 ID 查找元素
- Beautiful Soup - 通过 Class 查找元素
- Beautiful Soup - 通过属性查找元素
- Beautiful Soup - 搜索树
- Beautiful Soup - 修改树
- Beautiful Soup - 解析文档的一部分
- Beautiful Soup - 查找元素的所有子元素
- Beautiful Soup - 使用 CSS 选择器查找元素
- Beautiful Soup - 查找所有注释
- Beautiful Soup - 从 HTML 中抓取列表
- Beautiful Soup - 从 HTML 中抓取段落
- BeautifulSoup - 从 HTML 中抓取链接
- Beautiful Soup - 获取所有 HTML 标签
- Beautiful Soup - 获取标签内的文本
- Beautiful Soup - 查找所有标题
- Beautiful Soup - 提取标题标签
- Beautiful Soup - 提取电子邮件 ID
- Beautiful Soup - 抓取嵌套标签
- Beautiful Soup - 解析表格
- Beautiful Soup - 选择第 n 个子元素
- Beautiful Soup - 通过标签内的文本搜索
- Beautiful Soup - 删除 HTML 标签
- Beautiful Soup - 删除所有样式
- Beautiful Soup - 删除所有脚本
- Beautiful Soup - 删除空标签
- Beautiful Soup - 删除子元素
- Beautiful Soup - find 与 find_all 的区别
- Beautiful Soup - 指定解析器
- Beautiful Soup - 比较对象
- Beautiful Soup - 复制对象
- Beautiful Soup - 获取标签位置
- Beautiful Soup - 编码
- Beautiful Soup - 输出格式化
- Beautiful Soup - 美化输出
- Beautiful Soup - NavigableString 类
- Beautiful Soup - 将对象转换为字符串
- Beautiful Soup - 将 HTML 转换为文本
- Beautiful Soup - 解析 XML
- Beautiful Soup - 错误处理
- Beautiful Soup - 故障排除
- Beautiful Soup - 移植旧代码
- Beautiful Soup - 函数参考
- Beautiful Soup - contents 属性
- Beautiful Soup - children 属性
- Beautiful Soup - string 属性
- Beautiful Soup - strings 属性
- Beautiful Soup - stripped_strings 属性
- Beautiful Soup - descendants 属性
- Beautiful Soup - parent 属性
- Beautiful Soup - parents 属性
- Beautiful Soup - next_sibling 属性
- Beautiful Soup - previous_sibling 属性
- Beautiful Soup - next_siblings 属性
- Beautiful Soup - previous_siblings 属性
- Beautiful Soup - next_element 属性
- Beautiful Soup - previous_element 属性
- Beautiful Soup - next_elements 属性
- Beautiful Soup - previous_elements 属性
- Beautiful Soup - find 方法
- Beautiful Soup - find_all 方法
- Beautiful Soup - find_parents 方法
- Beautiful Soup - find_parent 方法
- Beautiful Soup - find_next_siblings 方法
- Beautiful Soup - find_next_sibling 方法
- Beautiful Soup - find_previous_siblings 方法
- Beautiful Soup - find_previous_sibling 方法
- Beautiful Soup - find_all_next 方法
- Beautiful Soup - find_next 方法
- Beautiful Soup - find_all_previous 方法
- Beautiful Soup - find_previous 方法
- Beautiful Soup - select 方法
- Beautiful Soup - append 方法
- Beautiful Soup - extend 方法
- Beautiful Soup - NavigableString 方法
- Beautiful Soup - new_tag 方法
- Beautiful Soup - insert 方法
- Beautiful Soup - insert_before 方法
- Beautiful Soup - insert_after 方法
- Beautiful Soup - clear 方法
- Beautiful Soup - extract 方法
- Beautiful Soup - decompose 方法
- Beautiful Soup - replace_with 方法
- Beautiful Soup - wrap 方法
- Beautiful Soup - unwrap 方法
- Beautiful Soup - smooth 方法
- Beautiful Soup - prettify 方法
- Beautiful Soup - encode 方法
- Beautiful Soup - decode 方法
- Beautiful Soup - get_text 方法
- Beautiful Soup - diagnose 方法
- Beautiful Soup 有用资源
- Beautiful Soup - 快速指南
- Beautiful Soup - 有用资源
- Beautiful Soup - 讨论
Beautiful Soup - 指定解析器
一个 HTML 文档树被解析成 BeautifulSoup 类的对象。此类的构造函数需要一个强制参数,即 HTML 字符串或指向 html 文件的文件对象。构造函数还有其他可选参数,其中重要的是 features。
BeautifulSoup(markup, features)
这里 markup 是一个 HTML 字符串或文件对象。features 参数指定要使用的解析器。它可以是特定的解析器,例如 "lxml"、"lxml-xml"、"html.parser" 或 "html5lib";或者是要使用的标记类型("html"、"html5"、"xml")。
如果未给出 features 参数,Beautiful Soup 会选择已安装的最佳 HTML 解析器。Beautiful Soup 将 lxml 的解析器评为最佳,然后是 html5lib 的解析器,最后是 Python 的内置解析器。
您可以指定以下内容之一 -
您要解析的标记类型。Beautiful Soup 当前支持 "html"、"xml" 和 "html5"。
要使用的解析器库的名称。当前支持的选项是 "lxml"、"html5lib" 和 "html.parser"(Python 的内置 HTML 解析器)。
要安装 lxml 或 html5lib 解析器,请使用以下命令 -
pip3 install lxml pip3 install html5lib
这些解析器各有优缺点,如下所示 -
解析器:Python 的 html.parser
用法 - BeautifulSoup(markup, "html.parser")
优点
- 内置
- 速度适中
- 宽容(自 Python 3.2 起)
缺点
- 速度不如 lxml 快,宽容度不如 html5lib 高。
解析器:lxml 的 HTML 解析器
用法 - BeautifulSoup(markup, "lxml")
优点
- 非常快
- 宽容
缺点
- 外部 C 依赖
解析器:lxml 的 XML 解析器
用法 - BeautifulSoup(markup, "lxml-xml")
或 BeautifulSoup(markup, "xml")
优点
- 非常快
- 唯一当前支持的 XML 解析器
缺点
- 外部 C 依赖
解析器:html5lib
用法 - BeautifulSoup(markup, "html5lib")
优点
- 极其宽容
- 以与 Web 浏览器相同的方式解析页面
- 创建有效的 HTML5
缺点
- 非常慢
- 外部 Python 依赖
不同的解析器会从同一文档创建不同的解析树。HTML 解析器和 XML 解析器之间的差异最大。这是一个简短的文档,以 HTML 格式解析 -
示例
from bs4 import BeautifulSoup
soup = BeautifulSoup("<a><b /></a>", "html.parser")
print (soup)
输出
<a><b></b></a>
空的 <b /> 标签不是有效的 HTML。因此,解析器将其转换为 <b></b> 标签对。
现在以 XML 格式解析同一文档。请注意,空 <b /> 标签保持不变,并且该文档被赋予 XML 声明而不是放入 <html> 标签中。
示例
from bs4 import BeautifulSoup
soup = BeautifulSoup("<a><b /></a>", "xml")
print (soup)
输出
<?xml version="1.0" encoding="utf-8"?> <a><b/></a>
对于格式良好的 HTML 文档,所有 HTML 解析器都会产生类似的解析树,尽管一个解析器会比另一个解析器快。
但是,如果 HTML 文档不完美,则不同类型的解析器将产生不同的结果。请查看当 "<a></p>" 使用不同的解析器解析时结果有何不同 -
lxml 解析器
示例
from bs4 import BeautifulSoup
soup = BeautifulSoup("<a></p>", "lxml")
print (soup)
输出
<html><body><a></a></body></html>
请注意,悬空的 </p> 标签被简单地忽略了。
html5lib 解析器
示例
from bs4 import BeautifulSoup
soup = BeautifulSoup("<a></p>", "html5lib")
print (soup)
输出
<html><head></head><body><a><p></p></a></body></html>
html5lib 将其与一个起始 <p> 标签配对。此解析器还向文档添加了一个空的 <head> 标签。
内置 html 解析器
示例
Built in from bs4 import BeautifulSoup
soup = BeautifulSoup("<a></p>", "html.parser")
print (soup)
输出
<a></a>
此解析器也忽略了结束 </p> 标签。但此解析器没有尝试通过添加 <body> 标签来创建格式良好的 HTML 文档,甚至没有费心添加 <html> 标签。
html5lib 解析器使用 HTML5 标准的一部分的技术,因此它对成为“正确”方式的说法最有依据。