用python抢火车票怎么实现 抢火车票的实现可以分为以下几个步骤:

  1. 登录12306网站获取cookie和token;
  2. 查询符合要求的车次和座位信息;
  3. 选择需要抢购的车次和座位;
  4. 提交订单;
  5. 验证订单是否成功。

以下是一个简单的Python代码示例:

import requests
import time

# 登录12306网站
def login():
    url = 'https://kyfw.12306.cn/otn/login/init'
    response = requests.get(url)
    if response.status_code == 200:
        print('登录成功')
        return response.cookies, response.text.split("'")[1]

# 查询符合要求的车次和座位信息
def query_train(cookies, token):
    from_station = '上海'
    to_station = '北京'
    date = '2022-01-01'
    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'
    headers = {
        'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
    }
    response = requests.get(url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        data = response.json()['data']
        for item in data:
            train_info = item['queryLeftNewDTO']
            if train_info['station_train_code'] == 'G1' and train_info['canWebBuy'] == 'Y' and train_info['ze_num'] != '--':
                secret = item['secretStr']
                return secret, train_info['train_no'], train_info['from_station_telecode'], train_info['to_station_telecode'], date

# 选择需要抢购的车次和座位
def select_seat(cookies, secret, train_no, from_station, to_station, date):
    url = f'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'
    data = {
        'secretStr': secret,
        'train_date': date,
        'back_train_date': date,
        'tour_flag': 'dc',
        'purpose_codes': 'ADULT',
        'query_from_station_name': from_station,
        'query_to_station_name': to_station,
        'undefined': ''
    }
    headers = {
        'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
    }
    response = requests.post(url, headers=headers, cookies=cookies, data=data)
    if response.status_code == 200:
        print('选择座位成功')
        return response.cookies

# 提交订单
def submit_order(cookies):
    url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'
    headers = {
        'Referer': 'https://kyfw.12306.cn/otn/leftTicket/init',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
    }
    response = requests.get(url, headers=headers, cookies=cookies)
    if response.status_code == 200:
        print('提交订单成功')
        return response.cookies

# 验证订单是否成功
def check_order(cookies):
    url = 'https://kyfw.12306.cn/otn/confirmPassenger/getQueueCount'
    headers = {
        'Referer': 'https://kyfw.12306.cn/otn/confirmPassenger/initDc',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36'
    }
    data = {
        '_json_att': ''
    }
    response = requests.post(url, headers=headers, cookies=cookies, data=data)
    if response.status_code == 200:
        if response.json()['status'] == True:
            print('抢票成功')
        else:
            print('抢票失败')

if __name__ == '__main__':
    # 登录12306网站
    cookies, token = login()

    # 查询符合要求的车次和座位信息
    secret, train_no, from_station, to_station, date = query_train(cookies, token)

    # 选择需要抢购的车次和座位
    cookies = select_seat(cookies, secret, train_no, from_station, to_station, date)

    # 提交订单
    cookies = submit_order(cookies)

    # 等待5秒后验证订单是否成功
    time.sleep(5)
    check_order(cookies)

需要注意的是,由于12306网站的反爬机制比较严格,以上代码只是一个简单的示例,并不能保证一定能抢到火车票。如果需要抢票成功率更高,可以尝试模拟人的操作行为,例如使用Selenium模拟浏览器操作。

用python抢火车票怎么实现

原文地址: https://www.cveoy.top/t/topic/dvHc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录