#!/usr/bin/env python#coding:utf-8

"""命令行的火车票查看器

Usage:

12306 [-gdtkz]

Options:

-h,--help 显示帮助

-g 高铁

-d 动车

-t 特快

-k 快速

-z 直达

Example:

12306 上海 北京 2016-12-16

12306 -dg 上海北京 2016-12-16

pip install requests prettytable docopt colorama

#prettytable格式化工具

#docopt是python3命令行的位置参数解析工具

#colorama是添加显示颜色"""

importrequestsfrom docopt importdocoptimportsys#sys.path.append(r"/py/stations")

from stations importstationsimportjsonfrom prettytable importPrettyTableclassTrainsCollections:

header= '车次 车站 时间 历时 一等 二等 软卧 硬卧 硬座 无座'.split()def __init__(self,available_tranins,options):

self.available_tranins=available_tranins

self.options=optionsdef_get_duration(self,raw_train):

durations= raw_train.get('lishi').replace(':','小时') + '分'

returndurations#装饰器,把此函数定义为属性,以被别的函数调用

@propertydeftrains(self):for raw_train inself.available_tranins:

train_no= raw_train['station_train_code']

initial=train_no[0].lower()if not self.options or initial inself.options:

train=[

train_no,'\n'.join([raw_train['from_station_name'],raw_train['to_station_name']]),'\n'.join([raw_train['start_time'],raw_train['arrive_time']]),

self._get_duration(raw_train),

raw_train['zy_num'],

raw_train['ze_num'],

raw_train['rw_num'],

raw_train['yw_num'],

raw_train['yz_num'],

raw_train['wz_num'],

]#print(train)

#生成器,一次返回一项

yieldtraindefpretty_print(self):

pt=PrettyTable()

pt._set_field_names(self.header)for train inself.trains:

pt.add_row(train)print(pt)defcli():'''{

'-d':True,

'-g':True,

'-k':False,

'-t':False,

'-z':False,

'':'2017-03-23',

'':'海口',

'':'北京'}'''arguments= docopt(__doc__)print(arguments)

from_station= stations.get(arguments[''])

to_station= stations.get(arguments[''])

date= arguments['']#获取参数,列表解析

options = ''.join([k for k,v in arguments.items() if v isTrue])

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)#url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT'

r = requests.get(url,verify=False)print(url)#jjj = json.loads(str(r))

available_tranins1 = r.json()['data']

available_tranins=[]for available_tranins2 inavailable_tranins1:

available_tranins.append(available_tranins2['queryLeftNewDTO'])#available_tranins = list(available_tranins.keys())

#print(available_tranins)

#TrainsCollections(available_tranins,options).pretty_print()

#available_tranins = available_tranins2['queryLeftNewDTO']

#print(available_tranins)

#print(type(available_tranins[0]))

TrainsCollections(available_tranins,options).pretty_print()if __name__ == '__main__':#TrainsCollections.cli()

cli()

python爬12306余票_Python 爬取12306火车票相关推荐

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

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

  2. python批量自动订票_python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  3. Python爬虫学习(七)执行定时任务爬取12306余票信息发送邮件通知

    分析 我们输入的上海,北京都变成了对应的编号,比如,上海(SHH).北京(BJP),所以当我们程序进行输入的时候要进行一下处理,12306的一个地方存储着这些城市名与编码对应的文档: GET请求: h ...

  4. python123判断火车票座位_【Python】实现12306余票监控

    首先我们打开12306余票查询窗口 上图红色框的地方,就是表示列车有无车票的地方,我们需要根据这里边的数据来判断. 这里边有一些需要注意的就是,里边表示有票的有字符串"有"和数字& ...

  5. python实现12306余票

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

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

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

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

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

  8. Python之12306余票查询

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

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

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

  10. 返乡之路不容易之12306余票查询并给出备选方案v2

    在第一版的返乡之路不容易之12306余票查询并给出备选方案中,给出了余票查询和备选方案推荐,但当时有两个问题: 没有备选排名:虽然给出了备选,但哪个备选好没有给出排序 没有座位信息(商务/一等/二等/ ...

最新文章

  1. 全球比特币和区块链领域创业企业全景图
  2. 打印swift 变量的类型
  3. wifi信息修改插件ios_这21款Android Studio插件,你不得不装
  4. Eclipse jee 配置Tomcat5.5
  5. 干货!华为AutoML助力AI开发效率提升攻略
  6. caffe error: #error This file requires compiler and library support for the ISO C++ 2011 standard
  7. SPS用户管理的问题
  8. 关于Actionscript 3中给Flash传参数方法(一)
  9. 你真的懂线程同步么?
  10. 爬虫爬当当网书籍信息
  11. dcp9030cdn定影_兄弟DCP-9030CDN打印驱动下载|兄弟Brother DCP-9030CDN一体打印机驱动官方下载 - 维维软件园...
  12. html点击下载图片
  13. 阿铭Linux_网站维护学习笔记20190412
  14. Mac/Linux 安装ab(Apache Benchmark)
  15. vue一维码,二维码生成
  16. 计算机的码片是指什么作用,计算机通信作业共有四个站进行码分多址的CDMA通信4个站的码片 爱问知识人...
  17. Android颜色对应的xml色值
  18. XCTF simple-unpacked
  19. bt5使用教程----渗透方面
  20. 8步文献综述指南——肯特大学(翻译)

热门文章

  1. 静态网页的基本结构及标签
  2. GeForce Experience界面重叠解决办法
  3. 静态单赋值(一)—gcc中的支配树
  4. .NET周报【11月第1期 2022-11-07】
  5. 如何制作APP-微信小程序
  6. 伊利诺伊香槟分校计算机排名,伊利诺伊大学香槟分校计算机工程硕士排名第8(2020年TFE Times排名)...
  7. 管理:49个终身受用的职场“顶级思维”!
  8. flv文件转换成mp4格式的方法
  9. 关于CVR建模中延迟反馈问题
  10. MarkDown转Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)