手机
当前位置:查字典教程网 >脚本专栏 >python >python实现2014火车票查询代码分享
python实现2014火车票查询代码分享
摘要:代码基于Python3.3.3,PyQt5.1.1复制代码代码如下:#-*-coding:utf-8-*-#Python3.3.3#PyQt...

代码基于Python3.3.3,PyQt5.1.1

复制代码 代码如下:

# -*- coding: utf-8 -*-

# Python 3.3.3

# PyQt 5.1.1

import sys,time,re,urllib.parse,urllib.request,http.cookiejar,json

from PyQt5.QtCore import *

from PyQt5.QtGui import *

from PyQt5.QtWidgets import *

"""cookie"""

cookie=http.cookiejar.LWPCookieJar()

#cookie.load('f:/cookie.txt',True,True)

chandle=urllib.request.HTTPCookieProcessor(cookie)

"""获取数据"""

def getData(url):

r=urllib.request.Request(url)

opener=urllib.request.build_opener(chandle)

u=opener.open(r)

#chandle.cookiejar.save('f:/cookie.txt',True,True)

data=u.read()

try:

data=data.decode('utf-8')

except:

data=data.decode('gbk','ignore')

return data

def postData(url,data):

data=urllib.parse.urlencode(data);data=bytes(data,'utf-8')

r=urllib.request.Request(url,data)

opener=urllib.request.build_opener(chandle)

u=opener.open(r)

#chandle.cookiejar.save('f:/cookie.txt',True,True)

data=u.read()

try:

data=data.decode('utf-8')

except:

data=data.decode('gbk','ignore')

return data

"""火车票"""

class Ticket:

def init(self,s,e,d):

self.li=[]

cont=getData('https://kyfw.12306.cn/otn/resources/js/framework/station_name.js')

s=re.findall('%s|([^|]+)' % s,cont)[0]

e=re.findall('%s|([^|]+)' % e,cont)[0]

url='https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=0X00&queryDate=%s&from_station=%s&to_station=%s' % (d,s,e)

cont=json.loads(getData(url))["data"]["datas"]

name=[

"station_train_code",

"from_station_name",

"to_station_name",

"lishi",

"swz_num",

"tz_num",

"zy_num",

"ze_num",

"gr_num",

"rw_num",

"yw_num",

"rz_num",

"yz_num",

"wz_num",

"qt_num"

]

for x in cont:

tmp=[]

for y in name:

if y=="from_station_name":

s=x[y]+'n'+x["start_time"]

tmp.append(s)

elif y=="to_station_name":

s=x[y]+'n'+x["arrive_time"]

tmp.append(s)

else:

tmp.append(x[y])

self.li.append(tmp)

"""ui"""

class Dialog(QDialog):

ticket=Ticket()

def __init__(self):

super().__init__()

self.resize(750,350)

#布局管理器

self.layout=[QVBoxLayout(self),QHBoxLayout()]

self.layout[1].setContentsMargins(0,0,0,0)

self.layout[1].setSpacing(0)

self.layout[0].setContentsMargins(0,0,0,0)

self.layout[0].setSpacing(0)

self.layout[0].addLayout(self.layout[1])

#按钮

btn=QPushButton("ok")

btn.clicked.connect(self.submit)

#输入选项

label=[QLabel("发站:"),QLabel("到站:"),QLabel("日期:")]

self.line=[QLineEdit(),QLineEdit(),QComboBox()]

y=int(time.strftime("%Y",time.localtime()))

m=int(time.strftime("%m",time.localtime()))

d=int(time.strftime("%d",time.localtime()))

i=0

yy=y

mm=m

dd=d

while i<20:

if m in (1,3,5,7,8,10,12):

if d+i>31:

dd=d+i-31

mm=m+1

if mm>12:

yy=y+1

mm=mm-12

else:

dd=d+i

elif m in (4,6,9,11):

if d+i>30:

dd=d+i-30

mm=m+1

if mm>12:

yy=y+1

mm=mm-12

else:

dd=d+i

else:

if (m%400==0) or ((m%4==0) and (m%100!=0)):

if d+i>29:

dd=d+i-29

mm=m+1

if mm>12:

yy=y+1

mm=mm-12

else:

dd=d+i

else:

if d+i>28:

dd=d+i-28

mm=m+1

if mm>12:

yy=y+1

mm=mm-12

else:

dd=d+i

s='%d-%02d-%02d' % (yy,mm,dd)

self.line[2].addItem(s)

i+=1

i=0

while i<3:

self.line[i].setMaximumWidth(100)

label[i].setMaximumWidth(50)

label[i].setAlignment(Qt.AlignRight|Qt.AlignVCenter)

self.layout[1].addWidget(label[i],Qt.AlignRight)

self.layout[1].addWidget(self.line[i],Qt.AlignLeft)

i+=1

self.layout[1].addWidget(btn)

#表格

head=['车次','发站','到站','历时','商务座','特等座','一等座','二等座','高级软卧','软卧','硬卧','软座','硬座','无座','其他']

self.table=QTableWidget()

self.table.setEditTriggers(QAbstractItemView.NoEditTriggers)

self.table.setColumnCount(15)

self.table.setHorizontalHeaderLabels(head)

self.layout[0].addWidget(self.table)

self.show()

def submit(self):

self.table.clearContents()

s=self.line[0].text()

e=self.line[1].text()

d=self.line[2].currentText()

self.ticket.init(s,e,d)

self.table.setRowCount(len(self.ticket.li))

i=0

for x in self.ticket.li:

j=0

for y in x:

if j==1 or j==2:

item=QLabel(y)

item.setAlignment(Qt.AlignCenter)

self.table.setCellWidget(i,j,item)

else:

item=QTableWidgetItem(y)

item.setTextAlignment(Qt.AlignCenter)

if not re.search('D',y):

item.setForeground(QBrush(Qt.red))

self.table.setItem(i,j,item)

if j>2 or j==0:

self.table.resizeColumnToContents(j)

j+=1

i+=1

if __name__=="__main__":

app=QApplication(sys.argv)

dialog=Dialog()

sys.exit(app.exec_())

【python实现2014火车票查询代码分享】相关文章:

python翻译软件实现代码(使用google api完成)

python计算最小优先级队列代码分享

python快速排序代码实例

win7安装python生成随机数代码分享

python读文件逐行处理的示例代码分享

Python 文件操作实现代码

python批量修改文件后缀示例代码分享

python聊天程序实例代码分享

python 图片验证码代码分享

python cookielib 登录人人网的实现代码

精品推荐
分类导航