Python实现12306火车票抢票系统效果图如下所示:
具体代码如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
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:王小涛_同學 -------------------------------------------------------------- 欢迎使用! -------------------------------------------------------------- ''' ) 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火车票抢票系统,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
原文链接:https://www.cnblogs.com/xiaoyiq/archive/2019/07/04/11130297.html