PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下

结构图

效果图

思路

1、search(QPushButton)点击信号(clicked)连接到自定义的槽函数(event.search)

2、槽函数(event.search)接收四个参数:QTableWidget对象的引用、两个QLabel中的内容(站台名称)、QDateEdit格式化日期

3、槽函数(event.search)调用爬虫类(TrainService)获取车次信息,添加到QTableWidget对象中。

代码

1、ui.py(ui界面)

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

# Form implementation generated from reading ui file 'E:\Python\Qt\ui_0.ui'

#

# Created by: PyQt5 UI code generator 5.11.2

#

# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

from Event import EventClass

class Ui_MainWindow(object):

def setupUi(self, MainWindow):

event=EventClass()

MainWindow.setObjectName("MainWindow")

MainWindow.resize(793, 604)

MainWindow.setStyleSheet("font: 10pt \"Microsoft YaHei UI\";")

self.centralwidget = QtWidgets.QWidget(MainWindow)

self.centralwidget.setObjectName("centralwidget")

self.widget = QtWidgets.QWidget(self.centralwidget)

self.widget.setGeometry(QtCore.QRect(0, 0, 791, 43))

self.widget.setObjectName("widget")

self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget)

self.horizontalLayout.setSizeConstraint(QtWidgets.QLayout.SetNoConstraint)

self.horizontalLayout.setContentsMargins(10, 1, 1, 3)

self.horizontalLayout.setSpacing(15)

self.horizontalLayout.setObjectName("horizontalLayout")

self.label = QtWidgets.QLabel(self.widget)

self.label.setObjectName("label")

self.horizontalLayout.addWidget(self.label)

self.lineEdit = QtWidgets.QLineEdit(self.widget)

self.lineEdit.setMaximumSize(QtCore.QSize(742, 16777215))

self.lineEdit.setObjectName("lineEdit")

self.horizontalLayout.addWidget(self.lineEdit)

self.label_2 = QtWidgets.QLabel(self.widget)

self.label_2.setObjectName("label_2")

self.horizontalLayout.addWidget(self.label_2)

self.lineEdit_2 = QtWidgets.QLineEdit(self.widget)

self.lineEdit_2.setObjectName("lineEdit_2")

self.horizontalLayout.addWidget(self.lineEdit_2)

self.dateEdit = QtWidgets.QDateEdit(self.widget)

self.dateEdit.setDate(QtCore.QDate(2019, 1, 1))

self.dateEdit.setObjectName("dateEdit")

self.horizontalLayout.addWidget(self.dateEdit)

self.pushButton = QtWidgets.QPushButton(self.widget)

self.pushButton.setObjectName("pushButton")

self.horizontalLayout.addWidget(self.pushButton)

self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)

self.scrollArea.setGeometry(QtCore.QRect(0, 40, 791, 561))

self.scrollArea.setWidgetResizable(True)

self.scrollArea.setObjectName("scrollArea")

self.scrollAreaWidgetContents = QtWidgets.QWidget()

self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 789, 559))

self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")

self.tableWidget = QtWidgets.QTableWidget(self.scrollAreaWidgetContents)

self.tableWidget.setGeometry(QtCore.QRect(0, 0, 791, 561))

sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)

sizePolicy.setHorizontalStretch(0)

sizePolicy.setVerticalStretch(0)

sizePolicy.setHeightForWidth(self.tableWidget.sizePolicy().hasHeightForWidth())

self.tableWidget.setSizePolicy(sizePolicy)

self.tableWidget.setBaseSize(QtCore.QSize(0, 0))

self.tableWidget.setObjectName("tableWidget")

self.tableWidget.setColumnCount(5)

