Python实现12306火车票抢票系统


Posted in Python onJuly 04, 2019

Python实现12306火车票抢票系统效果图如下所示:

Python实现12306火车票抢票系统

具体代码如下所示:

import urllib.request as request
  import http.cookiejar as cookiejar
  import re
  import os
  import smtplib
  from email.mime.text import MIMEText
  import time
  user = '' #登陆邮箱
  pwd = ''#邮箱密码
  to = [''] #发送的邮箱
  with open('D:\Python源码\city.txt','r') as f:
    a = f.read()
  station = re.compile(u'\w+:(.+?):(\w+):\d').findall(a)
  dic1 = {}
  for b in range(0, len(station)):
    dic1[station[b][0]] = station[b][1]
  def gethtml(geturl):
    cj = cookiejar.LWPCookieJar()
    cookiejarsupport = request.HTTPCookieProcessor(cj)
    opener = request.build_opener(cookiejarsupport,request.HTTPHandler)
    headers = {
      'User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36',
      'Host':'www.12306.cn',
      'Referer':'http://www.12306.cn/opn/lcxxcx/init'
    }
    request.install_opener(opener)
    req = request.Request(url=geturl, headers=headers)
    html = request.urlopen(req).read().decode()
    return html
  def getstation(html):
    fromstation = re.compile(r'from_station_name":"(.+?)","').findall(html)
    tostation = re.compile(r'to_station_name":"(.+?)",').findall(html)
    startime = re.compile(r'"start_time":"(.+?)"').findall(html)
    arrtime = re.compile(r'arrive_time":"(.+?)"').findall(html)
    lishi = re.compile(r'"lishi":"(.+?)",').findall(html)
    webbuy = re.compile(r'"canWebBuy":"(.+?)').findall(html)
    startstation = re.compile(r'start_station_name":"(.+?)"').findall(html)
    endstation = re.compile(r'end_station_name":"(.+?)"').findall(html)
    ruanwo = re.compile((r'"rw_num":"(.+?)",')).findall(html)
    ruanzuo = re.compile((r'"rz_num":"(.+?)"')).findall(html)
    yingwo = re.compile(r'"yw_num":"(.+?)"').findall(html)
    ruanzuo = re.compile(r'"rz_num":"(.+?)"').findall(html)
    yingzuo = re.compile(r'"yz_num":"(.+?)"').findall(html)
    wuzuo = re.compile(r'"wz_num":"(.+?)"').findall(html)
    checi = re.compile(r'station_train_code":"(.+?)"').findall(html)
    datanum = re.compile((r'day_difference":"(.+?)"')).findall(html)
    erdengzuo = re.compile(r'ze_num":"(.+?)",').findall(html)
    num = range(0, len(yingwo))
    for i in num:
      try:
        if int(yingzuo[i]) != 0 or int(erdengzuo[i]) != 0 or int(wuzuo[i] !=0):   #Z108
          print(checi[i], '  二等座:', erdengzuo[i], '  硬座:', yingzuo[i],'  无座:',wuzuo[i])
          if yingwo[i] != '--' or yingzuo[i] != '无':
            msg=MIMEText('火车:'+fromstation[i]+' ->'+tostation[i] +'('+ checi[i]+ ')\n二等座:'+erdengzuo[i]+ '张;硬座:'+ yingzuo[i]+'张;无座:'+wuzuo[i]+ '张!快买去!\n网址:http://www.12306.cn/opn/lcxxcx/init')
            msg['Subject'] = '有票啦!'
            msg['From'] = user
            msg['To'] = ','.join(to)
            s = smtplib.SMTP('smtp.qq.com', timeout = 30) #连接SMTP端口
            s.login(user,pwd)#登陆服务器
            s.sendmail(user,to,msg.as_string())
            s.close()
            print('发送成功')
            print('------------------------------------------------------------')
      except:
        continue
  print('''''
By:王小涛_同?W 
-------------------------------------------------------------- 
  欢迎使用! 
-------------------------------------------------------------- 
''') 
print ('请输入购票类型:(0为成人票  其他为学生票) ') 
leixing = input() 
print('请输入起点:') 
qidian = input() 
try: 
  if dic1[qidian]: 
    qidian = dic1[qidian] 
