python强大的爬虫解析器: parsel(二)
0 背景
在之前的文章, 我们介绍了 python强大的爬虫css+xpath解析器:parsel, parsel可以使用xpath和css解析语法提取HTML和XML数据, 但在实际的爬虫工作中, 除了html, 我们可能还会遇到由ajax请求发起响应的json数据, 此时, 我们就不能使用html的解析方式去解析json, 如何快速解析json呢? 我们也在之前的文章单独介绍了: python 爬虫解析库: jsonpath , 用于json数据的快速解析.
那能否将两者的优势再一次结合起来呢? 当然是可以的.
parsel支持json解析了, 使用的是JMESPath
的语法.
JMESPath是一个用于处理和查询JSON数据的查询语法库。它允许我们使用简单、一致和强大的方式从复杂的JSON结构中提取数据。通过定义jmespath语法,我们可以将数据提取,数据筛选,数据格式转换动作只需一步即可完成,大大加快对于复杂的JSON数据的处理速度。
JMESPath支持多种查询操作符,可以帮助我们灵活地处理JSON数据,满足各种查询需求。
接下来我们也使用parsel的JMESPath方法完成json数据的快速解析, 方便和简化爬虫解析的工作.
1 使用
1 安装 | 导入 | 基本使用
parsel的安装, 导入和基本使用可以我之前写的文章: python强大的爬虫css+xpath解析器:parsel. 这里不再过多描述.
2 json的解析
首先, 有这样一份json数据clip_20231117_204357.png.json
, 这个数据是之前通过微信OCR识别提取的高精度识别数据: python调用微信高精度OCR模型识别文本 , 数据比较长, 做了一些省略处理.
{
"taskId": 2,
"ocrResult": [
{
"text": "like,you know,night. u201d"",
"location": {
"left": 200.85,
"top": 169.65001,
"right": 815.10004,
"bottom": 204.75
},
"pos": {
"x": 200.85,
"y": 169.65001
}
},
{
"text": "刚刚发生了什么?",
"location": {
"left": 181.35,
"top": 351.0,
"right": 487.5,
"bottom": 390.0
},
"pos": {
"x": 181.35,
"y": 351.0
}
},
...
由于这个返回的是json, 如果我们想单独获取文本的话, 我们就得提取里面的text
字段.
正常的python使用是:
from json import loads
with open('clip_20231117_204357.png.json', 'r') as f:
result = loads(f.read())
# result = response.json()
content = ''
for line in result['ocrResult']:
content += 'n' + line['text']
content = content.strip()
如果使用parsel的话, 我们可以使用:
import parsel
from pathlib import Path
content = Path(r'clip_20231117_204357.png.json').read_text()
result = parsel.Selector(content)
data = result.jmespath('ocrResult[].text').getall()
print(data)
# ['like,you know,night. u201d"',
# '刚刚发生了什么?',
# '当你运行命命时 scrapy runspider quotes_spider.py 斯克里奇在里面寻',
# '找 Spider 的定义,然后用它的爬行引擎运行。',
# '通过向中定义的URL发出请求启动的爬网 start_urls 属性(在本例',
# '中,只有引号的URL humor 并调用默认回调方法 parse ,将响应对象',
# '作为参数传递。在 parse 回调,我们使用CSS选择器循环引用元素',
# ...
# ]
其中,parsel.Selector()
可以直接接收json的字符串, 在爬虫中, 可以直接使用response.text
而不是response.json()
, 因此, 不管是html, 还是json格式的响应数据, 我们都可以通过response.text
作为参数直接扔给parsel.Selector()
.
另外, 这里使用的是JMESPath
的语法, 关于JMESPath
的语法, 可以参考官网以及利用它的在线解析器, 进行在线调试: https://jmespath.org/tutorial.html
2 关于
至此, parsel
框架基本完成了xpath
, css选择器
, 正则表达式
, json
数据的解析和提取, 基本在爬虫可以仅使用这一个库完成爬虫数据的高效快速解析.
欢迎关注我的微信公众号
原文始发于微信公众号(其之):python强大的爬虫解析器: parsel(二)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/204870.html