爬虫 - jsonpath&lxml模块
一、常见响应内容分类
1、结构化响应内容
(1)json字符串
- 常用解析方式:json、jsonpath
(2)xml字符串
- xml:可扩展标记语言,更注重传输和存储数据
- 常用解析方式:re(正则)、lxml(xpath)
2、非结构化响应内容
(1)html字符串
- html:超文本标记语言,更注重数据的显示
- 常用解析方式:re(正则)、lxml(xpath)、beautifulsoup(xpath/正则/css选择器)、pyquery(css选择器)
二、jsonpath模块
1、jsonpath方法
- 适用数据:json字符串(需要先将json字符串转换为json对象,转换方式:
ret = json.loads(data)
) - 作用:可以按照key对python字典进行批量数据提取
- 使用方式:
ret = jsonpath.jsonpath(data, 'jsonpath语法')
- 返回数据类型:列表
2、jsonpath常用语法规则
$
取根节点@
取现行节点.
or[]
取子节点..
匹配任意位置节点*
匹配所有元素节点[]
迭代器标示[,]
迭代器内多选?()
过滤器()
表达式计算
三、lxml模块
1、xpath方法
- 适用数据:xml字符串、html字符串(需要先将xml/html字符串转换为Element对象,转换方式:
html = lxml.etree.HTML(text)
)
- lxml.etree.HTML(text)可以自动补全标签
- lxml.etree.tostring函数可以将Element对象再转换回字符串
- 应以lxml.etree.tostring的返回结果作为提取数据的依据
- 作用:快速的定位HTML\XML 文档中特定元素以及获取节点信息(文本内容、属性值)
- 使用方式:
ret = html.xpath('xpath语法')
- 返回数据类型:列表
- 空列表:未定位到任何元素
- 由字符串构成的列表:匹配到文本内容或某属性的值
- 由Element对象构成的列表:匹配到标签,列表中的Element对象可以继续进行xpath
2、XPath常用语法规则
(1)基础语法
/
从根节点选取,或元素和元素之间的过渡//
从当前节点内选取节点.
选取当前节点..
选取当前节点的父节点@
选取属性text()
选取文本
(2)节点修饰语法
索引修饰
[数值]
通过索引定位[last()-n]
通过索引定位倒数第n+1个元素[position()>n]
通过索引定位第n个元素之后的元素属性值修饰
[@属性名=属性值]
通过属性值定位元素[text()=”文本内容“]
通过文本定位元素节点值修饰
[节点名>n]
通过节点值定位结果为True的元素包含关系修饰
[contains(@属性名,属性值)]
定位包含对应属性名和属性值的元素[contains(text(),"文本内容")]
定位包含对应文本的元素
(3)其他语法
*
匹配任意元素节点@*
匹配任意属性节点node()
匹配任意类型节点语法1|语法2
多个语法匹配节点
四、实战演练
lxml模块应用——百度贴吧
1 | import requests |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 妙妙屋!