Python个人学习笔记 BeautifulSoup模块——HTML标签匹配

2023-09-08 11:08:10     来源:哔哩哔哩

解析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)。

标签:

[责任编辑:news001]

为您推荐