主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
Beautiful Soup

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 按类查找元素
Beautiful Soup 按属性查找元素
Beautiful Soup 寻找树
Beautiful Soup 修改树
Beautiful Soup 解析文档的某个部分
Beautiful Soup 找到一个元素的所有子项
Beautiful Soup 使用 CSS 选择器查找元素
Beautiful Soup 查找所有注释
Beautiful Soup 从 HTML 抓取列表
Beautiful Soup 从 HTML 中抓取段落
Beautiful Soup 从 HTML 中抓取链接
Beautiful Soup 获取所有 HTML 标签
Beautiful Soup 获取标签内的文本
Beautiful Soup 查找所有标题
Beautiful Soup 提取标题
Beautiful Soup 提取电子邮件地址
Beautiful Soup 嵌套标签
Beautiful Soup 解析HTML表格
Beautiful Soup 标签的层级结构
Beautiful Soup 搜索特定文本
Beautiful Soup 移除标签
Beautiful Soup 移除所有样式
Beautiful Soup 移除script标签
Beautiful Soup 移除空标签
Beautiful Soup 移除子元素
Beautiful Soup find()和find_all()比较
Beautiful Soup 指定解析器
Beautiful Soup 比较对象
Beautiful Soup 创建副本
Beautiful Soup Tag对象位置
Beautiful Soup 编码
Beautiful Soup 输出格式化
Beautiful Soup prettify()方法
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 ind_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 ecompose() 方法
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 测试包
Beautiful Soup 对象类型
Beautiful Soup 检查数据源
Beautiful Soup 抓取 HTML 内容
Beautiful Soup 按标签导航
Beautiful Soup 按 ID 查找元素
Beautiful Soup 按类查找元素
Beautiful Soup 按属性查找元素
Beautiful Soup 寻找树
Beautiful Soup 修改树
Beautiful Soup 解析文档的某个部分
Beautiful Soup 找到一个元素的所有子项
Beautiful Soup 使用 CSS 选择器查找元素
Beautiful Soup 查找所有注释
Beautiful Soup 从 HTML 抓取列表
Beautiful Soup 从 HTML 中抓取段落
Beautiful Soup 从 HTML 中抓取链接
Beautiful Soup 获取所有 HTML 标签
Beautiful Soup 获取标签内的文本
Beautiful Soup 查找所有标题
Beautiful Soup 提取标题
Beautiful Soup 提取电子邮件地址
Beautiful Soup 嵌套标签
Beautiful Soup 解析HTML表格
Beautiful Soup 标签的层级结构
Beautiful Soup 搜索特定文本
Beautiful Soup 移除标签
Beautiful Soup 移除所有样式
Beautiful Soup 移除script标签
Beautiful Soup 移除空标签
Beautiful Soup 移除子元素
Beautiful Soup find()和find_all()比较
Beautiful Soup 指定解析器
Beautiful Soup 比较对象
Beautiful Soup 创建副本
Beautiful Soup Tag对象位置
Beautiful Soup 编码
Beautiful Soup 输出格式化
Beautiful Soup prettify()方法
Beautiful Soup NavigableString类
Beautiful Soup 象转换为字符串
Beautiful Soup HTML文档转文本
Beautiful Soup 解析XML文档
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 ind_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 ecompose() 方法
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 指定解析器


上一章 下一章

HTML文档树被解析成一个BeautifulSoup类的对象。这个类的构造函数需要一个必需的参数,即HTML字符串或指向HTML文件的文件对象。构造函数还有其他可选参数,其中重要的是features参数。

BeautifulSoup(markup, features)

在这里,markup是一个HTML字符串或文件对象。features参数指定了要使用的解析器,可能是特定的解析器如"lxml"、"lxml-xml"、"html.parser"或"html5lib";或者是要使用的标记类型("html"、"html5"、"xml")。

如果没有给出features参数,BeautifulSoup会选择安装的最佳HTML解析器。BeautifulSoup认为lxml的解析器是最好的,其次是html5lib的,再次是Python内置的解析器。

您可以指定以下选项之一:

  • 要解析的标记类型。目前BeautifulSoup支持的有"html"、"xml"和"html5"。
  • 要使用的解析器库的名称。目前支持的选项有"lxml"、"html5lib"和"html.parser"(Python内置的HTML解析器)。

要安装lxml或html5lib解析器,请使用命令:

pip3 install lxml
pip3 install html5lib

这些解析器各有优缺点,如下所示:

解析器 使用示例 优点 缺点
Python's html.parser BeautifulSoup(markup, "html.parser") 包含在标准库中 不如lxml快,不如html5lib宽容
lxml的HTML解析器 BeautifulSoup(markup, "lxml") 非常快,宽容 外部C依赖
lxml的XML解析器 BeautifulSoup(markup, "lxml-xml") 或 BeautifulSoup(markup, "xml") 非常快,目前唯一支持的XML解析器 外部C依赖
html5lib BeautifulSoup(markup, "html5lib") 非常宽容,与浏览器解析页面相同,创建有效的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解析器

from bs4 import BeautifulSoup

soup = BeautifulSoup("<a></p>", "html.parser")
print(soup)

输出

<a></a>

这个解析器也忽略了关闭的</p>标签。但是这个解析器并没有尝试通过添加<body>标签来创建一个格式良好的HTML文档,甚至没有添加<html>标签。

html5lib解析器使用的技术是HTML5标准的一部分,因此它最有资格被称为“正确”的方式。

上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图