火车票车票查询-Python

一、相关代码

# @Time: 2024/1/22 20:24
# @Author: 马龙强
# @File: 实现12306查票购票.py
# @software: PyCharm
"""网址:https://www.12306.cn/index/
数据:车次信息
查票链接:https://kyfw.12306.cn/otn/leftTicket/queryE?leftTicketDTO.train_date=2024-01-23&leftTicketDTO.from_station=LON&leftTicketDTO.to_station=XUN&purpose_codes=ADULT
"""
import requests
from pprint import pprint
import json#导入漂亮的制表
from prettytable import PrettyTable"""查票功能
1.输入出发城市
2.输入目的城市
3.输入出发时间
根据输入城市 -> 通过 city.json 找到对应城市字母(station.json 对应车站)12306自动购票"""
#读取json文件
f = open('city.json',encoding='utf-8').read()
#转成json字典
city_data = json.loads(f)
# print(city_data)
from_city = input('请输入出发的城市:')
site_city = input('请输入到达的城市:')
from_time = input('请输入出发的时间:')  #2024-01-25
print('出发城市字母',city_data[from_city])
print('目的城市字母',city_data[site_city])"""发送请求:模拟浏览器对于url地址发送请求"""
#请求网址
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36","Cookie": "_uab_collina=170592620040439510680099; JSESSIONID=80E55A815952C4C2E5B1AC826CC88FF0; BIGipServerpassport=1005060362.50215.0000; guidesStatus=off; highContrastMode=defaltMode; cursorStatus=off; route=6f50b51faa11b987e576cdb301e545c4; BIGipServerotn=2095579402.64545.0000; _jc_save_fromStation=%u6F2F%u6CB3%2CLON; _jc_save_toStation=%u4FE1%u9633%2CXUN; _jc_save_fromDate=2024-01-23; _jc_save_toDate=2024-01-22; _jc_save_wfdc_flag=dc"
}url = f'https://kyfw.12306.cn/otn/leftTicket/queryE?leftTicketDTO.train_date={from_time}&leftTicketDTO.from_station={city_data[from_city]}&leftTicketDTO.to_station={city_data[site_city]}&purpose_codes=ADULT'#发送请求
response = requests.get(url=url,headers=headers)
# print(response.json())
# print(response.text)
json_data = response.json()#实例化一个对象
tb = PrettyTable()
#设置一个字段名
tb.field_names = ['序号','车次','出发时间','到达时间','时长','特等座','一等座','二等座','软卧','硬卧','硬座','无座',
]
#设置序号
page = 1
# pprint(json_data)
#提取车次信息所在列表
result = json_data['data']['result']
# pprint(result)
#for循环遍历,提取列表里面的元素
for i in result:# print(i)#字符串分割 -> index列表index = i.split('|')# print(index)num = index[3]  #车次time_1 = index[8]   #出发时间time_2 = index[9]   #到达时间time_3 = index[10]  #时长topGrade = index[32]    #特等座first_class = index[31] #一等座second_class = index[30]    #二等座hrad_sleeper = index[28]    #硬卧hard_seat = index[29]   #硬座no_seat = index[26]     #无座soft_sleeper = index[23]    #软卧dit = {'车次': num,'出发时间': time_1,'到达时间': time_2,'时长': time_3,'特等座': topGrade,'一等座': first_class,'二等座': second_class,'软卧': soft_sleeper,'硬卧': hrad_sleeper,'硬座': hard_seat,'无座': no_seat,}#车次# print(index)# page = 0# for j in index:#     print(page,j,sep='****')#     page+=1# break#添加字段内容tb.add_row([page,num,time_1,time_2,time_3,topGrade,first_class,second_class,soft_sleeper,hrad_sleeper,hard_seat,no_seat,])# print(dit)page +=1print(tb)

二、结果

三、注意12306城市对应缩写city.json的获取

1.相关链接:12306城市名对应字母缩写 - 悟透 - 博客园 (cnblogs.com)

2.在桌面创建文本文件,复制内容到文本文件中,保存后,更改后缀为.json,放到与代码同级的目录中

四、过程请查看代码注释

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java算法 leetcode简单刷题记录2

Java算法 leetcode刷题记录2 最后一个字母长度: https://leetcode.cn/problems/length-of-last-word/ str.trim() 去掉开头结尾空格;不会去掉中间空格; 搜索插入位置(有序的数列,2分查找法):ht…

P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two题解

题目 两只牛逃跑到了森林里。Farmer John开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和John)。 追击在1010的平面网格内进行。一个格子可以是:一个障碍物,两头牛(它们总在一起)&#x…

20.有效的括号(附带源码)

目录 一、思路 二、源码 一、思路 左括号入栈,遇到右括号则出栈进行匹配。 1、如果不匹配,false 2、如果匹配完,栈不空,false 3、如果栈空,但是还有右括号,false 二、源码 // 支持动态增长的栈 typed…

常用界面设计组件 —— 数字输入和显示组件

2.3 数字输入和显示组件2.3.1 QSpinBox 与 QDoubleSpinBox2.3.2其它数值输入和显示组件 2.3 数字输入和显示组件 2.3.1 QSpinBox 与 QDoubleSpinBox QSpinBox用于整数的显示和输入,一般显示十进制 数,也可以显示二进制、十六进制数,而且可以…

