1.[代码][Python]代码

# -*- 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实现火车票查询_火车票查询(python版)相关推荐

  1. python数据库模糊查询_原创:Python编写通讯录,支持模糊查询,利用数据库存储...

    1.要求 数据库存储通讯录,要求按姓名/电话号码查询,查询条件只有一个输入入口,自动识别输入的是姓名还是号码,允许模糊查询. 2.实现功能 可通过输入指令进行操作. (1)首先输入"add& ...

  2. python数据科学手册_小白入门Python数据科学

    前言 本文讲解了从零开始学习Python数据科学的全过程,涵盖各种工具和方法 你将会学习到如何使用python做基本的数据分析 你还可以了解机器学习算法的原理和使用 说明 先说一段题外话.我是一名数据 ...

  3. python创建sqlite3数据库_树莓派使用 Python + SQLite 建立温度数据库

    相比 MySQL 而言,SQLite 更为轻便.易于维护和部署.本文使用Python向SQLite数据库中插入树莓派温度数据,SQLite数据库中包含一张只包含三个字段的记录表--参数名称,时间和温度 ...

  4. python默认安装位置_如何更改python中pip的默认安装路径

    具体方法: 1.查看 site.py 文件的位置(一般在python安装目录的\Lib下),可使用指令查询:python -m site -help 2.打开site.py文件,更改 USER_BAS ...

  5. python使用md5加密_如何使用Python构建加密机器人并将其连接到Facebook Messenger

    python使用md5加密 by Paul Pinard 保罗·皮纳德(Paul Pinard) 认识Sato the Cryptobot,他能够从外部API获取任何加密货币的价格! (Meet Sa ...

  6. python 维基百科爬虫_如何使用Python提取维基百科数据

    python 维基百科爬虫 这是本教程的可视版: 我需要指出的是,我们不会手动抓取Wikipedia页面, Wikipedia模块已经为我们完成了艰巨的工作. 让我们安装它: pip3 install ...

  7. python gil全局锁_什么是Python全局解释器锁(GIL)?

    python gil全局锁 The Python Global Interpreter Lock or GIL, in simple words, is a mutex (or a lock) tha ...

  8. python 开源项目 书_十大 Python 机器学习开源项目

    1.Scikit-learn 用于数据挖掘和数据分析的简单而有效的工具,基于NumPy,SciPy和matplotlib,开源,商业可用的BSD许可证. Commits: 21486, Contrib ...

  9. python爬虫未来发展趋势_什么是Python爬虫?有什么应用空间?-未来数据科技关于礼的诗句...

    网友评论: 网络爬虫为一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成.传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面 ...

  10. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

最新文章

  1. UE4蓝图中的AI行为树功能使用经验指南
  2. 从一个路口转向另一个路口需要多少步
  3. 【错误记录】Android Studio 编译报错 ( cannot open this project, please retry with version 4.2 or newer. )
  4. Win10 calc.exe 无法打开计算器的解决方法
  5. FFmpeg源代码:avcodec_receive_frame
  6. 【转】datagridview的checkbox列,当修改checkbox状态时实时获得其准确状态值
  7. 【共读Primer】52.[6.3]返回类型和return语句--返回数组指针 Page205
  8. thinkphp5.0如何隐藏index.php入口文件
  9. 图解机器学习算法 | 从入门到精通系列教程(机器学习通关指南·完结)
  10. BAT、头条的时长战争:百度逆势领跑
  11. 快速排序(快排)——C语言实现
  12. [Neo4j] CQL命令
  13. Huggingface Transformers 安装报错 ImportError: /lib64/libc.so.6: version `GLIBC_2.18‘ not found
  14. SDYY大学普通话考试报名系统说明文档
  15. MAC下生成密钥,并使用ssh密钥登录
  16. 大数据的架构设计与未来
  17. 深入浅出ES6(四):模板字符串
  18. 求关于一条直线的对称点
  19. 硅谷之行 (18) 硅谷-斯坦福-旧金山
  20. 雷达图 自定义点样式 渐变背景色

热门文章

  1. Domain Adaptation 论文笔记
  2. 阿里网盘攻,百度网盘守
  3. 逍遥天龙八部服务器技能修改,泣诉天龙八部3逍遥三大难 技能修改势在必行
  4. 计算机网络工程师 考试题,计算机四级网络工程师考试题及答案.docx
  5. BLUES吉他学习笔记007 bluesrv[11]
  6. 飞猪研报:知识xingqiu
  7. mstar Android解锁,液晶电视维修之Mstar方案从强刷包提取引导的方法
  8. 杜兰大学计算机专业,杜兰大学计算机专业
  9. mysql 如何去掉毫秒_mysql 如何去掉毫秒值
  10. Ubuntu18.04 使用gnome-tweak美化系统主题