You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python爬虫下载JSON报JSONDecodeError如何让循环继续执行?

问题原因

你遇到的json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)报错,是请求返回的响应内容为空或者不是合法JSON格式导致的,一般就是文件缺失、404、反爬拦截这类场景触发的。你之前加try...except报缩进错误,通常是代码缩进层级没对齐导致的语法问题。

修复后可直接运行的代码
import json
import requests
from time import sleep

# 你之前的其他变量定义保持不变 x1、today2、link_append、headers、path 这些都保留原来的就行
RACE_L = x1["pageProps"]["initialState"]["racecards"]["races"][today2]
for r1 in RACE_L:
    id_race = r1["uuid"]
    link2go = link_append + id_race + '.json'
    n1 = "races"
    n12 = "races"
    n2 = r1["uuid"]
    name1 = n12 + '-' + n2
    name1 = today2 + '_' + name1 + '.json'
    
    try:
        print('正在爬取 %s' % link2go)
        r3 = requests.get(link2go, headers=headers, timeout=10)
        sleep(2)
        # 先判断请求是否成功,非200直接进入异常处理逻辑
        r3.raise_for_status()
        # 解析JSON,内容不合法时会触发JSONDecodeError
        x3 = r3.json()
    # 同时捕获JSON解析失败、请求本身失败两类常见异常(404、超时、连接错误等都包含在内)
    except (json.decoder.JSONDecodeError, requests.exceptions.RequestException):
        print('爬取 %s 失败,跳过当前项' % name1)
        # 跳过后续写入逻辑,直接进入下一轮循环爬取下一个目标
        continue
    
    # 走到这里说明JSON解析成功,再打开文件写入,避免生成无效空文件
    with open(path +'%s' % name1,'w',encoding='utf-8') as f2:
        print('正在写入 %s 到文件' % name1)
        json.dump(x3, f2, indent=4, ensure_ascii=False)
改动说明
  • 调整了执行顺序:先完成请求、JSON解析校验,确认内容合法后再打开本地文件写入,避免生成无效的空JSON文件
  • 明确捕获JSONDecodeError和请求相关异常,触发异常时打印提示后直接continue跳过当前项,不会中断整个循环
  • 额外增加了响应状态码校验、请求超时设置,进一步提升代码稳定性,避免其他异常导致脚本终止

内容的提问来源于stack exchange,提问作者Paul R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:57:01