利用python代码写的12306订票代码

yizhihongxing

下面是关于“利用Python代码写的12306订票代码”的完整攻略:

1. 背景介绍

12306是中国铁路客户服务中心开发的一套网络订票系统,也是全国人民购买火车票的主要途径之一。由于12306订票系统访问量大、用户集中,往往会出现抢票难的情况,因此有些程序员开发了一些自动化的代码来辅助用户进行抢票,提高购票成功率。

2. 编写过程

2.1 获取登录验证码

在进行订票前需要登录12306系统,因此需要获取登录页面的验证码。下面是获取验证码的Python代码示例:

import requests
import re
from PIL import Image

# 获取登录页面html
url = 'https://kyfw.12306.cn/otn/login/init'
html = requests.get(url).text

# 解析登录页面获取验证码图片地址
img_url = re.findall(r'id="loginImg".*?src="(.*?)".*?', html)[0]

# 下载验证码图片并打开
img = Image.open(requests.get(img_url, stream=True).raw)
img.show()

# 获取用户输入的验证码
code = input('请输入验证码:')

2.2 提交登录信息

在获取了验证码之后,需要提交登录表单来进行登录,下面是Python代码示例:

import requests

# 构建登录表单
data = {
    'loginUserDTO.user_name': 'username',
    'userDTO.password': 'password',
    'randCode': code,
    '_json_att': ''
}

# 提交登录表单
url = 'https://kyfw.12306.cn/passport/web/login'
response = requests.post(url, data=data, allow_redirects=False)

# 检查登录是否成功,成功的话会返回302跳转链接
if response.status_code == 302:
    print('登录成功!')
else:
    print('登录失败,请检查用户名和密码以及验证码是否正确。')

2.3 查询车票信息

登录成功后,需要查询车票信息来进行抢票,下面是Python代码示例:

import requests
import json

# 构建查询车次的url
date = '2022-01-02'
from_station = 'CQW'
to_station = 'BJP'
url = f'https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date={date}&leftTicketDTO.from_station={from_station}&leftTicketDTO.to_station={to_station}&purpose_codes=ADULT'

# 查询车次信息
response = requests.get(url)
data = json.loads(response.text)

# 解析车次信息
results = data['data']['result']
for result in results:
    items = result.split('|')
    train_no = items[2]
    start_station = items[6]
    end_station = items[7]
    start_time = items[8]
    end_time = items[9]
    duration = items[10]
    print(f'车次:{train_no},出发站:{start_station},到达站:{end_station},出发时间:{start_time},到达时间:{end_time},历时:{duration}')

2.4 提交抢票请求

查询到符合要求的车次后,就可以提交抢票请求了,下面是Python代码示例:

import requests

# 构建提交抢票信息的url和表单
train_date = '2022-01-02'
train_no = 'G101'
from_station = 'CQW'
to_station = 'BJP'
passenger_name = '张三'
data = {
    'secretStr': '',
    'train_date': train_date,
    'back_train_date': '2022-01-01',
    'tour_flag': 'dc',
    'purpose_codes': 'ADULT',
    'query_from_station_name': '重庆万州',
    'query_to_station_name': '北京',
    'undefined': '',
    'cancel_flag': '2',
    'bed_level_order_num': '000000000000000000000000000000',
    'passengerTicketStr': f'1,0,1,{passenger_name},1,ID Card,15723456789N,,
    'oldPassengerStr': f'{passenger_name},1,ID Card,15723456789N_',
    'tour_flag': 'dc',
    'randCode': ''
}
url = f'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'
response = requests.post(url, data=data)

# 检查提交是否成功,成功的话会返回json格式的数据,其中submitStatus为True
if response.json()['status'] == True:
    print('提交抢票请求成功!')
else:
    print('提交失败,请检查信息是否正确。')

3. 注意事项

  1. 对于使用自动化代码抢票的行为,12306官方并不支持,因此使用此代码可能会存在一定风险。
  2. 本文提供的代码仅供学习交流使用,请勿用于非法用途。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:利用python代码写的12306订票代码 - Python技术站

