Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库.
本文为Beautiful Soup属性方法总结,更多例子请查阅官方文档
$ pip install beautifulsoup4
#debian或Ubuntu下可以
$ apt-get install Python-bs4
加载BeautifulSoup库
>>> from bs4 import BeautifulSoup
>>> a = Beautiful('<html><head></head><body></body></html>') #创建BeautifulSoup对象
文档解析器
Beautiful Soup会自动选择一个解析器来解析文档,也可以通过参数来制定使用哪种解析器
第一次使用BeautifulSoup构造函数如果没有指定解析器,会出现提示,无需担心,后续调用就不会出现该提示
BeartifulSoup第一个参数为被解析的文档字符串或文件句柄,第二个参数来表示选择什么解析器,
如果第二个参数为空,则根据当前系统安装的库自动选择解析器,lxml,html5lib,python标准库
>>> BeautifulSoup(markup, "html.parser")
>>> BeautifulSoup(markup, "lxml")
>>> BeautifulSoup(markup, "lxml-xml") #使用lxml库解析xml文档
>>> BeautifulSoup(markup, "xml")
>>> BeautifulSoup(markup, "html5lib")
推荐使用lxml作为解析器,速度快,容错能力强,效率高
安装lxml
$ pip install lxml
安装html5lib
$ pip install html5lib
Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种: Tag , NavigableString , BeautifulSoup , Comment .
BeautifulSoup类
BeautifulSoup对象表示一个文档的全部内容,大部分时候,可以把它当作 Tag 对象,它支持遍历文档树和搜索文档树中描述的大部分的方法.
它的name属性返回字符串'[document]'
BeautifulSoup没有标签属性,所以无法使用字典索引或attrs属性
NavigableSoup类
字符串通常被包含在tag对象内,而这些字符串使用NavigableSoup类用来包装
标签与标签之间的字符串同样会被作为文档的节点,包装为NavigableSoup对象
NabigableSoup对象支持遍历和搜索的大部分属性方法 但是不能包含其他对象,所以不支持.contents,.strings或find()等针对子节点的方法
在tag中包含的NavigableSoup对象可以通过replace_with()方法来替换字符串
可以通过unicode()函数将NaviableSoup对象转会成Unicode字符串,通常在BeautifulSoup之外使用时进行转换
Comment类
Comment对象是一个特殊类型的NavigableString对象,包含文档中的注释
Beautiful Soup还定义了一些其他类型CData , ProcessingInstruction , Declaration , Doctype用于处理XML文档,这些类也都是NavigableString类的子类
Tag对象
tag.name 获取标签名字,可以更改该属性
tag[attr_name] 获取该标签的attr_name属性,可以更改和添加attr_name属性的值
tag.attrs 获取该标签的所有属性,返回一个字典
如果属性为多值属性,则返回一个列表,但是如果该属性在html中没