在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
开源软件名称:kingname/JsonPathFinder开源软件地址:https://github.com/kingname/JsonPathFinder开源编程语言:Python 100.0%开源软件介绍:如何快速从深层嵌套 JSON 中找到特定的 Key#公众号 在爬虫开发的过程中,我们经常遇到一些 Ajax 加载的接口会返回 JSON 数据。如下图所示,是 Twitter 的用户时间线接口,返回了一段3000多行的深层嵌套 JSON: 其中的 现在问题来了, 我知道已经有一些第三方库可以直接根据字段名读取 JSON 内部任意深度的值,不过用别人的东西总没有自己写一个轮子来得过瘾。所以今天我们自己来手写一个模块,我把他叫做 效果演示我们用 Python 之父龟叔的 Twitter 时间线来作为演示,运行以后,效果如下图所示: 可以看到,从最外层开始一路读到 由于entries 字段列表中一共有20个元素,所以这里的18、19实际上对应了倒数第二条和倒数第一条数据。其中,倒数第二条的 cursor 对应的是本页第一条推文,而倒数第一条对应的是本页最后一条推文。所以当我们要往后翻页的时候,应该用的是倒数第一条的 cursor。 我们试着来读取一下结果: 非常轻松地获取到了数据。不需要再肉眼在 JSON 中寻找字段了。 原理分析JsonPathFinder 的原理并不复杂,全部代码加上空行,一共只有32行,如下图所示: 因为一个字段在 JSON 中可能出现很多次,所以 而核心算法,就是 代码第10-15行,分别对列表和字典进行处理。对于字典来说,我们分离 key 和 value,写作: for key, value in xxx.items():
... 对于列表,我们分离索引和元素,写作: for index, element in enumerate(xxx):
... 所以如在第11和第13行,使用生成器推导式分别处理字典和列表,这样得到的 我们知道,在 Python 里面可以迭代的对象除了字典和列表以外,还有很多其他的对象,不过我这里只处理了字典和列表。大家也可以试一试修改10-15行的条件判断,增加对其他可迭代对象的处理逻辑。 代码第16-22行,对处理以后的 key-value 进行迭代。首先记录到当前字段为止的迭代路径到 对于普通函数来说,要递归调用,直接 由于 正确使用有了这个工具以后,我们可以直接用它来解析数据,也可以用来辅助分析数据。例如,Twitter 时间线的正文是在 但有时候,我们除了获取正文外,还需要每一条推文的其他信息,如下图所示: 可以看到, 这种情况下,我们可以先获取从外层到 从打印出来的路径列表里面可以看到,我们只需要获取 致谢感谢 @antx-code 同学的建议,Add find mode,增加按 Value 搜索的功能。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论