(0)
上一篇 2023年6月3日
下一篇 2023年6月3日

相关文章

  • 如何使用 Redis 的事务来保证数据一致性?

    以下是详细讲解如何使用 Redis 的事务来保证数据一致性的完整使用攻略。 Redis 事务简介 Redis 是一种高性能的键值存储数据库,支持多种数据结构和高级功能。其中,事务是 Redis 的一个重要功能,可以将多个命令打包成一个事务,保证这些命令的原子性执行。Redis 事务的特点如下: Redis 务是原子性的,要么全部执行成功,要么全部执行失败。 …

    python 2023年5月12日
    00
  • 详解Python 记录、结构体和纯数据对象

    Python中有多种方式来表示数据,这其中包括用列表、字典或对象等方式,其中包括记录、结构体和纯数据对象。本文将为您详细讲解Python 记录、结构体和纯数据对象的使用方法。 记录 Python 中的记录是一种类似于 C 或 Pascal 中的结构体。它是一个有序的由字段组成的元组,其中每个字段可以是一个任意类型的值。 定义一个记录可以使用namedtupl…

    python-answer 2023年3月25日
    00
  • Python监听键盘和鼠标事件的示例代码

    下面是Python监听键盘和鼠标事件的相关攻略: 监听键盘事件 Python监听键盘事件需要借助第三方库pynput,可以使用pip命令进行安装: pip install pynput 接下来我们可以开始编写代码: from pynput import keyboard # 当按下键盘某键时,该函数被调用 def on_press(key): try: pr…

    python 2023年6月5日
    00
  • Python基本文件操作实用指南

    Python基本文件操作实用指南 本文主要介绍Python中基本的文件操作,包括文件读写、目录遍历等内容。 打开文件 Python中使用open()函数打开文件,可以指定文件路径、文件打开模式和文件编码方式。其中,文件打开模式包括: r:读取模式,只能读取文件内容,不能修改文件内容。 w:写入模式,可新建一个文件,如果文件已存在则覆盖文件。 a:追加模式,将…

    python 2023年6月5日
    00
  • Python实现的线性回归算法示例【附csv文件下载】

    当然,我非常乐意给你详细讲解一下这篇文章。 标题:Python实现的线性回归算法示例【附csv文件下载】 文章概述:这篇文章是介绍如何使用Python实现线性回归算法的教程,作者在文章中详细解释了线性回归的定义、原理以及如何使用Python编写代码实现线性回归算法。同时,作者还提供了一份CSV文件的下载链接,为读者提供了使用此代码所需要的测试数据。 正文: …

    python 2023年6月3日
    00
  • python多线程案例之多任务copy文件完整实例

    下面我来详细介绍一下“Python多线程案例之多任务copy文件完整实例”的攻略。 1. 确定需求 在实现多线程copy文件之前,我们需要先明确需求和目标,也就是要实现什么功能,怎样实现。在本案例中,需求的核心是:使用多线程实现同时从一个目录中复制多个文件到另外一个目录中。 2. 实现思路 在明确需求之后,我们需要考虑实现的思路。在本案例中,可以通过以下几个…

    python 2023年5月18日
    00
  • Python 依赖地狱:virtualenv 和全局依赖之间的妥协?

    【问题标题】:Python dependency hell: A compromise between virtualenv and global dependencies?Python 依赖地狱:virtualenv 和全局依赖之间的妥协? 【发布时间】:2023-04-06 10:38:01 【问题描述】: 到目前为止,我已经测试了在 Python 中管…

    Python开发 2023年4月6日
    00
  • Python用selenium实现自动登录和下单的项目实战

    Python用selenium实现自动登录和下单的项目实战 1. 安装selenium和ChromeDriver 在Python中安装selenium和ChromeDriver,可以使用pip来安装selenium,使用ChromeDriver需要先下载driver。具体步骤如下: 安装selenium pip install selenium 下载Chro…

    python 2023年5月19日
    00
合作推广
合作推广
分享本页
返回顶部