GEE错误——Image (Error) Image.select: Pattern ‘SR_B1‘ did not match any bands.

错误 我花了大量时间试图解决这个问题,但我找不到解决办法。开发人员和小组成员,我需要你们的帮助,这是我学习项目的一部分。 原始代码链接: https://code.earthengine.google.com/ccd8eb582aa520b970f4dee2d5118def Image (Error) Image.select: Pattern SR_B1 did …

02 MyBatisPlus核心功能之基于Mapper接口/Service接口实现CRUD+分页查询

项目结构: 1.1 Insert方法 // 插入一条记录 // T 就是要插入的实体对象 // 默认主键生成策略为雪花算法(后面讲解) //返回值是影响条数 int insert(T entity);1.2 Delete方法 // 根据 entity 条件,删除记录 int delete(Param(…

Python学习03—Python语法元素分析

一、程序的格式框架 1.1 代码高亮 代码高亮是Python编程环境根据代码不同含义,给予不同色彩标注的一种色彩辅组体系。在不同的代码编程环境中,代码高亮的表现形式各有不同。 1.2 缩进 缩进是一行代码开始前的空白区域,它用来表达程序的格式…

不同知识表示方法与知识图谱

目录 前言1 一阶谓词逻辑1.1 简介1.2 优势1.3 局限性 2 产生式规则2.1 简介2.2 优势2.3 局限性 3 框架系统3.1 简介3.2 优势3.3 局限性 4 描述逻辑4.1 简介4.2 优势4.3 局限性 5 语义网络5.1 简介5.2 优势5.3 局限性 结语 前言 知识表示是人工智能领域中至关重要的一环&#x…

vue3前端开发,生命周期函数的基础练习

vue3前端开发,生命周期函数的基础练习! 下面先给大家看一个图片,帮助大家了解,vue3的生命周期函数,和旧版本vue2的生命周期函数,有什么变化。 如图所示,vue3里面,把前面2个函数,混在…

再不学Python就晚了!——2023年度总结:市场需求最大的8种编程语言!

众所周知,编程语言的种类实在是太多了。直到现在,经常还会看到关于编程语言选择和学习的讨论。 虽说编程语言有好几百种,但实际项目使用和就业要求的主流编程语言却没有那么多。 大家可能也会好奇:现如今就业市场上到底什么编程…

【C++】Qt:QCustomPlot图表绘制库配置与示例

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍QCustomPlot图表绘制库配置与示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次…

【网站项目】新冠疫情隔离人员信息管理系统(有源码)

🙊作者简介:多年一线开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板,帮助书写开题报告。作者完整代码目录供你选择: 《Springboot网站项目…

kingbase常用SQL总结之锁等待信息

锁信息与等待事件 分析kingbase(pg)数据库锁等待、死锁时需要我们准确的定位等锁或者死锁相关的事务。关于获取锁等待信息或者死锁信息已有经典的SQL可以直接使用,但是需要我们先了解sql语句获取的每个字段的意义。 获取到锁等待事务不能完全…

C++之函数名后面的const

在 C 中,函数名后面加上const 关键字表示该函数不会修改对象的成员变量(除非成员变量是mutable的)。这是一种良好的编程习惯,可以提高代码的安全性和可读性。 在这个例子中,internalWinId() 和 effectiveWinId() 都被声明为 const,这意味着它…

【Linux与windows的文件互相传输】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 关于 rzsz 注意事项 查看软件包 使用命令 下载到本地(使用sz的命令) 本地文件上传到Linux中(使用rz命令) 方法一…

【立创EDA-PCB设计基础】3.网络表概念解读+板框绘制

前言:本文对网络表概念解读板框绘制(确定PCB板子轮廓) 网络表概念解读 在本专栏的上一篇文章【嘉立创EDA-PCB设计指南】2,将设计的原理图转为了PCB,在PCB界面下出现了所有的封装,以及所有的飞线属性&…

Minio 判断对象是否存在

引 Minio数据模型 中描述了 MinIO 中什么是桶,什么是对象,也给出了操作桶和操作对象的API。 在 MinIO 中, 对象 中间前缀 对象名称 。如何判定对象是否存在呢? 分析 在 MinIO 中并没有提供判断对象是否存在的操作&#xff…

React16源码: React中的updateHostComponent的源码实现

updateHostComponent 1 )概述 在 completeWork 阶段的 HostComponent 处理,继续前文所述在更新的逻辑里面,调用了 updateHostComponent进行前后props对应的dom的attributes变化的对比情况这个方法也是根据不同环境来定义的,我们这…

Python基础之文件操作(I/O)

和其他编程语言一样,Python 也具有操作文件(I/O)的能力,比如打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。合理应用python提供的文件操作基本函数,可大大提高自动化实现的效率与框架代码的稳定性…

C++ | 六、栈 Stack、队列 Queue

栈的基础知识 栈&#xff08;stack&#xff09;是一种数据结构&#xff0c;在C中属于STL&#xff08;标准库&#xff09;特点&#xff1a;先进后出 栈的使用&#xff1a; 一、引入头文件<stack>二、创建栈变量&#xff08;类似容器、集合的创建方式&#xff09;&#xf…