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

来源:互联网 发布:三月软件小组 编辑:程序博客网 时间:2024/04/27 22:29

首先感谢这篇博客的引导,但是这篇文章已经比较旧了,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 refrom station import stationsimport warningsimport jsonimport urllibfrom urllib import requestimport requestsfrom pprint import pprintfrom 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的headernum = 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)
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 怀孕初期喝醉了怎么办 怀孕前喝酒了怎么办 受孕期间喝酒了怎么办 一个月发现怀孕怎么办 上课不专心老师怎么办 小孩子上课不专心怎么办 孩子好动不专心怎么办 一年级上课不听讲怎么办 小孩不专心听讲怎么办 小孩上课不集中怎么办 一年级上课不专心怎么办 上课不认真听课怎么办 高中上课不专注怎么办 上课听不进去怎么办 孩子上课容易走神怎么办 上跆拳道不听讲怎么办 孩子写字很慢怎么办 孩子写字慢该怎么办 小孩不遵守纪律怎么办 初一孩子上课走神怎么办 转学学籍转不了怎么办 孩子学习不专心怎么办 高中上课老走神怎么办 儿童演出前紧张怎么办 幼儿做事不认真怎么办 上课讲话的孩子怎么办 孩子不用心读书怎么办 小孩读书不专心怎么办 幼儿争抢玩老师怎么办 小孩做作业发呆怎么办 宝宝上课不认真怎么办 孩子不认真听课怎么办 小孩不认真听课怎么办 小孩叛逆家长该怎么办 小孩心里有问题怎么办 孩子做作业发火怎么办 小孩上课小叨咕怎么办 孩孑读书读不走怎么办 幼儿分离焦虑症怎么办 忍不住想打孩子怎么办 控制不住打骂孩子怎么办