程序很简单,主要是调用了12306的api。用法也很简单:输入出发地、目的地、乘车时间,将查询到的结果在命令行打印出来。对了,这个是我以前参照了:Python3 实现火车票查询工具_Python_实验楼 - 实验楼 ,现在我把简单修改了一下,适合新人练练手!

有两点需要注意:

1.from stations import stations这个是stations是个存储城市和代码的字典{},譬如南京,对应的城市代码是NKH,这个就是在stations里查找得出的。

2.主要用到了colorama,docopt,prettytable可以将命令行的查询结果以彩色表格形式打印。

3.用到了while True....这样可以保证程序一直循环,查询一次,输出结果以后,再次开始新一轮的查询。如果需要中断程序可以用ctrl+c。

使用方法如下:

"""

Usage:

输入要查询的火车类型可以多选(动车d,高铁g,特快t,快速k,直达z)

输入出发地、目的地、出发日期。

查询结果以命令行形式自动呈现。

Examples:

Please input the trainType you want to search :dgz

Please input the city you want leave :南京

Please input the city you will arrive :北京

Please input the date(Example:2017-09-27) :2018-03-01

"""

程序截图如下:

动态效果如下:https://www.zhihu.com/video/949055366730874880

程序源代码,包含两部分:1.stations.py 2.searchTrain.py

1.stations.py

import re

import requests

from pprint import pprint

url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018'

requests.packages.urllib3.disable_warnings()#如果不加此句会有:InsecureRequestWarning: Unverified HTTPS request is being made

html = requests.get(url,verify=False)

station = re.findall(u'([\u4e00-\u9fa5]+)\|([A-Z]+)', html.text)

stations = dict(station)

pprint(stations,indent = 4)

2.searchTrain.py

"""Usage:输入要查询的火车类型可以多选(动车d,高铁g,特快t,快速k,直达z)输入出发地、目的地、出发日期。查询结果以命令行形式自动呈现。Examples:Please input the trainType you want to search :dgzPlease input the city you want leave :南京Please input the city you will arrive :北京Please input the date(Example:2017-09-27) :2018-03-01"""

#coding = utf-8

#author = Lyon

#date = 2017-12-17

import json

import requests

from docopt import docopt

from prettytable import PrettyTable

from colorama import init,Fore

from stations import stations

class searchTrain:

def __init__(self):

self.trainOption = input('-d动车 -g高铁 -k快速 -t特快 -z直达,Please input the trainType you want to search :')

self.fromStation = input('Please input the city you want leave :')

self.toStation = input('Please input the city you will arrive :')

self.tripDate = input('Please input the date(Example:2017-09-27) :')

self.headers = {

"Cookie":"自定义",

"User-Agent": "自定义",

}

self.available_trains,self.options = self.searchTrain()

@property

def trains(self):

for item in self.available_trains:

cm = item.split('|')

train_no = cm[3]

initial = train_no[0].lower()

if not self.options or initial in self.options:

train = [

train_no,

'\n'.join([Fore.GREEN + cm[6] + Fore.RESET,

Fore.RED + cm[7] + Fore.RESET]),

'\n'.join([Fore.GREEN + cm[8] + Fore.RESET,

Fore.RED + cm[9] + Fore.RESET]),

cm[10],

cm[32],

cm[25],

cm[31],

cm[30],

cm[21],

cm[23],

cm[28],

cm[24],

cm[29],

cm[26],

cm[22] ]

yield train

def pretty_print(self):

pt = PrettyTable()

header = '车次 车站 时间 历时 商务座 特等座 一等 二等 高级软卧 软卧 硬卧 软座 硬座 无座 其他'.split()

pt._set_field_names(header)

for train in self.trains:

pt.add_row(train)

print(pt)

def searchTrain(self):

arguments = {

'option':self.trainOption,

'from':self.fromStation,

'to':self.toStation,

'date':self.tripDate

}

options = ''.join([item for item in arguments['option']])

from_station, to_station, date = stations[arguments['from']] , stations[arguments['to']] , arguments['date']

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

requests.packages.urllib3.disable_warnings()

html = requests.get(url,headers = self.headers,verify=False)

available_trains = html.json()['data']['result']

return available_trains,options

if __name__ == '__main__':

while True:

asd = searchTrain()

asd.pretty_print()

后续:其实查询还是很简单的,就是调用API接口,输入查询关键词就OK了,但是要想完整地实现购买火车票的流程,还是一个比较复杂的项目,Github上有完整的项目,喜欢的童鞋可以上去看看~testerSunshine/12306

