解析HTML代码
(资料图)
提取内容
获取节点
获取节点类的属性
匹配节点
解析HTML代码
BeautifulSoup(html_text ,features)
用于解析字符串类型的HTML代码。
参数markup:可以是字符串类型的HTML代码,也可以是二进制数据(、open('' ,'rb')等)。
参数features:解析器。
:内置的HTML解析器,对于复杂的HTML文档可能存在一些限制。
lxml:高度可靠和高性能的解析器,需要额外安装lxml库。它具有广泛的功能和灵活性,能够处理复杂的HTML文档,并且速度相对较快。
xml:内置的XML解析器,不需要额外安装任何库。功能相对较有限,不支持一些高级特性,如XPath查询。
lxml-xml:基于lxml库的XML解析器,需要额外安装lxml库。支持XPath查询、命名空间处理、XSLT转换等高级特性。
html5lib:基于HTML5规范的解析器,需要额外安装html5lib库。它的解析方式比较宽松,可以处理一些不规范的HTML文档,但相对于其他解析器而言速度较慢。
提取内容
⑴ 获取节点
可以用 .标签名 直接获取节点以及节点中的内容(包括子孙节点),但只会返回匹配的第一个节点。
示例:
⑵ 获取节点类的属性
① 节点名 .name
可用于遍历节点时判断或指定节点名。
② 节点属性 .attrs
返回一个字典,键值分别为节点的属性和对应的属性值。
class属性值是一个列表,因为一个标签的class属性可以有多个CSS类名。
③ 节点文本 .string
④ 子节点 .contents / .children
.contents:返回一个列表。子节点元素中会包含孙节点,但是和子节点算作一个整体。
.children:返回一个迭代器。
相当于 iter()。
相当于 list()。
⑤ 子孙节点 .descendants
以深搜遍历子孙节点,返回一个生成器。
⑥ 父节点和祖先节点 .parents
返回一个生成器。
示例:
返回<body>中第一个<a>标签的父节点和祖先节点名。
[document]表示整个HTML文档。
⑦ 兄弟节点 next_sibling / previous_sibling
返回下一个/上一个兄弟节点。
▲如果2个节点之间有换行符或其他文本时,这些字符也会被包括进去。
next_siblings / previous_siblings
返回一个生成器,包含所有的前/后兄弟节点。
⑶ 匹配节点
① find_all() / find() / ...
find_all(name,attrs,recursive,string / text,limit)
参数:
name:标签名。
attrs:指定标签属性(字典类型参数)。
recursive:是否全局匹配。默认为True。False表示只在子节点中搜索。
string / text:精确指定文本,模糊匹配可用正则表达式。text为旧版参数,若在新版用text虽然可以用,但会弹出警告。
limit:指定匹配的节点数量。
返回一个<class ''>对象,用法类似列表。
find()只返回匹配到的第一个节点,相当于find_all(limit=1)。
② select() / select_one()
通过CSS选择器语法进行匹配。
语法可参考requests库 requests_html库——简单数据爬取。
select_one()只返回匹配到的第一个节点,相当于select(limit=1)。
标签: