当前位置:   article > 正文

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 最有效的解答

json.decoder.jsondecodeerror: expecting value: line 1 column 1 (char 0)

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

今天爬取12306网站余票的时候,发现了该问题,找了一天的办法都无法解决,首先先分析该问题出现的原因,该问题提出获取的 JSON数据不对,可能是格式不对,或者根本就没有获取上。

例如要爬取下面的余票:
在这里插入图片描述
然后根据请求URL来获取它返回的JSON数据:

在这里插入图片描述
一般情况下直接就可以获得返回的JSON数据,但是确返回报错,显示JSON数据格式不对:
在这里插入图片描述
换了网络环境也不行,显然不是这原因,12306对外界爬虫做了一个稍微的障碍,用了对json数据格式进行处理还是不对,说明就根本没有获得JSON数据,难道是URL地址不对?那么在PyCharm里面按住ctrl 点击URL地址后,或者用浏览器打开这个URL地址发现:
在这里插入图片描述
这显示根据URL地址在浏览器中可以获取到返回的JSON数据,奇怪了,在浏览器中根据请求URL可以获得数据,那么通过python中为什么不行,显然是12306服务器拒绝了访问,设置了反爬虫,那么看看它返回的网页源码是什么,如果返回的对的JSON,那么学过网页的就知道,返回的直接就是上面一摸一样的:

url='https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2020-09-10&leftTicketDTO.from_station=TYV&leftTicketDTO.to_station=DTV&purpose_codes=ADULT'

response = requests.get(url)
print(response.text)
  • 1
  • 2
  • 3

结果输出如下:
在这里插入图片描述
这显然返回的是一个网页啊,不是JSON数据,那么就知道了,12306设置了反爬虫,不会直接根据它的URL地址来爬得数据,那么再将上面的源代码中的乱码矫正一下:

print(response.text.encode('ISO-8859-1').decode('utf-8'))

    在这里插入图片描述
    看见返回了一个错误的网页界面,里面肯定没有JSON,所以肯定一直报错,既然12306设置了反爬虫,并且浏览器能打开,python打不开,那只有将headers带进去进行爬取,根据实验,需要将Cookie带到headers中,或者你将User-Agent也代进去:
    在这里插入图片描述

    headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:80.0) Gecko/20100101 Firefox/80.0' ,
             'Cookie':'_uab_collina=159902892220498500233763;
     JSESSIONID=3BE46C069182  ....
    '}          //将cookie复制上去就行,这里就省略了
    
    response = requests.get(url , headers = headers)    //带上头来进行访问
    • 1
    • 2
    • 3
    • 4
    • 5

    再来进行输出JSON:

    print(response.json())

      那么此时就可以获得数据了:

      在这里插入图片描述

      那么此时获取返回的网页源代码也就正确了:

      在这里插入图片描述

      声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/484928
      推荐阅读
      相关标签
        

      闽ICP备14008679号