Python实现12306查票以及自动抢票

article/2025/8/22 9:07:24

在这里插入图片描述
市场上很多火车票抢票软件大家应该非常熟悉,但很少有人研究具体是怎么实现的,所以觉得很神秘,其实很简单。下面使用Python模拟抢票程序,给大家揭秘抢票到底是怎么回事。

目录

  • 环境使用
  • 相关模块
  • 思路
      • 一. 数据来源分析
      • 二. 代码实现的过程
    • 代码

环境使用

Python 3.8
Pycharm

相关模块

requests  >>> pip install requests
prettytable  >>> pip install prettytable
selenium
json

思路

一. 数据来源分析

车票信息数据内容

  1. F12或者鼠标右键点击检查选择network 然后刷新一下网页数据, 让我们的数据包重新加载出来
  2. 通过搜索数据, 找到相应数据包, 然后查看请求url地址 请求方式, 以及请求头参数

二. 代码实现的过程

  1. 发送请求, 对于刚刚分析得到url地址发送请求
  2. 获取数据, 获取服务器返回响应数据
  3. 解析数据, 提取我们想要数据内容
  4. 格式化输出效果

代码

import requests  # 数据请求模块 第三方模块 需要安装 pip install requests
import prettytable as pt  # 表格格式的输出  第三方模块 需要安装 pip install prettytable
import json
import 回家的诱惑f = open('city.json', encoding='utf-8')
txt = f.read()
json_data = json.loads(txt)  # 转成字典数据类型
from_station =  input('请输入你出发的城市: ')
to_station =  input('请输入你目的城市: ')
# print(txt)
date = input('请输入你要出发的日期(格式: 2022-05-04):')
# print(json_data[from_station])
# print(json_data[to_station])

发送请求, 对于刚刚分析得到url地址发送请求python爬虫发送请求: 模拟浏览器对于url地址发送请求头: 伪装python代码, 让它伪装一个浏览器去发送请求字典的数据类型, 构建完整键值对形式User-Agent: 用户代理 浏览器基本身份标识 Cookie: 用户信息, 常用于检测是否登陆账号当你请求数据之后, 虽然返回 <Response [200]> 但是不一定得到你想要数据内容 得到的数据不是你想要, 说明你被反爬了

url = f'https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date={date}&leftTicketDTO.from_station={json_data[from_station]}&leftTicketDTO.to_station={json_data[to_station]}&purpose_codes=ADULT'
headers = {'Cookie': '_uab_collina=164560170606767104255119; JSESSIONID=FF0815861E927C16239D17FB558BE`在这里插入代码片`EB4; _jc_save_wfdc_flag=dc; BIGipServerotn=552075530.64545.0000; highContrastMode=defaltMode; guidesStatus=off; cursorStatus=off; BIGipServerpassport=770179338.50215.0000; RAIL_EXPIRATION=1651647477597; RAIL_DEVICEID=QFCYUNkm1nWxSSA0rSuVEXoMVPaWIGgX9w8FH8Yu7ay4-ChisEAYp_J9XqNHcXUDFIKPtGQHQEksjci_7olyH-f-CJqAS5G6-CcwgEd2u3tgVdfMz78HS5ismPQinORISLNIuLU-x4LvAoVG-5NZZwm836HyEgQn; route=6f50b51faa11b987e576cdb301e545c4; _jc_save_fromStation=%u957F%u6C99%2CCSQ; _jc_save_toStation=%u5CB3%u9633%2CYYQ; _jc_save_fromDate=2022-05-04; _jc_save_toDate=2022-04-30','User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.41 Safari/537.36'
}
# 通过requests数据请求模块里面get请求方法, 对于url地址发送请求, 并且携带上headers请求头伪装, 最后用response变量接收返回数据
response = requests.get(url=url, headers=headers)
# 2. 获取数据
# print(response.json())  #  <Response [200]>  请求成功 返回响应对象  不是完整json数据格式
# 3. 解析数据, 提取我们想要数据内容
tb = pt.PrettyTable()
tb.field_names = ['序号','车次','出发时间','到达时间','耗时','特等座','一等','二等','软卧','硬卧','硬座','无座',
]
page = 1
for index in response.json()['data']['result']:  # 把列表里面元素 一个一个提取出来, 用for循环遍历# index.split('|') # 字符串分割, 以|进行分割, 返回列表info = index.split('|')num = info[3]  # 车次start_time = info[8]  # 出发时间end_time = info[9]   # 到达时间use_time = info[10]    # 耗时topGrade = info[32]     # 特等座first_class = info[31]   # 一等second_class = info[30]  # 二等soft_sleeper = info[23]  # 软卧hard_sleeper = info[28]  # 硬卧hard_seat = info[29]  # 硬座no_seat = info[26]  # 无座dit = {'车次': num,'出发时间': start_time,'到达时间': end_time,'耗时': use_time,'特等座': topGrade,'一等': first_class,'二等': second_class,'软卧': soft_sleeper,'硬卧': hard_sleeper,'硬座': hard_seat,'无座': no_seat,}tb.add_row([page,num,start_time,end_time,use_time,topGrade,first_class,second_class,soft_sleeper,hard_sleeper,hard_seat,no_seat,])page +=1
print(tb)
word = input('请输入你想要购买车票: ')
回家的诱惑.get_train(int(word), from_station, to_station, date)

