iquery icon indicating copy to clipboard operation
iquery copied to clipboard

火车票查询报错: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Open guyskk opened this issue 8 years ago • 9 comments

Python 3.5.2 和 Python 3.6.0 都试了,都报错:

$ uname -a
Linux localhost.localdomain 4.8.13-1-ARCH #1 SMP PREEMPT Fri Dec 9 07:24:34 CET 2016 x86_64 GNU/Linux
$ python -V
Python 3.5.2
$ iquery -d 南京 上海 20170201
Traceback (most recent call last):
  File "/home/guyskk/.virtualenvs/py35/bin/iquery", line 11, in <module>
    sys.exit(cli())
  File "/home/guyskk/.virtualenvs/py35/lib/python3.5/site-packages/iquery/core.py", line 112, in cli
    result = query(args.as_train_query_params)
  File "/home/guyskk/.virtualenvs/py35/lib/python3.5/site-packages/iquery/trains.py", line 250, in query
    return TrainTicketsQuery(*params).query()
  File "/home/guyskk/.virtualenvs/py35/lib/python3.5/site-packages/iquery/trains.py", line 238, in query
    rows = r.json()['data']['datas']
  File "/home/guyskk/.virtualenvs/py35/lib/python3.5/site-packages/requests/models.py", line 850, in json
    return complexjson.loads(self.text, **kwargs)
  File "/usr/lib64/python3.5/json/__init__.py", line 319, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python3.5/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python3.5/json/decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

guyskk avatar Jan 18 '17 09:01 guyskk

也遇到这样的问题了

imcake avatar Jan 23 '17 15:01 imcake

simplejson也试了 一样挂

AceChampion avatar Feb 09 '17 03:02 AceChampion

ubuntu 16.04 python 3.5.2 same issue.

jp1017 avatar Apr 04 '17 12:04 jp1017

same,too

streamsteel avatar Apr 05 '17 15:04 streamsteel

https://kyfw.12306.cn/otn/lcxxcx/query 返回403

judehsu avatar Apr 06 '17 06:04 judehsu

是因为火车站的地址变了,而且不止这一个问题,即使换了地址,返回的jason有问题 地址:https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-4-30&leftTicketDTO.from_station=GZQ&leftTicketDTO.to_station=HCQ&purpose_codes=ADULT