except: 
  print('起点输入有误!') 
print('请输入终点:') 
zhongdian = input() 
try: 
  if dic1[zhongdian]: 
    zhongdian = dic1[zhongdian] 
except: 
  print('终点输入有误!') 
print('请输入购票年份:') 
year = input()+'-' 
print('请输入购票月份:(2位)') 
month = input()+'-' 
print('请输入购票日期:(2位)') 
date = input() 
date = year + month + date 
if leixing == 0: 
  geturl = 'http://www.12306.cn/opn/lcxxcx/query?purpose_codes=ADULT&queryDate='+date+'&from_station='+qidian+'&to_station='+ zhongdian 
else: 
  geturl = 'http://www.12306.cn/opn/lcxxcx/query?purpose_codes=0X00&queryDate='+date+'&from_station='+qidian+'&to_station='+ zhongdian 
while 1: 
  getstation(gethtml(geturl)) 
  print('火车票监测中...') 
  time.sleep(300) </pre>

总结

以上所述是小编给大家介绍的Python实现12306火车票抢票系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python实现随机选择元素功能
Sep 14 Python
50行Python代码实现人脸检测功能
Jan 23 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
python实现周期方波信号频谱图
Jul 21 Python
Python检查ping终端的方法
Jan 26 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
python怎么判断模块安装完成
Jun 19 Python
Python sqlalchemy时间戳及密码管理实现代码详解
Aug 01 Python
python如何获得list或numpy数组中最大元素对应的索引
Nov 16 Python
Python图像处理之图像拼接
Apr 28 Python
Python爬虫之用Xpath获取关键标签实现自动评论盖楼抽奖(二)
Jun 07 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 Python
如何利用Pyecharts可视化微信好友
Jul 04 #Python
python 获取等间隔的数组实例
Jul 04 #Python
python 中pyqt5 树节点点击实现多窗口切换问题
Jul 04 #Python
Python机器学习算法库scikit-learn学习之决策树实现方法详解
Jul 04 #Python
Python 中PyQt5 点击主窗口弹出另一个窗口的实现方法
Jul 04 #Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 #Python
pandas 使用均值填充缺失值列的小技巧分享
Jul 04 #Python
You might like
浅析PHP的ASCII码转换类
2013/07/05 PHP
PHP中提问频率最高的11个面试题和答案
2014/09/02 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
2016/10/28 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
动态刷新 dorado树的js代码
2009/06/12 Javascript
javascript标签在页面中的位置探讨
2013/04/11 Javascript
Jquery常用的方法汇总
2015/09/01 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
AngularJS+Bootstrap3多级导航菜单的实现代码
2017/08/16 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
js判断数组是否包含某个字符串变量的实例
2017/11/24 Javascript
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
使用React手写一个对话框或模态框的方法示例
2019/04/25 Javascript
搭建一个Koa后端项目脚手架的方法步骤
2019/05/30 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
vue中使用vee-validator完成表单校验方案
2019/11/01 Javascript
js实现拖动缓动效果
2020/01/13 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[04:37]DOTA2英雄梦之声Vol20发条
2014/06/20 DOTA
[43:03]完美世界DOTA2联赛PWL S2 PXG vs Magma 第二场 11.21
2020/11/24 DOTA
pygame学习笔记(5):游戏精灵
2015/04/15 Python
Python批处理更改文件名os.rename的方法
2018/10/26 Python
python scp 批量同步文件的实现方法
2019/01/03 Python
Python基础之条件控制操作示例【if语句】
2019/03/23 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
python自动结束mysql慢查询会话的实例代码
2019/10/27 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
用python写PDF转换器的实现
2020/10/29 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
金融系毕业生自荐书
2014/07/08 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
php去除deprecated的实例方法
2021/11/17 PHP