使用Python请求URL获取JSON失败,报错Expecting value
问题排查与解决
你遇到的错误Expecting value: line 2 column 1,本质是你请求的URL返回的不是JSON数据,而是HTML页面。直接访问https://www.landal.de/parks/beach-park-texel/unterkunfte/4bl得到的是网站的前端页面,而非你在开发者工具中看到的JSON接口数据。
解决步骤:
第一步:确认当前请求返回的内容
在代码中先打印响应文本,验证返回的是HTML:import requests from requests.exceptions import HTTPError try: response = requests.get('https://www.landal.de/parks/beach-park-texel/unterkunfte/4bl') response.raise_for_status() # 先打印响应文本,确认内容类型 print(response.text[:500]) # 打印前500字符查看 except HTTPError as http_err: print(f'HTTP error occurred: {http_err}') except Exception as err: print(f'Other error occurred: {err}')执行后你会看到HTML代码,证明当前请求的不是JSON接口。
第二步:定位真实的JSON接口
打开浏览器开发者工具(F12),切换到「Network」面板,刷新目标页面:- 筛选「XHR/Fetch」类型的请求,找到返回目标JSON的那条请求;
- 查看该请求的「Request URL」「Request Headers」(尤其是
User-Agent、Referer等字段)、请求参数; - 复制这些信息,用requests模拟这个接口请求。
第三步:模拟真实接口请求
比如假设找到的JSON接口是对应真实地址,带上必要的请求头:import requests from requests.exceptions import HTTPError headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36', 'Referer': 'https://www.landal.de/parks/beach-park-texel/unterkunfte/4bl' } try: # 替换为你找到的真实JSON接口URL response = requests.get('https://www.landal.de/api/your-target-endpoint', headers=headers) response.raise_for_status() jsonResponse = response.json() print("Entire JSON response") print(jsonResponse) except HTTPError as http_err: print(f'HTTP error occurred: {http_err}') except Exception as err: print(f'Other error occurred: {err}')
注意事项:
- 部分网站的接口可能需要携带Cookie或其他验证参数,这些都需要从开发者工具的请求中复制;
- 不要频繁请求接口,避免触发网站的反爬机制。
内容的提问来源于stack exchange,提问作者Niels
相关产品推荐
相关产品推荐

