火车余票查询(python)

11人阅读 评论(0) 收藏 举报
分类:

通过python可以对火车票余票进行查询。

一、获取并构建url地址

进入12306火车票查询,点击F12,尝试查询北京到上海的火车票,可以看到,它从某个url地址获取到了相关json类型数据,而返回的数据正是我们所需要的。


可以看出,该url地址提供了三个接口分别为train_date(时间),from_station(出发地),to_station(目的地),我们所要做的,就是构建这个url地址。

url2=("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}"
"&leftTicketDTO.from_station={}"
"&leftTicketDTO.to_station={}"
"&purpose_codes=ADULT").format(time,from_area,to_area)

接口中出发地和目的地都需要用相应的字母代替,所以我们要找到这个转换规则。


不难看出,我们找到了它的url地址,通过这个地址,我们可以看到它的相关转化。


因此,我们需要用到正则表达式将它提取出来,并保存在一个字典中。

import re,requests
url1="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9051"
html1=requests.get(url1).text
area=re.findall("([\u4E00-\u9FA5]+)\|([A-Z]+)",html1)
area=dict(area)

接下来就是通过地点获取它的字母数据

from_area=area[input("出发地")]
to_area=area[input("目的地")]
time=input("时间(年-月-日)")

(注意输入时时间格式2018-04-15)

自此,我们就可以完整构建一个url地址。

二、获取相关数据
html2=requests.get(url2)
s=html2.json()["data"]["result"]
t=html2.json()["data"]["map"] #获得到一个字典
三、输出相关数据

在这里我使用了漂亮表格输出,所以我引用了模块PrettyTable

from prettytable import PrettyTable
table=PrettyTable(["车次","出发站","到达站","出发时间","到达时间","历时","特等座","一等座","二等座","软卧","硬卧","软座","硬座","无座"])

for area_new in s:
    list=area_new.split("|")
    YUNXIN=list[1]
    if YUNXIN=="列车停运":
        continue
    no=list[3]
    from_area=list[6]
    to_area=list[7]
    star_time=list[8]
    over_time=list[9]
    pass_time=list[10]
    TDZ=list[32] or"--"
    YDZ=list[31] or"--"
    EDZ=list[30] or"--"
    RW=list[23] or "--"
    YW=list[28] or "--"
    RZ=list[27] or"--"
    YZ=list[29] or"--"
    WZ=list[26] or"--"
    table.add_row([no,t[from_area],t[to_area],star_time,over_time,pass_time,TDZ,YDZ,EDZ,RW,YW,RZ,YZ,WZ])
print(table)
四、完整代码
import re,requests
from prettytable import PrettyTable

url1="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9051"
html1=requests.get(url1).text
area=re.findall("([\u4E00-\u9FA5]+)\|([A-Z]+)",html1)
area=dict(area)

from_area=area[input("出发地")]
to_area=area[input("目的地")]
time=input("时间(年-月-日)")
url2=("https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}"
"&leftTicketDTO.from_station={}"
"&leftTicketDTO.to_station={}"
"&purpose_codes=ADULT").format(time,from_area,to_area)

html2=requests.get(url2)
s=html2.json()["data"]["result"]
t=html2.json()["data"]["map"]

table=PrettyTable(["车次","出发站","到达站","出发时间","到达时间","历时","特等座","一等座","二等座","软卧","硬卧","软座","硬座","无座"])

for area_new in s:
    list=area_new.split("|")
    YUNXIN=list[1]
    if YUNXIN=="列车停运":
        continue
    no=list[3]
    from_area=list[6]
    to_area=list[7]
    star_time=list[8]
    over_time=list[9]
    pass_time=list[10]
    TDZ=list[32] or"--"
    YDZ=list[31] or"--"
    EDZ=list[30] or"--"
    RW=list[23] or "--"
    YW=list[28] or "--"
    RZ=list[27] or"--"
    YZ=list[29] or"--"
    WZ=list[26] or"--"
    table.add_row([no,t[from_area],t[to_area],star_time,over_time,pass_time,TDZ,YDZ,EDZ,RW,YW,RZ,YZ,WZ])
print(table)





查看评论

12306火车余票查询

测试地址:http://gengjian.24.lc/japson/123060.htm 调用12306官网的查询接口. 123060.htm 火车票余票查询Demo By ...
  • own_1991
  • own_1991
  • 2013-10-10 11:44:06
  • 5151

火车车次查询-余票查询--Api接口

1.来自12306的火车车次数据 使用12306网站的接口,查询余票。此接口采集自这里。 火车票余票查询 http://dynamic.12306.cn/otsquery/query/queryRe...
  • qxs965266509
  • qxs965266509
  • 2013-09-27 13:57:43
  • 10760

php查询12306火车票

  • 2017年09月06日 16:10
  • 1.13MB
  • 下载

火车票余票接口和火车票接口查询出来喽

火车票余票接口 经过本人无数次的尝试终于成功获取到12306官网的余票数据。 下面是采集到的数据(没有深度处理各个字段的关系,以数组的格式截图给大家)   火车票接口 ...
  • youacai
  • youacai
  • 2012-07-09 12:37:32
  • 11190

火车联网售票数据库设计和余票查询

表名 Train_class 火车车次表     Id Varchar(50) 标识     ...
  • huyingqi0418
  • huyingqi0418
  • 2017-03-19 14:38:47
  • 681

列车车次查询-余票查询-Api接口

查接口找到的,分享给大hou家,希望对大家
  • jia635
  • jia635
  • 2014-05-02 10:04:35
  • 1421

(五)Python查询12306余票:添加票价信息

前一篇–>docopt实现参数的输入—–查询任意时间任意车站余票票价的查询根据前面result的解析是无法获取的,票价需要另外发送请求获取。 请求链接: https://kyfw.1230...
  • qq_25343557
  • qq_25343557
  • 2018-01-03 20:17:44
  • 366

火车余票查询 V1.0 中文绿色版

  • 2010年02月11日 15:47
  • 422KB
  • 下载

PYTHON实现12306余票查询-2018年3月7日有效

先开看下实现结果:源码:from prettytable import PrettyTable import re,time,requests,json with open(r'D:\Pychar...
  • a583179
  • a583179
  • 2018-03-17 08:01:53
  • 47

火车余票查询

  • 2014年10月28日 20:53
  • 610KB
  • 下载
    个人资料
    等级:
    访问量: 280
    积分: 100
    排名: 132万+
    文章分类
    文章存档