iquery
iquery copied to clipboard
火车票查询报错: json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
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)
也遇到这样的问题了
simplejson也试了 一样挂
ubuntu 16.04 python 3.5.2 same issue.
same,too
https://kyfw.12306.cn/otn/lcxxcx/query 返回403
是因为火车站的地址变了,而且不止这一个问题,即使换了地址,返回的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不显示,怎么办
查询返回的地址变了,并且返回的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" }
requests加请求头
现在查询上海到北京的列车,返回的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 }