近期好多人私信我,能不能需要分享完整代码。为了帮助大家,我以及将代码整理和教学视频我已经上传了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;

代码及视频下载地址

12306抢票软件实现(二)相关推荐

  1. python编写12306窗体抢票软件(二)

    python编写12306窗体抢票软件(二) 本文这次介绍如何获取12306网站的验证码并登陆. 1 获取验证码 12306它是一个服务器,每次我们访问它都是以客户端的方式去向它索取信息. 建议用谷歌 ...

  2. 二、基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  3. 四、基于HTTPS协议的12306抢票软件设计与实现--水平DNS并发查询分享

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果  二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现- ...

  4. 一、基于HTTPS协议的12306抢票软件设计与实现--实现效果

    一.基于HTTPS协议的12306抢票软件设计与实现--实现效果 二.基于HTTPS协议的12306抢票软件设计与实现--相关接口以及数据格式 三.基于HTTPS协议的12306抢票软件设计与实现-- ...

  5. python爬虫抢火车票_如何用python写一个简单的12306抢票软件|python 爬火车票 教程...

    python 如果抓取验证码图片 类似12306的登录验证码图片 这个以前做次.最大的麻烦是码的识别算法的识别率太低.12306那种网站登陆错3次就限制你20分钟.所以除非你有33%以上的识别率否则不 ...

  6. 马后炮之12306抢票工具(二) -- 联系人获取车次

    续马后炮之12306抢票工具(一) -- 登录 今天完成模块: 添加常用联系人 获取车站列表 获取车次信息 获取常用联系人已经在马后炮之12306抢票工具(一) -- 登录中介绍,不在重复 遇到问题: ...

  7. python GUI+爬虫——12306抢票软件(1)

    使用python 的GUI 和爬虫等功能自己构造一个12306的抢票软件. 该课程来自网易云课堂的撩课学院,付费课程.地址:网易云课堂搜索以下内容就可找到 我跟着学,不一定最后能成功.先试试,想要成功 ...

  8. PyQt5+网络爬虫----打造自己的12306抢票软件

    郑重申明:该文章介绍的技术仅供用于学习,不可恶意攻击12306网站.对12306服务器造成的任何损失,后果自负. 导语:由于12306服务器访问量巨大,并且官方为防止黄牛恶意刷票.以及一些非法攻击.1 ...

  9. 12306 抢票软件使用记录

    1.代码地址 https://github.com/pjialin/py12306 2.注意事项 a.需使用python3.6 b.下载包时使用python原始源 pip install --user ...

  10. 我在github上第一次运行项目12306抢票软件成功实现抢票

    工具 1.源代码下载 https://github.com/testerSunshine/12306.git 源代码下载地址 2.python-3.7.4-amd64 https://www.pyth ...

最新文章

  1. 你为什么应该经常访问招聘网站?招聘网站至少有4个方面的价值!
  2. OpenGL开发学习指南一(freeglut+glew)
  3. 通过扩展改善ASP.NET MVC的验证机制[实现篇]
  4. Cloud for Customer里点了Opportunity ID的超链接到进入overview page,背后发生了什么事?
  5. win7台式电脑怎么连wifi_台式电脑怎么用wifi网络
  6. php课程 10-35 php实现文件上传的注意事项是什么
  7. 如何避免_小红书如何避免降权!
  8. 重写了GVBASIC模拟器
  9. 发送邮件 空格 java_java实现邮件发送功能
  10. Selenium实现网页自动签到的Python脚本-win11
  11. LCD 12864B V2.0的使用
  12. 服务器系统winpe提取驱动,WinPE 10 驱动程序包
  13. 转:adb连接手机进行调试有两种方式
  14. python期权定价公式_一揽子欧洲期权蒙特卡洛定价(python)(一)
  15. UCF Local Programming Contest Round 1A 【2021-7-20】
  16. 蔡康永的说话之道2-笔记
  17. Layim 聊天功能
  18. 学生宿舍管理系统毕业设计(python)
  19. win10生成https证书步骤
  20. Java网络爬虫--一步步使用Java网络爬虫技术实现豆瓣读书Top250数据的爬取,并插入数据库

热门文章

  1. 阿里云服务器续费坑啊早知道不买了
  2. 忘记电脑开机密码怎么办
  3. Android Behavior之ViewPager+Fragment+RecyclerView实现吸顶效果
  4. uniapp主题切换
  5. Centos7 制作系统iso镜像文件
  6. Linux下键盘测试工具
  7. 渗透测试工具-sqlmap
  8. 《UnityAPI.Color颜色》(Yanlz+Unity+SteamVR+云技术+5G+AI+VR云游戏+Color+Lerp+RGBToHSV+gamma+linear+立钻哥哥++OK++)
  9. U3D Pun2 官方文档学习和翻译
  10. 利用Apache Tika分页解析pdf文件内容