self.tableWidget.setRowCount(0)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(0, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(1, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(2, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(3, item)

item = QtWidgets.QTableWidgetItem()

self.tableWidget.setHorizontalHeaderItem(4, item)

self.tableWidget.horizontalHeader().setDefaultSectionSize(155)

self.tableWidget.verticalHeader().setDefaultSectionSize(47)

self.tableWidget.verticalHeader().setMinimumSectionSize(45)

self.line = QtWidgets.QFrame(self.scrollAreaWidgetContents)

self.line.setGeometry(QtCore.QRect(0, 23, 784, 31))

self.line.setToolTipDuration(0)

self.line.setLineWidth(1)

self.line.setFrameShape(QtWidgets.QFrame.HLine)

self.line.setFrameShadow(QtWidgets.QFrame.Sunken)

self.line.setObjectName("line")

self.scrollArea.setWidget(self.scrollAreaWidgetContents)

MainWindow.setCentralWidget(self.centralwidget)

self.retranslateUi(MainWindow)

self.pushButton.clicked.connect(lambda :event.search(self.tableWidget, self.lineEdit.text(), self.lineEdit_2.text(), self.dateEdit.date().toPyDate()))

QtCore.QMetaObject.connectSlotsByName(MainWindow)

def retranslateUi(self, MainWindow):

_translate = QtCore.QCoreApplication.translate

MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))

self.label.setText(_translate("MainWindow", "From"))

self.label_2.setText(_translate("MainWindow", "To"))

self.pushButton.setText(_translate("MainWindow", "search"))

item = self.tableWidget.horizontalHeaderItem(0)

item.setText(_translate("MainWindow", "车次"))

item = self.tableWidget.horizontalHeaderItem(1)

item.setText(_translate("MainWindow", "出发时间"))

item = self.tableWidget.horizontalHeaderItem(2)

item.setText(_translate("MainWindow", "到站时间"))

item = self.tableWidget.horizontalHeaderItem(3)

item.setText(_translate("MainWindow", "硬卧"))

item = self.tableWidget.horizontalHeaderItem(4)

item.setText(_translate("MainWindow", "硬座"))

if __name__ == "__main__":

import sys

app = QtWidgets.QApplication(sys.argv)

MainWindow = QtWidgets.QMainWindow()

ui = Ui_MainWindow()

ui.setupUi(MainWindow)

MainWindow.show()

sys.exit(app.exec_())

2、EventClass.py(自定义槽函数类)

#coding:u8

import time

from PyQt5.QtWidgets import QTableWidgetItem

from TrainService import TrainService

class EventClass(object):

def __init__(self):

self.trainService=TrainService()

pass

def search(self, table, From="北京", To="上海", Date=time.strftime("%Y-%m-%d", time.localtime())):

print("【{}】 form {} to {}".format(Date, From, To))

train_list=self.trainService.crawlTrainMess(From, To, Date)

print(table)

table.setRowCount(len(train_list))

for row, item in enumerate(train_list):

for col, i in enumerate(item):

if i is "":

i="0"

table.setItem(row, col, QTableWidgetItem(i))

pass

3、TrainService.py(爬虫类)

#coding_url:u8

import requests

import json

class TrainService(object):

def __init__(self):

with open("code.json", 'r') as file:

code=eval(file.read())

self.code=code

self.code_url="https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9002"

self.headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.7 Safari/537.36"}

def crawlTrainMess(self,from_station,to_station,train_date):

self.url="https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes=ADULT".format(train_date,self.code[from_station],self.code[to_station])

response=requests.get(self.url,headers=self.headers)

train_json=json.loads(response.text)

results=train_json['data']['result']

train_list=[]

for i in results:

temp=i.split('|')

train_list.append([temp[3], temp[8], temp[9], temp[25], temp[26]])

#print(train_list)

return train_list

def crawlCodeMess(self):

response=requests.get(self.code_url,headers=self.headers)

station_list=response.text.split('@')[1 :]

code={}

for i in station_list:

temp=i.split('|')

code[temp[1]]=temp[2]

#print(code)

with open("code.json", 'w') as file:

file.write(str(code))

if __name__=="__main__":

ts=TrainService()

ts.crawlCodeMess()

需要先跑 TrainService.py 获取到站点对应的代码信息code.json

然后在执行 ui.py

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

pythonrequests查询_PyQt5+requests实现车票查询工具相关推荐

  1. pythonrequests查询_Python Requests实例,查询成绩

    由于本人需要,自己写的一个 查询成绩的脚本(老师的系统),不提供地址,因为安全问题. # coding: utf-8 import requests import re import string i ...

  2. python 之 Qt Designer 高铁火车票查询工具

    一.制作UI界面 创建一个widget,从Widget Box工具箱中拖拽3个label.3个line Edit.1个Push Button.1个tableWidget.修改控件名后效果如下图,保存并 ...

  3. pythonrequests查询_python爬虫系列(八) 用requests实现天气查询

    这篇文章我们将使用 requests 调用天气查询接口,实现一个天气查询的小模块,下面先贴上最终的效果图 现有接口查询格式: 其中,city_code 为城市代号 接口返回数据格式: >> ...

  4. 实时 12306 车票查询

    实时车票查询及登陆CTC 0.说在前面 1.项目架构 2.模拟登陆 2.1 登陆分析 2.2 登陆实现 3.余票查询 3.1 查询分析 3.2 查询实现 4.运行展示 5.作者的话 0.说在前面 又是 ...

  5. Swing+Mysql实现的火车票管理系统3(功能分为普通用户和管理员,包含登录、车票查询、改签、购票、我的订单、用户注册、用户首页、车站管理、价格管理、用户管理等)

    博客目录 Swing+Mysql实现的火车票管理系统3 实现功能截图 系统功能 使用技术 代码 完整源码 Swing+Mysql实现的火车票管理系统3 本系统是一个火车票购票管理系统,分为普通用户和管 ...

  6. 实时车票查询及登陆CTC

    实时车票查询及登陆CTC 0.说在前面 本文实现下面两个功能 [第一] 如何登陆12306 [第二] 如何做到实时车票查询 当你们在排队等候服务器响应的时候,我已经买下票了: 当你们在抢购最后一张车票 ...

  7. 查询Linux系统网卡流量负载,超好用linux系统查询网卡等流量参数的工具,分享给大家!!!...

    超好用linux系统查询网卡等流量参数的工具,分享给大家!!! 工作中大家或许会遇到这类情况:托管服务器流量超出限额,可是突然又不能像windows主机那样通过QQ管家或者360卫士等软件工具那样很直 ...

  8. pacman 查询_掌握pacman包管理工具,玩转Arch Linux

    前言 在Arch/Manjaro系统中,包管理是使用pacman进行管理的. 常用命令 列出已经安装的软件包 pacman -Q 查看virtualbox包是否已经安装 pacman -Q virtu ...

  9. postgresql 查询序列_RazorSQL for Mac(数据库工具查询) v9.0.9

    RazorSQL Mac激活版是一款专门为mac用户推出的数据库管理软件,允许您从一个数据库工具查询,更新,导航和管理所有主要数据库! 软件特色 RazorSQL 是一个非开源的功能非常强大数据库查询 ...

最新文章

  1. DS, ES, SS, DI, SI, BP, SP, IP, FS 寄存器
  2. 【LeanEAP.NET】精益企业应用平台---源码Demo下载
  3. secureCrt开启oracle
  4. Oracle 11g RAC ASM 错误之(1)
  5. 004_CSS元素选择器
  6. 我的工作日志 - 2020年11月11日星期三 阴
  7. 第5章 Python 数字图像处理(DIP) - 图像复原与重建11 - 空间滤波 - 自适应滤波器 - 自适应局部降噪、自适应中值滤波器
  8. 清洁责任–摆脱均等,compareTo和toString
  9. 哪些数据库是行存储?哪些是列存储?有什么区别?
  10. python成绩登录界面_python实现登录界面
  11. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
  12. std::thread的使用
  13. SQL Server数据库的查询语句
  14. 三菱GXWorks2 变换梯形图
  15. 下载SE78里面的图片
  16. 设置两个路由器无线桥接
  17. AM5728 linux内核编译方法
  18. Windows 10 (Win10) 将绿色免安装软件,添加到动态磁贴
  19. CIE颜色空间是如何用来设计更好的led的
  20. ESP32C3驱动舵机

热门文章

  1. java基础 DK JRE JVM 关系 JDK 下载和安装
  2. E.164号码,E.214号码,E.212号码
  3. 先红雪后绿毒:iPad4.2.1越狱从不完美变为完美了
  4. ceph报 daemons have recently crashed
  5. 食品工程原理之伯努利方程的应用
  6. 10条Linux命令锦囊,防你牢底坐穿
  7. 诺禾-NFS 效劳器
  8. php 微商城 开源,一款基于ThinkPHP3.2开发的微信O2O开源微商城系统_微信开源微商城WEMALL...
  9. You have installed a lot of useless repos and Yum is not working properly becaus
  10. 最新基于ThinkPHP5.0+BootStrap框架开发的自适应WAP手机端响应式界面博客系统PHP源码