彩蛋:

下一篇文章:Python命令行实现—查全国7天天气

下下篇文章:Python—itchat实现微信自动回复

下下下篇文章:Python实现微信查天气+火车+飞机+快递!!!

python查询12306余票_python命令行查询12306火车票相关推荐

  1. python 12306抢票_Python爬虫实战:12306抢票开源!

    今天就和大家一起来讨论一下python实现12306余票查询(pycharm+python3.7),一起来感受一下python爬虫的简单实践 我们说先在浏览器中打开开发者工具(F12),尝试一次余票的 ...

  2. python查询12306余票_Python脚本实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

  3. cmd打开python显示不是内部_Python命令行窗口提示“不是内部或外部命令……”的解决方法...

    前提:已在[控制面板\系统和安全\系统\高级系统设置\高级\环境变量]里修改变量Path,编辑系统变量后面添加了[;D:\Python27],可以在命令行模式下正常进入Python交互式环境,并能直接 ...

  4. python sys模块 argv用法_python命令行的参数传递(sys.argv)

    我们在命令行启动python脚本后,很多时候都会带上脚本的一些参数(比如给argparse模块的参数).这些参数都是先保存在sys.argv这个list中,然后才给其它模块或功能使用,不过也有一些特别 ...

  5. python乘号的字符代码_python 命令行参数传入 乘号(*) 时出错

    环境 Mac Os X 10.9 python 2.7 实现功能 命令行传入公式,输出结果 出错原因 '*' 号把整个目录下的文件都当作参数传入了 问题 如何正确传入 * 号? 操作 输入公式 '2 ...

  6. 查询公网出口ip, 命令行查询公网出口ip

    1. 浏览器:http://api.online-service.vip/ip/me 2. 命令行: curl api.online-service.vip/ip/me

  7. mysql查询不出来乱码_MySQL命令行查询乱码解决办法

    MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如 ...

  8. Python之12306余票查询

    简单的Python学习,用Python完成一个12306余票查询- Python之12306余票查询 参考资料来自Python 实现火车票查询工具 需要用到的第三方库 requests,使用 Pyth ...

  9. 最新Python实现12306余票查询系统

    首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化.12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306的Python余票查 ...

  10. 火车票查询系统(一)——利用python实现监控12306余票查询

    最近春运高峰,本人从12月开始买过年回家的火车票,然鹅~现实总是那么残酷,放票时间记不住,要么就是不能实时盯着刷票,外面的软件也不知道靠不靠谱,反正是没买到票,所以一怒之下,自己做一个12306余票查 ...

最新文章

  1. postman无法获得响应_【原创翻译】POSTMAN从入门到精通系列(二):发送第一个请求...
  2. 脑机接口让脊髓损伤患者重新获得手部触觉
  3. CSS实现垂直居中的5种思路
  4. 向maven中央仓库提交jar
  5. 使用xdebug+webgrind分析php性能
  6. 计算机vb基础知识,2018年计算机二级考试VB基础知识:参数的传递
  7. Excel VBA - Workbook对象
  8. python所有变量更新_在python中,如何动态更新变量?
  9. jetbrains ide连接服务器上的docker
  10. 携程到底有没有杀熟?
  11. mysql中如何将一个表中的部分记录合并,mysql - 如何从一个表中获取所有产品并从另一个包含多行的表中合并一行? - SO中文参考 - www.soinside.com...
  12. 官方jdk历史版本的下载方式
  13. 墨刀原型设计工具学习体会——临摹网易云音乐App
  14. uniapp 展示表格并且前端实现分页
  15. 关于RTT、TTL、MSL的概念解释
  16. 嵌入式(十四)——Makefile编写及多级目录
  17. bs架构 mysql_bs架构是什么意思?
  18. 鸿蒙os页面格式简介
  19. LDR6028DRP五V充电芯片OTG传数据充电高端方案
  20. SVN_一个开源的版本管理软件

热门文章

  1. apache 启动失败 查看日志
  2. 【教男朋友用python做计量】03.利用python进行假设检验(1)
  3. 2022智源大会议程丨类脑计算前沿与挑战
  4. 第2期:网页动画制作(CSS+JS)
  5. 地震观测仪器的历史和发展趋势(三)
  6. iOS播放器常用功能
  7. Java解惑之长整型
  8. js实现回到顶部,以及回到指点div顶部
  9. dim c语言,编程基础-C程序的组成
  10. php判断是否夏令时,关于php:时区和夏令时问题