12306抢票软件实现(二)

近期好多人私信我,能不能需要分享完整代码。为了帮助大家,我以及将代码整理和教学视频我已经上传了CSDN,欢迎私信交流,共同学习共同进步:代码及视频下载地址 求给五星好评,谢谢啦

前面已经介绍了实现登录12306(https://blog.csdn.net/zjt980452483/article/details/81167765),如果想实现免输入验证码的话,可以借助一些打码平台,这个部分大家可以去自行了解。本人已经实现过,准确率还是蛮高的,但是因为需要按次数收费,所以后面废弃了这部分代码。

简单说一下打码的思路:联系打码平台,告诉他们需要验证坐标型验证码。客服就会将相应的API文档发给你,将其中的py文件拷贝至项目路径中,根据文档中提示信息修改内容。然后从12306网站获取登录的验证码,存放在指定路径下,并将该路径和图片文件名写入打码平台提供的py文档中。运行程序后,会自动将图片发回至打码平台。平台会将正确的结果以字符串的形式反馈回来,稍作调整就可以使用了。

余票查询

这一部分,是由 user_input() 函数和 check() 两个函数组成。 user_input() 接收用户输入的信息(出发地、目的地和出发日),将 user_input() 的反馈结果传给check() ,然后打印出查询结果。这不一部分我使用未登录的状态进行查票,模拟浏览器上的操作如下:

这部分代码是在第一节基础上继续完善,补充部分的完整的代码如下:

import time
from station import stationDic,stationList
import redef User_input():print "++++++++++ 输入查询日期:++++++++++ "while True:print "参考样式\"2010-01-01\""train_date =  raw_input()# 检查输入时间格式是否正确try:time.strptime(train_date, "%Y-%m-%d")if re.match("^2018-\d\d-\d\d$",train_date):breakelse:print '格式有误,重新输入'except ValueError:print '格式有误,重新输入'print "++++++++++ 输入出发站 ++++++++++"while True:print "参考样式\"北京\" 、\"北京西\""from_station =  raw_input()if  from_station in stationDic.keys():breakelse:print "未检索到站名,请重新输入"print "++++++++++ 输入到达站 ++++++++++"while True:to_station =  raw_input()if  to_station in stationDic.keys():breakelse:print "为检索到站名,请重新输入"# 返回车站汉字形式return train_date,from_station,to_stationdef check(data,from_station,to_station):# print data,from_station,to_station# 获取12306车次查询信息req = urllib2.Request('https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=%s&leftTicketDTO.from_station=%s&leftTicketDTO.to_station=%s&purpose_codes=ADULT'%(data,from_station,to_station))req.headers = headershtml = opener.open(req).read()result = loads(html)train_count = len(result['data']['result'])now_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))print "查询到的结果有: ",train_countstation = []for i in range(train_count):station.append(result['data']['result'][i])secretStrTmp = []for i in range(train_count):message = result['data']['result'][i]messageList = message.split('|')# 取出每个列表中第一个值,后续下单会用到count = 0secretStrTmp.insert(count,messageList[0])count += 1# 打印每条车次信息的详细情况if messageList[0] != 'null':print u'''车次:\033[41;1m%s\033[0m''' %( messageList[3]),print "出发站:%s    到达站:%s" %(stationList[from_station], stationList[to_station]),print u'''出发时间:%s  到达时间:%s    历时:%s   高级软卧:\033[1;32;1m %-10s \033[0m  软卧:\033[1;32;1m %-10s \033[0m  硬卧:\033[1;32;1m %5s \033[0m 软座:\033[1;32;1m %5s \033[0m 硬座:\033[1;32;1m %5s \033[0m 无座:\033[1;32;1m %5s \033[0m'''\%( messageList[8], messageList[9], messageList[10],messageList[21], messageList[23], messageList[28], messageList[24], messageList[29], messageList[26]),# print "  火车始发站:%s    终点站:%s"%(stationList[messageList[4]], stationList[messageList[5]])# 此处手动在站点字典中添加“九龙”信息print ' 'return stationtrain_date,from_station,to_station = User_input()
station= check(train_date,stationDic[from_station],stationDic[to_station])

其中" from station import stationDic,stationList "所提及的 station,是为我自定义station.py文件,用于存放12306提供全国铁路网所有车站名及车站识别码,因为里面的内容过长,这里只贴出部分内容的截图和获取方法,完整内容既可以从浏览器中下载,也从我提供的源代码中找到

从浏览器中获取station信息的方法如下:

一、输入搜索条件

定义函数 user_input() 接收用户输入的参数,返回对应的字符串用于后续查询条件

1.输入查询日期

    print "++++++++++ 输入查询日期:++++++++++ "while True:print "参考样式\"2010-01-01\""train_date =  raw_input()# 检查输入时间格式是否正确try:time.strptime(train_date, "%Y-%m-%d")if re.match("^2018-\d\d-\d\d$",train_date):breakelse:print '格式有误,重新输入'except ValueError:print '格式有误,重新输入'

        利用 time.strptime() 检验用户输入的时间格式,要求必须是“2018-07-25”;利用while死循环和异常的特点,直到检测到输入正确的结果才跳出循环

2.输入出发站

print "++++++++++ 输入出发站 ++++++++++"while True:print "参考样式\"北京\" 、\"北京西\""from_station =  raw_input()if  from_station in stationDic.keys():breakelse:print "未检索到站名,请重新输入"print "++++++++++ 输入到达站 ++++++++++"while True:to_station =  raw_input()if  to_station in stationDic.keys():breakelse:print "为检索到站名,请重新输入"# 返回车站汉字形式return train_date,from_station,to_station

        此处需要将用户输入的车站名,输入到station文件中stationDic字典中进行检查,如果存在,则说明输入合格.

       注意,此处返回的直接是用户输入的中文字符串。后面有的地方需要将地名转换成响应的识别码如 北京北:bjb;

代码及视频下载地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用 Python 代码自动抢火车票

市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事。 该代码仅供参考,主要用于大家沟通交流&#xff…

python最新抢票脚本

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜🎉 支持我:点赞👍收藏⭐️留言📝📣 系列专栏:python网络爬虫&…

手把手教你用python一键抢12306火车票(附代码)

哈喽,哈喽~,一年一度的抢火车票大战正式拉开序幕… 然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难! 那么作为程序猿的你,当然要用程序猿的…

chatgpt赋能python:Python怎么抢票?

Python怎么抢票? Python是一种伟大的编程语言,因为它可以使我们的生活更加便利。有10年python编程经验的工程师会告诉你,利用Python编程可以轻松地抢到大热节目或演出的票。本文将介绍使用Python编写抢票机器人的方法。 概述 抢票机器人是…

chatgpt赋能python:Python自动抢票:让你的购票经历更加简单便捷!

Python自动抢票:让你的购票经历更加简单便捷! 随着互联网的发展,越来越多的人选择在网上购买火车、飞机等交通工具的票。但是,一些火爆的车次、航班往往在开售后仅仅几秒钟内就被抢完,让很多想出行的人非常苦恼。在这…

基于微信小程序的餐厅点餐软件设计及开发

目 录 摘要 I Abstract II 1 前言 1 1.1 选题背景 1 1.2 研究的目的和意义 1 2 相关技术简介 3 2.1 系统的实现架构 3 2.2 系统使用的技术 3 2.2.1 Eclipse 3 2.2.2 Java 4 2.2.3 MySQL简介 5 2.2.4 微信小程序简介 6 2.3 系统使用的开发环境 6 3 系统需求分析 7 3.1 功能需求 …

餐饮行业移动管理系统—Pad点餐系统

餐饮行业移动管理系统—Pad点餐系统 员工可通过PC端查询或管理饭店信息,即使更新信息,客户可以进行方便快捷的点菜操作。 功能要求: PC端功能:管理菜谱,餐厅,员工,订单信息;服务端…

基于Android移动终端的微型餐饮管理系统的设计与实现2-侧滑菜单

上周发了《 基于Android移动终端的微型餐饮管理系统的设计与实现》第一章,虽然是个简介,但是居然上了首页推荐,还有朋友评论了。写了这么久CSDN,还是第一次有人评论我的文章,真是受宠若惊,长期以来,我一直都以为,我玩的是CSDN单机版。当然,这也说明,我过去写的东西都…

安卓移动开发技术--微信界面设计

1.内容:请根据课程实现App门户界面框架设计,至少包含4个tab页,能实现tab页之间的点击切换; 2.技术:使用布局和分段,对控件进行点击监听 实现界面展示: 一.界面布局分析 1.先对button.xml界面…

移动开发--类vx界面

一、开发目标 创建一个类似vx的界面,具有vx、通讯录、发现、我 四个tab,可通过点击实现切换 二、代码解析 写4个tab,用作vx 、通讯录、发现、我四个界面 一个top.xml 一个bottom.xml 一个framelayout作为容器 mainactivity如下&#x…

【餐厅点餐平台|四】UI设计+效果展示

餐厅点餐平台导航 【餐厅点餐平台|一】项目描述需求分析 https://blog.csdn.net/weixin_46291251/article/details/126414430 【餐厅点餐平台|二】总体设计 https://blog.csdn.net/weixin_46291251/article/details/126422811 【餐厅点餐平台&#xff5…

【餐饮】智慧餐厅原型模板,餐饮APP,餐饮后台管理系统,Axure设计餐饮APP

软件版本:Axure 8.0(兼容9和10) 作品介绍: 作品包括用户端、员工端以及商户管理(后台管理) 客户端: 外卖点餐:菜品列表、菜品详情、确认订单、地址管理、修改电话、支付订单 堂食点…

基于Androidstudio餐厅点餐选座系统

完成“餐厅点餐系统”的设计。餐厅点餐系统是一个适用于餐饮行业和消费者的软件,顾客可以使用该系统自动点餐,也可到店后由服务人员点餐,系统管理员进行后台管理。 build.gradle (Module: app) 包含当前项目的applicationId、最小适配的Andro…

【花雕学AI】ChatGPT能用表情包猜电影,你能猜出来吗?揭秘它的神奇「涌现」能力

关于作者斯蒂芬 我是田纳西州纳什维尔的一名科学作家,负责数学、物理学、天文学和癌症研究。我的书Math Art: Truth, Beauty, and Equations 将于 2019 年 4 月出版。我在后院改建的办公室棚子里工作。我是范德比尔特大学的驻校作家,教授科学传播课程。 …

chatgpt赋能python:Python数据分析中如何快速取到一列数据

Python 数据分析中如何快速取到一列数据 在 Python 数据分析中,我们经常需要取到表格中的某一列数据进行分析或可视化。下面介绍了几种方法,可帮助您快速有效地取得所需要的数据。 1. 使用 Pandas 包获取数据 Pandas 是 Python 中非常常用的数据分析库…

【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议

人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…

AI教父Hinton与OpenAI CEO Sam Altman领头预警:AI可能灭绝人类!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 经过不到一年的时间,AI 的发展超乎所有人的想象,也大有失控的风险。 就在今天,全球部分顶尖的 AI 研究员、工程师和 CEO 就他们认为 AI 对人类构成的生存威胁发出了新…

多位知名学者最新警告「AI 可能灭绝人类」,ChatGPT 之父和 AI 教父都参与联名,如何理解?

警告“AI可能灭绝人类”是指一些知名学者和专家对于未来人工智能发展的担忧,他们认为如果AI发展得不受控制,可能会导致人类的灭绝。其中,ChatGPT之父和AI教父分别指的是OpenAI的创始人和AI领域的一些权威人物。 这种担忧主要源于以下几个方…

什么是ChatGPT?GPT4和3.5有什么不同

相信今天大家都被GPT刷屏了,我可以使用GPT帮我写文章框架,诗歌,作文等等。 那么,GPT究竟是什么呢? ChatGPT全称为“chat Generative Pre-trained Transformer”,翻译成中文就是生成型预训练变换模型&#…

不直播不露脸也能做短视频变现,想挣点生活费试试这些玩法

大家好,我是我赢助手短视频运营,最近一直有小伙伴问我,做了好久的短视频一直不赚钱,今天总结了一下,做了90天短视频还没赚了试试这5种易变现的玩法。 新手不直播不露脸也能做短视频变现,想在斗音挣点生活费…