python爬12306余票_Python 爬取12306火车票
#!/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火车票相关推荐
- python查询12306余票_Python脚本实现12306火车票查询系统
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...
- python批量自动订票_python+splinter实现12306网站刷票并自动购票流程
python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...
- Python爬虫学习(七)执行定时任务爬取12306余票信息发送邮件通知
分析 我们输入的上海,北京都变成了对应的编号,比如,上海(SHH).北京(BJP),所以当我们程序进行输入的时候要进行一下处理,12306的一个地方存储着这些城市名与编码对应的文档: GET请求: h ...
- python123判断火车票座位_【Python】实现12306余票监控
首先我们打开12306余票查询窗口 上图红色框的地方,就是表示列车有无车票的地方,我们需要根据这里边的数据来判断. 这里边有一些需要注意的就是,里边表示有票的有字符串"有"和数字& ...
- python实现12306余票
今天就和大家一起来讨论一下python实现12306余票查询(pycharm+python3.7),一起来感受一下python爬虫的简单实践 我们说先在浏览器中打开开发者工具(F12),尝试一次余票的 ...
- python 12306抢票_Python爬虫实战:12306抢票开源!
今天就和大家一起来讨论一下python实现12306余票查询(pycharm+python3.7),一起来感受一下python爬虫的简单实践 我们说先在浏览器中打开开发者工具(F12),尝试一次余票的 ...
- 最新Python实现12306余票查询系统
首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化.12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306的Python余票查 ...
- Python之12306余票查询
简单的Python学习,用Python完成一个12306余票查询- Python之12306余票查询 参考资料来自Python 实现火车票查询工具 需要用到的第三方库 requests,使用 Pyth ...
- 火车票查询系统(一)——利用python实现监控12306余票查询
最近春运高峰,本人从12月开始买过年回家的火车票,然鹅~现实总是那么残酷,放票时间记不住,要么就是不能实时盯着刷票,外面的软件也不知道靠不靠谱,反正是没买到票,所以一怒之下,自己做一个12306余票查 ...
- 返乡之路不容易之12306余票查询并给出备选方案v2
在第一版的返乡之路不容易之12306余票查询并给出备选方案中,给出了余票查询和备选方案推荐,但当时有两个问题: 没有备选排名:虽然给出了备选,但哪个备选好没有给出排序 没有座位信息(商务/一等/二等/ ...
最新文章
- 全球比特币和区块链领域创业企业全景图
- 打印swift 变量的类型
- wifi信息修改插件ios_这21款Android Studio插件,你不得不装
- Eclipse jee 配置Tomcat5.5
- 干货!华为AutoML助力AI开发效率提升攻略
- caffe error: #error This file requires compiler and library support for the ISO C++ 2011 standard
- SPS用户管理的问题
- 关于Actionscript 3中给Flash传参数方法(一)
- 你真的懂线程同步么?
- 爬虫爬当当网书籍信息
- dcp9030cdn定影_兄弟DCP-9030CDN打印驱动下载|兄弟Brother DCP-9030CDN一体打印机驱动官方下载 - 维维软件园...
- html点击下载图片
- 阿铭Linux_网站维护学习笔记20190412
- Mac/Linux 安装ab(Apache Benchmark)
- vue一维码,二维码生成
- 计算机的码片是指什么作用,计算机通信作业共有四个站进行码分多址的CDMA通信4个站的码片 爱问知识人...
- Android颜色对应的xml色值
- XCTF simple-unpacked
- bt5使用教程----渗透方面
- 8步文献综述指南——肯特大学(翻译)
热门文章
- 静态网页的基本结构及标签
- GeForce Experience界面重叠解决办法
- 静态单赋值(一)—gcc中的支配树
- .NET周报【11月第1期 2022-11-07】
- 如何制作APP-微信小程序
- 伊利诺伊香槟分校计算机排名,伊利诺伊大学香槟分校计算机工程硕士排名第8(2020年TFE Times排名)...
- 管理:49个终身受用的职场“顶级思维”!
- flv文件转换成mp4格式的方法
- 关于CVR建模中延迟反馈问题
- MarkDown转Html在线转换(支持代码高亮,可复制到微信公众号、今日头条)