首先感谢这篇博客的引导,但是这篇文章已经比较旧了,12306进行了改版,源码编排方式有了变化。12306源码获取的方法可以从这篇博客中学习,我在这里主要贴出对于目前最新的12306的Python余票查询程序,可供用于学习Python的基本用法,正则表达的使用,简单爬虫的使用。下面是效果图,因为我用的是windows,对命令框里的代码着色比较麻烦,有兴趣的朋友可以自己尝试去给输出的文字添加颜色。

#####################获取站台字典,已放在stations.py无需运行######################
#import re
#import urllib
#import ssl
#from urllib import request
#import requests
#from pprint import pprint
#ssl._create_default_https_context = ssl._create_unverified_context
#url = 'https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9018'
#req = urllib.request.Request(url)
#r = urllib.request.urlopen(req).read().decode('utf-8')
##print (r)
#stations =re.findall(r'([\u4e00-\u9fa5]+)\|([A-Z]+)',r) #匹配中文和对应的英文
#stations = dict(stations)
#stations = dict(zip( stations.keys(),stations.values()))#将匹配的内容转化为字典
#pprint(stations)                                        #以列的形式打印出来
################################################################################
################################################################################
#功能:12306余票查询
#作者:wildwind_
#时间:2017.07.08
################################################################################
import re
from station import stations
import warnings
import json
import urllib
from urllib import request
import requests
from pprint import pprint
from prettytable import PrettyTable
#输入引导
f1= input('请输入起始城市:\n')
f = stations[f1]t1= input('请输入目的城市:\n')
t = stations[t1]d1=input('请输入出发时间: \n')
d=str('2017-')+str(d1)                   #这里讲年份设置为固定值,可以减少输入操作。
print ('正在查询'+f1+'至'+t1+'的列车,请稍等...')  #个性旁白
#获取数据
url = 'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date='+d+'&leftTicketDTO.from_station='+f+'&leftTicketDTO.to_station='+t+'&purpose_codes=ADULT'
warnings.filterwarnings("ignore")         #这个网站是有安全警告的,这段代码可以忽略警告
r = requests.get(url, verify=False)   #请求网址的内容
rows = r.json()['data']['result']      #将内容解析为列表
data1 = []
data = []
for m in rows:data1.append(re.findall(r'[\u4e00-\u9fa5]订(.*)|[\u4e00-\u9fa5]售(.*)|[\u4e00-\u9fa5]运(.*)',m))
for n in data1:data.append(str(n).split('|'))
#制作表格
trains= PrettyTable()
trains.field_names=["车次","车站","时间","历时","商务特等座","一等座","二等座","高级软卧","软卧","动卧","硬卧 ","软座 ","硬座","无座","其他"]#设置table的header
num = len(data)                       #打印列表的个数
stations_new= dict(zip(stations.values(), stations.keys()))
for row in data :                                                #列表循环trains.add_row([row[2],'\n'.join([stations_new[row[5]],stations_new[row[6]]]),'\n'.join([row[7], row[8]]),row[9],row[-4] if row[-4] != '' else '--',row[-5] if row[-5] != '' else '--',row[-6] if row[-6] != '' else '--',row[-15] if row[-15] != '' else '--',row[-13] if row[-13] != '' else '--',row[-3] if row[-3] != '' else '--',row[-8] if row[-8] != '' else '--',row[-11] if row[-11] != '' else '--',row[-7] if row[-7] != '' else '--',row[-10] if row[-10] != '' else '--',row[-14] if row[-14] != '' else '--'])
print ('查询结束,共有 %d 趟列车。'%num )   #列表个数也就是列车个数
print (trains)

最新Python实现12306余票查询系统相关推荐

  1. Python之12306余票查询

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

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

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

  3. python实现12306余票

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

  4. 12306 余票查询API浅探索

    12306 余票查询API浅探索 余票查询请求分析 响应数据解密代码查找调试 数据说明 余票查询请求分析 点击查询,F12进入控制台,进入NetWork面板,查看发送的请求: 点入请求查看详情,很明显 ...

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

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

  6. 12306余票查询(爬虫)

    经常因为忙而忘记给妹子订票. 每次结果不言而喻. 登个12306查下余票其实很简单,但不知道为什么就是不想登. 所以弄了个爬虫脚本直接查询余票.希望下个女票不会这样尴尬,哈哈哈哈哈哈 12306首页为 ...

  7. 铁路局12306余票查询的实现

    离上次写的类似于铁道部12306城市选择框的实现过了都快一个月了,最近一直在忙,在学习sharepoint2013,虽然早就实现了12306的余票查询,但是一直没抽出时间来写,刚好这几天也快放假了,抽 ...

  8. 使用c#中的HttpWebRequest实现12306余票查询

    准备工作 下载用于解析JSON的类库(Newtonsoft.Json.dll)(下载地址:Newtonsoft.Json.dll): 在C#项目中添加对其的引用. 在程序中导入命名空间: 1 2 3 ...

  9. 12306余票查询(一)——分析页面

    这段时间Python写的很少,用这个小项目复习一下以前的知识 首先打开12306看一下页面结构吧 因为我们没有点击查询,所以现在页面中是没有余票信息的, 随便选个出发站目的地,日期,点击查询, 发现相 ...

最新文章

  1. (0069)iOS开发之dequeueReusableCellWithIdentifier的两个方法的区别
  2. 计算机二级python用什么书-如何准备全国计算机二级Python?
  3. spring系列-注解驱动原理及源码-自动装配
  4. python 关键字参数为什么只能出现在最后_Python笔记2——默认参数,可变参数,关键字参数,参数组合...
  5. java用for循环修改密码_Java for循环的几种用法分析
  6. 关于“数据分析”如何快速入门一些基本思路
  7. SpringBoot 精通系列-SpringBoot如何操作Memcache
  8. web开发快餐式入门指南 0. 写在前面
  9. centos php71,CentOS 71编译安装PHP7
  10. java 反射 方法 修饰符_超类中使用默认修饰符的Java反射访问方法
  11. Introduction to Computer Networking学习笔记(九):error detection 错误探查 Checksum、CRC、MAC
  12. kettle点击spoon.bat打不开
  13. 3种不同脸型的瘦脸方法
  14. ANR发生的原理是什么, 怎么排查
  15. 1-14 Burpsuite Repeater介绍
  16. OP_PUSH_TX技术背后的故事
  17. BZOJ1163: [Baltic2008]Mafia
  18. 敏之澳电商:拼多多打造爆款的具体步骤
  19. 怀旧动画之《嘿!奔奔》
  20. python程序基础题库_智慧职教APPPython程序设计基础题库及答案

热门文章

  1. yt88加密狗不识别_YT88 是天域一个很不错的加密狗工具,可以源码 ,还 外壳 ,带DLK开发包。 Windows Develop 256万源代码下载- www.pudn.com...
  2. RGB颜色码对照表大全
  3. 第5章-远期和期货价格的确定--课后作业--金融衍生工具
  4. OSChina 周三乱弹 —— 前面有人拉,后面有人推
  5. 手机端企业微信分享链接的图标修改存在缓存问题
  6. [MySQL] MySQL 面试题集锦(1)
  7. Linux hexdump命令
  8. e语言mysql怎么放在超级列表框,『易语言怎么将超级列表框的内容保存到excel或者Access!』...
  9. filebeat7.7.0相关详细配置预览- processors - script
  10. aps软件中的SKU会影响库存预测