http://chatgpt.dhexx.cn/article/10HKDJQy.shtml

相关文章

春运12306抢票攻略

节假日/春运&#xff0c;出行/回家&#xff0c;相信大部分的网友都有和我一样的体验&#xff0c; 官网抢不到票&#xff0c;三方出行软件买了一堆加速包&#xff0c;也只是出行软件营销的一个噱头&#xff0c;最终还是买不到票&#xff0c;那么票都是被谁抢了&#xff0c; 毫无…

Python制作【大麦网】抢票程序,看演唱会再也不怕没票了

前言 大麦网&#xff0c;是中国综合类现场娱乐票务营销平台&#xff0c;业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 但是因为票数有限&#xff0c;还有黄牛们不能丢了饭碗&#xff0c;所以导致了&#xff0c;很多人都抢不到票 那么&#xff0c;今天带大家用Python来制…

Python抢票工具

春节抢票正在如火如荼的进行&#xff0c;过年回家那肯定需要抢票&#xff0c;每年的抢票大战&#xff0c;都是一场硬战&#xff0c;没有一个好工具&#xff0c;怎么能上战场死锁呢。今天小编推荐一个Python抢票工具&#xff0c;送到了GitHub趋势榜第一&#xff1a; 项目名很干脆…

微信小程序抢票脚本

但凡可以使用接口直接进行抢票的&#xff0c;都是基于小程序安全系数较低的情况下 所有加密&#xff0c;使用的数据都写在接口里 奥体整个后台也进行了重构&#xff0c;这套代码也使用不了了 现在的加密方式&#xff0c;完全看不懂 例&#xff1a; 这种加密没源码&#xff0c;…

【Android】基于Airtest实现大麦网app自动抢票程序

0x01 缘起 疫情结束的2023年5月,大家对出去玩都有点疯狂,歌手们也扎堆开演唱会。但演唱会多,票一点也不好抢,抢五月天的门票难度不亚于买五一的高铁票。所以想尝试找一些脚本来辅助抢票,之前经常用selenium和request做一些小爬虫来搞定自动化的工作,所以在 MakiNaruto/A…

12306火车票抢票Python代码最新完整版发布,五一抢票就靠它了!

语言版本&#xff1a;Python 1、自动登录12306并保持Cookie 2、自动实现抢购设置的某日期的某车次的票 3、攻克排队系统陷阱&#xff0c;避免进入排队系统 4、循环监控某车次的票&#xff0c;直到有票&#xff0c;自动抢购 5、抢票时若出现异常&#xff0c;自动重新抢票&a…

Python:基于Python爬虫技术的抢票程序及其实现

临近放假&#xff0c;相信我们每天都在群聊里或者朋友圈看到一些帮忙抢火车票的信息。看到朋友们抢回家的车票这么辛(bei)苦(can)&#xff0c;结合圈里一些前辈的指点&#xff0c;抱着学习的心态用Python做了一个简单的自动化抢票程序&#xff0c;抢到票之后通过绑定的邮箱&…

想去看演唱却总是抢不到票?教你用Python制作一个自动抢票脚本

前言 嗨喽&#xff01;大家好&#xff0c;这里是魔王&#xff01;&#xff01; 大麦网&#xff0c;是中国综合类现场娱乐票务营销平台&#xff0c;业务覆盖演唱会、 话剧、音乐剧、体育赛事等领域。 但是因为票数有限&#xff0c;还有黄牛们不能丢了饭碗&#xff0c;所以导致…

大麦演唱会为什么总抢不到票?抢票完整教程、详细步骤

文章目录 1.在浏览器上安装脚本管理器 1.登录网址Tampermonkey • Home 2.选择对应浏览器的版本&#xff0c;并安装。 这里以edge浏览器作为示范​编辑 2.在油猴脚本管理器中搜索脚本 2.1注意右上角的更新&#xff0c;点击获取新脚本。 2.2 在此页面搜索“大麦抢票” 3.安…

