python查询12306余票_python命令行查询12306火车票
程序很简单,主要是调用了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火车票相关推荐
- python 12306抢票_Python爬虫实战:12306抢票开源!
今天就和大家一起来讨论一下python实现12306余票查询(pycharm+python3.7),一起来感受一下python爬虫的简单实践 我们说先在浏览器中打开开发者工具(F12),尝试一次余票的 ...
- python查询12306余票_Python脚本实现12306火车票查询系统
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...
- cmd打开python显示不是内部_Python命令行窗口提示“不是内部或外部命令……”的解决方法...
前提:已在[控制面板\系统和安全\系统\高级系统设置\高级\环境变量]里修改变量Path,编辑系统变量后面添加了[;D:\Python27],可以在命令行模式下正常进入Python交互式环境,并能直接 ...
- python sys模块 argv用法_python命令行的参数传递(sys.argv)
我们在命令行启动python脚本后,很多时候都会带上脚本的一些参数(比如给argparse模块的参数).这些参数都是先保存在sys.argv这个list中,然后才给其它模块或功能使用,不过也有一些特别 ...
- python乘号的字符代码_python 命令行参数传入 乘号(*) 时出错
环境 Mac Os X 10.9 python 2.7 实现功能 命令行传入公式,输出结果 出错原因 '*' 号把整个目录下的文件都当作参数传入了 问题 如何正确传入 * 号? 操作 输入公式 '2 ...
- 查询公网出口ip, 命令行查询公网出口ip
1. 浏览器:http://api.online-service.vip/ip/me 2. 命令行: curl api.online-service.vip/ip/me
- mysql查询不出来乱码_MySQL命令行查询乱码解决办法
MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如 ...
- Python之12306余票查询
简单的Python学习,用Python完成一个12306余票查询- Python之12306余票查询 参考资料来自Python 实现火车票查询工具 需要用到的第三方库 requests,使用 Pyth ...
- 最新Python实现12306余票查询系统
首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化.12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306的Python余票查 ...
- 火车票查询系统(一)——利用python实现监控12306余票查询
最近春运高峰,本人从12月开始买过年回家的火车票,然鹅~现实总是那么残酷,放票时间记不住,要么就是不能实时盯着刷票,外面的软件也不知道靠不靠谱,反正是没买到票,所以一怒之下,自己做一个12306余票查 ...
最新文章
- postman无法获得响应_【原创翻译】POSTMAN从入门到精通系列(二):发送第一个请求...
- 脑机接口让脊髓损伤患者重新获得手部触觉
- CSS实现垂直居中的5种思路
- 向maven中央仓库提交jar
- 使用xdebug+webgrind分析php性能
- 计算机vb基础知识,2018年计算机二级考试VB基础知识:参数的传递
- Excel VBA - Workbook对象
- python所有变量更新_在python中,如何动态更新变量?
- jetbrains ide连接服务器上的docker
- 携程到底有没有杀熟?
- mysql中如何将一个表中的部分记录合并,mysql - 如何从一个表中获取所有产品并从另一个包含多行的表中合并一行? - SO中文参考 - www.soinside.com...
- 官方jdk历史版本的下载方式
- 墨刀原型设计工具学习体会——临摹网易云音乐App
- uniapp 展示表格并且前端实现分页
- 关于RTT、TTL、MSL的概念解释
- 嵌入式(十四)——Makefile编写及多级目录
- bs架构 mysql_bs架构是什么意思?
- 鸿蒙os页面格式简介
- LDR6028DRP五V充电芯片OTG传数据充电高端方案
- SVN_一个开源的版本管理软件