json返回: validateMessagesShowId: "_validatorMessage", status: true, httpstatus: 200, data: [ { queryLeftNewDTO: { train_no: "650000K7950D", station_train_code: "K795", start_station_telecode: "GGQ", start_station_name: "广州东",

但是get回来的status是false,导致下面的data不显示,怎么办

SunYong0821 avatar Apr 20 '17 08:04 SunYong0821

查询返回的地址变了,并且返回的json数据也变了。 请求的url应该是:

url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'.format(
        date, from_station, to_station
)

json返回的数据:

{
    "validateMessagesShowId": "_validatorMessage",
    "status": true,
    "httpstatus": 200,
    "data": {
        "result": [
            "|预订|240000G1810B|G181|VNP|QDK|JNK|QDK|12:59|15:40|02:41|N|WBMhLLDMWbAfcmawvlSndz8yZ0Xu6xOm6BdI0rQmDRDJRRGW|20170504|3|P2|05|09|0|0|||||||||||无|无|无|O0M090|OM9",
       ······     "9eHj0zGInflSvrhNSkpVo5JvfvWHJT4vAC%2F6tSLDFaFPJCEajKvBOyFI6yC0r39jxun51QYZe%2BkP%0AIAOzhoFmAT6ErBFVr5E0AIFzurB2UxuS4UwY3S%2Fgk6V%2B6W3NPGE7w2fPn8LSMvN5JUV1macAtmF1%0AbAN1poLftoMlLGFHUCrA84KpsyPf22QysLsHc04yb7%2FJueLEF9aATvic6f0F6ll4yUuxa8zMTolI%0AyJO49gg%3D|预订|5l0000G23460|G235|AOH|QDK|JNK|QHK|20:26|22:49|02:23|Y|yVwR8wOWON2rkvNz%2BpO6TQCoCwwRwypnwxARitfqn066AnvX|20170504|3|H1|06|10|0|0|||||||||||有|有|20|O0M090|OM9"
        ],
        "flag": "1",
        "map": {
            "JNK": "济南",
            "QDK": "青岛",
            "QHK": "青岛北"
        }
    },
    "messages": [],
    "validateMessages": {}
}

应返回的字典为: available_trains = r.json()['data']['result']

火车时刻信息如下: array(35) { [0]=> string(257) "2Ba09a2VQWV808rnsgLwG4BFFolHLYeA5IfaQV5cuf2GZbNKe2Avf8e7kY41rNN1N%2F72kriF%2F4%2FH%0AgBRP320tWAs5xShj9JLAEcnz7ywy4OnuOEOoMRJZyGOnSOrlju7zt4aSnu94RyYXudlyCPRZB5p2%0Aco14oTo4eQVj31ZYyQ5CRCTe03oGijOEeJfavVFNgSurkQ0bytBB6qcJtRoK7dCuXb286No%2BGrDI%0AFad5BUJGeteT" [1]=> string(6) "预订" [2]=> string(12) "880000Z27403" [3]=> string(4) "Z271" [4]=> string(3) "XNO" [5]=> string(3) "QDK" [6]=> string(3) "JNK" [7]=> string(3) "QDK" [8]=> string(5) "00:57" [9]=> string(5) "04:51" [10]=> string(5) "03:54" [11]=> string(1) "Y" [12]=> string(66) "1iMJnq3muQzcVxX4pWvyiy0ak0mtgVQbDZif%2Br4wDMJWNVt7e%2FNoSSCUzpg%3D" [13]=> string(8) "20170505" [14]=> string(1) "3" [15]=> string(2) "O1" [16]=> string(2) "18" [17]=> string(2) "21" [18]=> string(1) "0" [19]=> string(1) "0" [20]=> string(0) "" [21]=> string(0) "" [22]=> string(0) "" [23]=> string(2) "17" [24]=> string(0) "" [25]=> string(0) "" [26]=> string(3) "有" [27]=> string(0) "" [28]=> string(3) "有" [29]=> string(3) "有" [30]=> string(0) "" [31]=> string(0) "" [32]=> string(0) "" [33]=> string(8) "10401030" [34]=> string(4) "1413" }

liopoos avatar May 04 '17 04:05 liopoos

requests加请求头

viviov avatar Sep 03 '17 14:09 viviov

现在查询上海到北京的列车,返回的json字符串是这样的,不知道该怎么改代码。那一串加密字符串该怎么弄呢? { "data":{ "flag":"1", "map":{ "AOH":"上海虹桥", "BJP":"北京", "SHH":"上海", "VNP":"北京南" }, "result":["C6H7PAw2v7fLotgoNjKP3Fdu0Axat3RR%2FsLLWJeNnmxS0UBrIzyf6qr90LjAIVweNjGmktIa%2FG8d%0Adz1clk91c8xb9XfahUC0tAU1bVvmqFk2Vpc2TixPwmm3BZUuOqcGk6Ve%2BKpGeEOP2vyY%2FoybGVuk%0Aj9xai%2FRlyu7TPT%2Bc2OQsZBSRwyyHjmtGsBYu%2Bxy3%2FzLkJUj4T%2F5mcPFyNouju7qvaZH2NJj4bvMH%0A54Cii85tvoNaVF1UiPE69Iz%2BF2W7OURVWw%3D%3D|预订|5l0000G10262|G102|AOH|VNP|AOH|VNP|06:30|12:18|05:48|Y|e%2BvSGQZZA3I6imOJ5e8%2F%2FPNwfvVXoITXfj10xH0R3MDJ%2B5fK|20180114|3|HZ|01|10|1|0|||||||||||有|有|17||O0M090|OM9|1"] }, "httpstatus":200, "messages":"", "status":true }

fuowang avatar Jan 13 '18 03:01 fuowang