Python - jsonpath 爬取方法

125 阅读1分钟

介绍

要用 jsonpath 实现类似的需求,首先需要明确你想要解析的文档是JSON格式的数据。jsonpath 是用于解析和提取JSON数据的路径表达式语言,类似于XPath用于XML的数据解析。假设你的目标是从某个JSON格式的网页数据中提取图片URL,下面是如何使用 jsonpath 完成这一任务。

1. 安装必要的库

bash
复制代码
pip install jsonpath-ng requests

2. 示例代码实现

python
复制代码
import requests
import json
import jsonpath

# 假设这是获取到的JSON数据
url = 'https://example.com/jsondata'
response = requests.get(url)
data = response.json()  # 获取JSON响应

# 使用JSONPath提取所有图片URL
image_urls = jsonpath.jsonpath(data, '$..imgUrl')

# 下载图片
for idx, img_url in enumerate(image_urls[0]):  # jsonpath 返回的是列表
    if img_url.startswith('http'):
        img_response = requests.get(img_url)
        with open(f'jay_chou_image_{idx}.jpg', 'wb') as f:
            f.write(img_response.content)
        print(f"图片 {idx} 下载成功!")

3. JSONPath语法和使用方式

  • 基本语法$.key,表示访问根元素的键。
  • 递归降级$..key,可以访问文档中所有层级的某个键。
  • 数组索引$.items[0],表示获取数组中第一个元素。数组索引:$.items[0],表示获取数组中第一个元素。
  • 过滤$.items[?(@.key=="value")],对数组进行条件过滤。过滤:$.items[?(@.key=="value")],对数组进行条件过滤。

例如,$..imgUrl 可以提取所有JSON结构中的 imgUrl 字段。