怎样通过Python脚本自动抓取并解析JSON格式的复杂API响应?

P粉602998670

P粉602998670

2026-08-03

958人浏览

原创

推荐用jsonpath-ng解析深层嵌套json,支持过滤、递归和通配,避免硬编码路径出错;http状态码正常但json解析失败时,先检查response.content和content-type;分页优先提取响应中的next_page_url或cursor;高频请求应使用requests.session()复用连接并显式设置accept头。

怎样通过python脚本自动抓取并解析json格式的复杂api响应?

遇到嵌套太深的JSON,用jsonpath比层层写response.json()['data']['items'][0]['meta']['tags']靠谱

手动钻取 5 层以上的字典键不仅容易拼错,还让代码脆弱得一碰就崩。比如某电商 API 返回的 response.json() 里,商品数据藏在 ['result']['payload']['list']['products'][2]['attributes']['specs']['detail'] 这种路径下,硬编码访问几乎必然出错。

推荐直接上 jsonpath-ng(注意不是老版 jsonpath):

pip install jsonpath-ng
  • $..product[?(@.in_stock == true)] 一键捞出所有有货商品,不用管它嵌在哪层
  • 支持过滤、通配、递归下降(..)、数组索引([0]),语法接近 XPath
  • 返回的是匹配对象列表,空结果不会抛 KeyError,适合不确定结构的响应
  • 别用 jsonpath(无 -ng 后缀),它不支持过滤表达式,遇到 ?(@.price > 100) 直接报错

HTTP 状态码正常但 JSON 解析失败?先检查 response.contentresponse.headers.get('content-type')

常见假象:打印 response.status_code 是 200,调 response.json() 却报 JSONDecodeError: Expecting value。本质是服务器返回了 HTML 错误页(如 403 页面)、重定向跳转响应,或 Content-Type 声明为 text/html 却塞了 JSON 字符串。

php版微信js-sdk支付接口类
php版微信js-sdk支付接口类

php版微信js-sdk支付接口类

下载
  • 先执行 print(response.content[:200]) 看原始字节 —— 如果开头是 b'',说明被反爬拦住了
  • 检查 response.headers.get('content-type', ''),若含 html 或为空,别硬调 .json()
  • 某些 API 用 application/json;charset=utf-8,但实际响应体是 GBK 编码,需先 response.content.decode('gbk')json.loads()

带分页的 API,别依赖文档写的 page 参数,优先看响应里的 next_page_urlcursor

很多 REST API 的分页机制根本不按套路出牌:参数名可能是 offset/limitcursorafter,甚至整个翻页 token 藏在响应体某个字段里(比如 response.json()['paging']['cursors']['after'])。硬写死 params={'page': i} 很可能漏数据或重复请求。

  • 每次请求后解析响应,提取下一页标识:next_cursor = data.get('paging', {}).get('next_cursor')
  • 若存在,作为下次请求的 paramsheaders(有些用 Authorization: Bearer {cursor}
  • 留意 cursor 是否有时效性(比如 10 分钟过期),避免长时间循环中复用旧值
  • 设置最大重试次数和超时,防止因 cursor 失效陷入无限请求

requests.Session() 复用连接 + 手动控制 Accept 头,比反复 requests.get() 稳定得多

高频调用 API 时,每次都新建 TCP 连接,既慢又容易触发限流。更隐蔽的问题是:某些 API 对 Accept 头敏感,不显式声明 application/json 可能返回 XML 或 HTML。

  • 创建会话对象:session = requests.Session(),然后统一配置:session.headers.update({'Accept': 'application/json', 'User-Agent': 'Mozilla/5.0'})
  • 复用连接池自动管理 keep-alive,吞吐量提升明显
  • 为避免 DNS 缓存或连接泄漏,可设 session.mount('https://', requests.adapters.HTTPAdapter(pool_connections=10, pool_maxsize=10))
  • 别在循环里反复 requests.get(url) —— 每次都新建 session,DNS 解析和 TLS 握手开销叠加,延迟翻倍
实际跑起来之后,最常卡住的地方不是语法,而是 API 文档没写清楚的隐式依赖:比如必须先调登录接口拿 token,再把 token 放进后续每个请求的 Authorization 头;或者某个字段只在特定查询参数组合下才出现。抓包看真实响应,永远比读文档快。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

2023.07.20

1104

4

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

2023.07.25

2026

7

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.31

1184

3

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

2023.08.03

8519

23

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1431

5

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

1504

5

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

860

5

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.10

530

4

python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

1085

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PyCharm官方快速入门指南
PyCharm官方快速入门指南

共0课时 | 0人学习

Python函数定义官方教程
Python函数定义官方教程

共0课时 | 0人学习

Python 3.14.6官方文档
Python 3.14.6官方文档

共0课时 | 0人学习