程序员的我是如何抢票的(Python)

马上就要回家过年了&#xff0c;你的票买好了吗。 虽然我不用抢票&#xff0c;但是还是研究了一下怎么抢票。 程序员嘛&#xff0c;就是要对一切问题进行解构&#xff0c;探索原理本质&#xff0c;寻找规律&#xff0c;将其自动化。。。 好了&#xff0c;言归正传&#xff0c;开…

12306 抢票系列之只要搞定RAIL_DEVICEID的来源,从此抢票不再掉线(上)

郑重声明: 本文仅供学习使用,禁止用于非法用途,否则后果自负,如有侵权,烦请告知删除,谢谢合作! 开篇明义 本文针对自主开发的抢票脚本在抢票过程中常常遇到的请求无效等问题,简单分析了 12306 网站的前端加密算法,更准确的说,是探究 RAIL_DEVICEID 的生成过程. 因为该 cookie…

技术宅---我的网上抢火车票攻略

写在前面 写这篇文章的起因是今天在12306上买火车票时&#xff0c;被这牛逼的网站给震撼到了&#xff0c;靠&#xff0c;牛叉得让人无语的用户体验啊。就讲讲我是如何利用一个小工具做辅助&#xff0c;幸运地抢到了回家的卧铺票的。希望能给有需要的兄弟们做个参考。 回顾下我今…

初学者怎么学java编程 ,小白们看过来吧

推荐一个java《学习》交流 群523401738每天晚上都有一个Java技术学习课,会有老师分享干货,帮助大家分析解答问题 一、java分为三大方向&#xff1a; CS架构&#xff08;java se&#xff09;。BS架构&#xff08;java web&#xff09;。java手机开发&#xff08;java me&#…

自学 Java 怎么入门?

自学会碰到的问题 自学可以省不少的钱&#xff0c; 可是自学会碰到很多问题。 我再自学的过程中找到了一个Java自学的网站(Java全栈工程师 | 以实例驱动学习 | how2j.cn)&#xff0c;试图解决一些自学中会碰到的问题。 1. 框架、思路、原理 一下子涌进来太多&#xff0c;弄不明…

Java 技术新手入门

Java 技术新手入门 什么是 Java 技术&#xff1f;Java 技术为什么重要&#xff1f;什么是 Java 组件技术&#xff1f;Java 技术如何与 Web 服务联系起来&#xff1f;如何提高 Java 编程技巧&#xff1f;Java 编程人员可以使用哪些 IBM 工具和产品&#xff1f; developerWorks J…

java基础编程入门教程,2022最新

Java学习到什么程度可以找第一份工作自己买了本Java从入门到精通。以为可以很快地学完,非CS专业。现在我想说所有系列的从入门到精通都是垃圾,一年多来,我每天白天看视频,晚上敲代码到凌晨,我是一个很倔的人,我认为天下没有任何东西是人类学不会的,所以我就付出高三一样的时间去…

新手小白入门编程第3讲 JAVA入门案例

1 HelloWorld案例 1.1 工作空间设置 工作空间就是一个文件夹,用来保存我们所有的开发文件和代码等等. 工作空间也是可以切换的,但是切换了工作空间,我们对于eclipse的设置就重置了. 后续我们自己写的代码可以去这个位置找到.可以如下图,选择工作空间的存放目录 1.2 eclipse…

Java编程学习入门、Java语言学习、Java入门必看

一、初识Java 1.生活中的程序&#xff1a; 从起床到教室上课的过程 穿衣打扮》起床》洗漱》出宿舍》》吃早餐》到教室 按照特定的顺序去完成某一件事的过程我们叫做生活中的程序 2.计算机中的程序: 一组有序指令的集合,需要和计算机交流就要使用计算机语言&#xff0c;ja…

关于1970年之前的时间要怎么转换成时间戳啊 负数要怎么处理

在这里有的人可能有疑问&#xff1f; 大家都知道java时间戳是从1970年1月1日0时0分0秒开始计算的,那么假如1960年的时间戳应该是多少呢&#xff1f; 下面是答案&#xff0c;负数&#xff0c;通过负数一样可以转化成正常的时间 年月日。 -3026880001960-05-30 00:00

moment.JS时间戳转换总是1970年问题

把时间戳 ✖1000 即可解决 例子moment(date * 1000).format(‘YYYY-MM-DD’); 还可以这样