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

下面是关于“利用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日

相关文章

  • 对python GUI实现完美进度条的示例详解

    下面我将详细讲解如何对Python GUI实现完美进度条的示例详解。 1. 了解进度条的组成部分 在Python GUI中实现进度条,我们要首先了解进度条的组成部分。通常进度条由以下几个部分组成: 状态文本:显示当前进度的文本,例如“正在加载…” 进度条区域:用于显示进度条的区域 进度条:显示进度的主体部分,通常是一个矩形或圆形区域 进度值文本:用于显示…

    python 2023年6月13日
    00
  • 简介二分查找算法与相关的Python实现示例

    下面是详细讲解“简介二分查找算法与相关的Python实现示例”的完整攻略。 二分查找算法 二分查找算法(Binary Search Algorithm)是一种常用的查找算法,用于在有序数组中查找指定元素。该算法的核心思想是将数组分成两份,判断目标元素在哪一部分中然后继续在该部分中查找,直到找到目标元素或者确定标元素不存在。 二分查找算法的时间复杂度为O(lo…

    python 2023年5月14日
    00
  • Python判断字符串与大小写转换

    让我们来详细讲解一下“Python判断字符串与大小写转换”的完整攻略。 判断字符串是否包含指定字符 in关键字 在Python中,要判断一个字符串中是否包含另一个字符串,最常用的方法是使用in关键字。in后面紧跟着要查找的字符,字符串中如果包含这个字符则返回True,否则返回False。 string = "hello world" if…

    python 2023年6月5日
    00
  • Python requests HTTP验证登录实现流程

    以下是关于Python requests HTTP验证登录实现流程的攻略: Python requests HTTP验证登录实现流程 在进行网络爬虫开发时,经常需要进行HTTP验证登录。Python requests库提供了HTTP验证登录的功能,可以轻松实现HTTP验证登录。以下是Python requests HTTP验证登录实现流程的攻略。 使用HTT…

    python 2023年5月14日
    00
  • Softmax函数原理及Python实现过程解析

    Softmax函数原理及Python实现过程解析 在机器学习中,Softmax函数是一种常用的激活函数,用于将一个向量转换为概率分布。本文将详细介绍Softmax函数的原理及Python实现过程,并提供两个示例。 Softmax函数原理 Softmax函数可以将一个向量转换为概率分布,使得每个元素的值都在0到1之间,并且所有元素的和为1。Softmax函数的…

    python 2023年5月15日
    00
  • 10招!看骨灰级Pythoner玩转Python的方法

    当然,我非常乐意为你讲解“10招!看骨灰级Pythoner玩转Python的方法”的完整攻略。 1. 数据类型的基础知识 在Python中,有许多不同的数据类型,如数字,字符串和列表等。你需要对它们有一定的了解才能有效地使用Python。以下是一些基本类型的说明: 数字 Python中的数字类型包括整数,长整数和浮点数。如果你希望在程序中使用数字,只需要直接…

    python 2023年6月3日
    00
  • 举例讲解Linux系统下Python调用系统Shell的方法

    当在Linux系统下需要调用系统的Shell命令时,Python提供了subprocess模块作为实现方式。在下面的攻略中,将在Python 3环境下讲解如何使用subprocess模块调用Shell命令。 1. subprocess模块的基本使用方法 在Python中使用subprocess模块可以轻松地调用系统的Shell命令,并获取执行结果。 impo…

    python 2023年6月2日
    00
  • python 爬虫百度地图的信息界面的实现方法

    下面我将详细讲解如何使用 Python 爬取百度地图的信息界面。 爬取百度地图信息界面的实现方法 1. 确定目标 URL 首先我们需要确定要爬取的目标 URL。以百度地图“北京市王府井”为例,目标 URL 为 https://map.baidu.com/?qt=inf&uid=bd1f868c57fc7fc3e691b5aa&auth=%40…

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