python强大的爬虫解析器: parsel(二)

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

(1)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!