树莓派运行shga项目遇json.decoder.JSONDecodeError,疑config.json有误
树莓派运行shga项目报错排查方案
问题背景
我在树莓派上运行shga项目时启动报错,当前config.json配置内容如下:
{ "telegram_token": "token", "telegram_chat_id": "id", "vinted": { "urls": [ "https://www.vinted.fr/vetements?order=newest_first" ] } , "lbc": { "urls": [ "https://www.leboncoin.fr/annonces/offres/ile_de_france/" ], "login": "login", "password": "password", "use_saved_searches": true } }
运行python app.py时触发报错:
(env) pi@raspberrypi:~/shga $ python app.py Traceback (most recent call last): File "/home/pi/shga/app.py", line 46, in <module> main() File "/home/pi/shga/app.py", line 42, in main process_lbc() File "/home/pi/shga/app.py", line 29, in process_lbc lbc_handler = LBCHandler(lbc_config) File "/home/pi/shga/util/lbc.py", line 47, in __init__ self._login() File "/home/pi/shga/util/lbc.py", line 57, in _login bearer = json.loads(response.text)["access_token"] File "/usr/lib/python3.9/json/__init__.py", line 346, in loads return _default_decoder.decode(s) File "/usr/lib/python3.9/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/usr/lib/python3.9/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
排查解决步骤
这个报错说明代码尝试解析空内容为JSON,根源是Le Bon Coin(LBC)登录接口返回的响应为空,而非预期的JSON格式。按以下步骤逐步排查:
1. 修复config.json语法问题并替换占位符
你的配置中vinted块末尾多了一个冗余逗号(},后无同级键),虽然部分解析器能兼容,但建议修正。同时必须替换所有占位符为真实信息:
{ "telegram_token": "你的Telegram机器人token", "telegram_chat_id": "你的Telegram聊天ID", "vinted": { "urls": [ "https://www.vinted.fr/vetements?order=newest_first" ] }, "lbc": { "urls": [ "https://www.leboncoin.fr/annonces/offres/ile_de_france/" ], "login": "你的LBC账号", "password": "你的LBC密码", "use_saved_searches": true } }
可以用本地命令验证JSON合法性:
python -m json.tool config.json
如果输出格式化后的JSON,说明语法无问题;若报错则按提示修正。
2. 调试LBC登录接口响应
修改util/lbc.py中的_login方法,添加调试代码查看请求状态和响应内容:
def _login(self): # 保留原有代码,在requests.post后添加以下内容 response = requests.post(url, data=data, headers=headers) print(f"LBC登录请求状态码: {response.status_code}") print(f"LBC登录响应内容: {repr(response.text)}") # 原有解析代码...
重新运行python app.py,根据输出判断:
- 若状态码为401:账号密码错误,或LBC启用了二次验证/验证码
- 若状态码为403:树莓派IP被LBC反爬机制封禁,或请求头模拟度不足
- 若状态码为200但响应为空:网络波动或接口变更,需检查项目是否有最新更新
3. 检查依赖与网络环境
- 更新项目依赖:在虚拟环境中执行
pip install --upgrade requests - 测试网络连通性:运行
curl -I https://www.leboncoin.fr,确认返回200状态码 - 若需代理访问,需在代码中添加代理配置或设置系统全局代理
4. 隔离LBC模块验证
修改app.py的main函数,暂时注释掉process_lbc()调用,只保留Vinted模块测试:
def main(): process_vinted() # process_lbc()
若能正常运行,说明问题完全集中在LBC登录逻辑,与config.json基础格式无关。
内容的提问来源于stack exchange,提问作者elgolmon
相关产品推荐
相关产品推荐

