12306火车票查询

Wesley13
• 阅读 464

因为我已经足够懒了,只显示了硬卧和硬座的余票信息(毕竟其他票我也没什么购买欲望)。

===========================以上全是扯淡题外话===========================

代码(GitHub地址)中所用到的接口,可以在12306官方新版查询网页中获取到。本文笔者使用了prettytable让显示结果更加美观,使用了json将纯文本的json格式转换成python中的字典数组,在获取数据的时候,使用了User-Agent来模拟浏览器。

代码使用操作方式:

python main.py 2016-06-22 赣州 上海

第一个地址是出发城市,第二个地址是去往的城市。

# encoding:utf-8

import urllib2,os,sys,json,time

from prettytable import PrettyTable

def get_station_list():
    f = open('stations.dat')
    lines = f.readlines()
    dic = {}
    for line in lines:
        line = line.strip('\n')
        dic[line.split(' ')[0]] = line.split(' ')[1]
    return dic

def get_content(url):
    req_header = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36'}
    req = urllib2.Request(url, None, req_header)
    resp = urllib2.urlopen(req,None,30)
    content = resp.read()
    return content

if __name__=='__main__':
    try:
        train_date   = sys.argv[1]
        from_station = get_station_list()[sys.argv[2]]
        to_station   = get_station_list()[sys.argv[3]]
    except:
        print 'usage: python main.py 2016-06-22 赣州 南昌'
        sys.exit(0)
        pass
    while 1==1:
        os.system('clear')
        print '日期:\033[1;32;40m%s\033[0m    从 \033[1;31;40m%s\033[0m 到 \033[1;31;40m%s\033[0m'%(train_date, sys.argv[2], sys.argv[3])
        url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date='+train_date+'&leftTicketDTO.from_station='+from_station+'&leftTicketDTO.to_station='+to_station+'&purpose_codes=ADULT'
        # print url
        content = get_content(url)
        j = json.loads(content)
        t = PrettyTable(["车次", "出发站", "到达站", "出发时间", "到达时间", "历时", "硬卧", "硬座"])
        t.align[u"出发站"] = "l" # Left align city names
        t.align[u'到达站'] = 'l'
        t.padding_width = 1 # One space between column edges and contents (default)
        for item in j['data']:
            # item['secretStr'] = ''
            if u'无' == item['queryLeftNewDTO']['yz_num']:
                item['queryLeftNewDTO']['yz_num'] = ''
            if u'无' == item['queryLeftNewDTO']['yw_num']:
                item['queryLeftNewDTO']['yw_num'] = ''
            t.add_row([
                item['queryLeftNewDTO']['station_train_code'],
                item['queryLeftNewDTO']['from_station_name'],
                item['queryLeftNewDTO']['to_station_name'],
                item['queryLeftNewDTO']['start_time'],
                item['queryLeftNewDTO']['arrive_time'],
                item['queryLeftNewDTO']['lishi'],
                item['queryLeftNewDTO']['yw_num'],
                item['queryLeftNewDTO']['yz_num']
                ])
        print t
        operation = raw_input('')
        if 'exit' == operation or 'q' == operation:
            sys.exit(0)
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
2年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Stella981 Stella981
2年前
Linux菜鸟到老鸟的那些建议
相信很多同学对Linux(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.linuxprobe.com%2Fchapter00.html)的认识并不多,平常接触的也不多,对Linux的开发运维等也是一无所知。如今,如果要做一名优秀的程序猿,掌握Linux知识已经是一门必备技能了
Wesley13 Wesley13
2年前
MySQL总结(十一)子查询
!(https://oscimg.oschina.net/oscnet/upa344f41e81d3568e3310b5da00c57ced8ea.png)子查询1\.什么是子查询需求:查询开发部中有哪些员工selectfromemp;通
Stella981 Stella981
2年前
DOIS 2019 DevOps国际峰会北京站来袭~
DevOps国际峰会是国内唯一的国际性DevOps技术峰会,由OSCAR 联盟指导、DevOps时代社区与高效运维社区联合主办,共邀全球80余名顶级专家畅谈DevOps体系与方法、过程与实践、工具与技术。会议召开时间:2019070508:00至2019070618:00结束会议召开地点:北京主办单位:DevOps
Stella981 Stella981
2年前
Android蓝牙连接汽车OBD设备
//设备连接public class BluetoothConnect implements Runnable {    private static final UUID CONNECT_UUID  UUID.fromString("0000110100001000800000805F9B34FB");
Stella981 Stella981
2年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
4个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这