【debug】json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

摘要

环境:

背景:

我用python写一个获取12306车票信息json数据的脚本时,遇到如下报错:

Traceback (most recent call last):
  File "C:/Users/JohelLiang/Desktop/python/specialTicket.py", line 68, in <module>
    json = respone.json()
  File "E:\Python37\lib\site-packages\requests\models.py", line 897, in json
    return complexjson.loads(self.text, **kwargs)
  File "E:\Python37\lib\json\__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "E:\Python37\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "E:\Python37\lib\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.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 放到百度上查询,发现大多都说是json数据格式的问题,然而我对json数据进行检查,或者按照百度说的方法,将加载json数据的方法改为兼容非标准格式模式,即 json.loads(json_str, strict=False) ,依然行不通,车票信息的json数据如下:

问题发现:

之后我无意中把自己的网络换了一个环境,意外的发现数据竟然获取成功,不再报错,频繁获取也不会报错,原先的环境无论怎么刷新都是会报错的。

于是我对DNS进行排查(之前试过用几十个代理对json数据进行获取,发现也是同一个报错,所以确定不是ip限制的问题),发现原环境解析 kyfw.12306.cn 的实际ip为 59.34.229.253 ,新环境解析 kyfw.12306.cn 的实际ip为 113.96.140.252 ,如下图:

原环境:

新环境:

kyfw.12306.cn 可解析出的实际ip地址共有 个,分别是 59.34.229.253、113.96.140.253、113.96.140.252、59.34.229.254 ,对其进行排查,发现只有访问的实际ip是 113.96.140.252 时,是可以成功获取json数据的。

解决问题:

于是乎,我想到在hosts中加入12306的固定域名解析,发现问题得以解决,无论如何频繁获取json数据,都不会报错,解决步骤如下:

1、win+R 输入 cmd 打开命令行工具

2、输入 nslookup 命令并访问域名对象 kyfw.12306.cn ,查询域名对应的所有实际ip

3、找到 hosts文件 ,在windows中hosts文件路径:C:\Windows\System32\drivers\etc

4、在hosts文件最后新增一行内容(对解析出的4个ip进行替换,选取可成功获取json数据的ip):113.96.140.252     kyfw.12306.cn

5、成功获取json数据

  • 32
    点赞
  • 80
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值