调用res.json()报JSONDecodeError: Expecting value问题求解
问题排查与解决方法
报错根因
你请求的URL返回的是JavaScript文件内容,不是标准JSON格式,直接调用res.json()方法无法解析,所以触发JSONDecodeError。如果请求被站点反爬拦截返回空内容,也会出现line 1 column 1 (char 0)的报错。
步骤1:验证请求是否正常返回内容
首先加请求头模拟浏览器发起请求,避免被反爬拦截,同时打印响应状态码和前1000个字符确认内容结构:
import requests # 模拟浏览器请求头 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" } res = requests.get( 'https://www.expresslanes.com/themes/custom/transurbangroup/js/on-the-road/entry_exit.js?v=1.x', headers=headers ) # 确认请求状态码为200代表请求成功 print("响应状态码:", res.status_code) # 打印前1000个字符查看JS内容结构 print("响应内容前1000字符:\n", res.text[:1000])
步骤2:提取JS中的JSON数据
该JS文件以变量 = JSON数据的格式存储站点点位数据,用正则匹配提取出JSON部分后再解析即可:
import re import json # 匹配JS中变量赋值的JSON部分,匹配规则可根据打印的实际内容调整 pattern = re.compile(r'var\s*entryExitPoints\s*=\s*(.*?);\s*$', re.S) match_result = pattern.search(res.text) if match_result: # 提取JSON字符串并解析 json_content = match_result.group(1).strip() target_data = json.loads(json_content) print("数据类型:", type(target_data)) # 后续可直接处理target_data else: print("未匹配到目标JSON数据,请根据实际JS结构调整正则匹配规则")
内容的提问来源于stack exchange,提问作者silbia
相关产品推荐
相关产品推荐

