0

0

如何使用python抢火车票

爱谁谁

爱谁谁

发布时间:2024-09-07 11:22:40

|

1130人浏览过

|

来源于php中文网

原创

使用 Python 抢火车票可提高成功率。获取车次信息:通过 requests 库发送 GET 请求获取车次信息。实时查询车票:循环发送 GET 请求查询车票,若有票打印车次信息。自动下单:循环查询车票并自动下单,若有票则拼接下单参数发送 POST 请求下单。

如何使用python抢火车票

如何使用 Python 抢火车票

介绍

抢火车票一直是一项艰巨的任务,尤其是热门线路和节假日出行高峰期。Python 作为一门强大的编程语言,可以自动化抢票过程,提高抢票成功率。

所需工具

立即学习Python免费学习笔记(深入)”;

千图设计室AI海报
千图设计室AI海报

千图网旗下的智能海报在线设计平台

下载
  • Python 3.6 或更高版本
  • requests 库
  • beautifulsoup4 库

步骤

1. 获取车次信息

import requests
from bs4 import BeautifulSoup

# 设置请求头,模拟浏览器访问
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'
}

# 发送请求获取车次信息
url = 'https://kyfw.12306.cn/otn/resources/js/query/train_list.js'
response = requests.get(url, headers=headers)

# 解析车次信息
soup = BeautifulSoup(response.text, 'lxml')
trains = soup.select('script')[-1].text

2. 实时查询车票

import time

# 设置查询参数
from_station = '北京'
to_station = '上海'
train_date = '2023-05-01'

while True:
    # 发送请求查询车票
    url = 'https://kyfw.12306.cn/otn/leftTicket/query?' + 'leftTicketDTO.train_date=' + train_date + '&leftTicketDTO.from_station=' + from_station + '&leftTicketDTO.to_station=' + to_station + '&purpose_codes=ADULT'
    response = requests.get(url, headers=headers)

    # 解析车票信息
    soup = BeautifulSoup(response.text, 'lxml')
    tickets = soup.find_all('tr')

    # 筛选出有票的车次
    available_trains = []
    for ticket in tickets:
        if ticket.find('td', {'id': 'ticket'}) is not None:
            available_trains.append(ticket)

    # 打印有票车次
    if len(available_trains) > 0:
        for train in available_trains:
            print('车次:{},出发站:{},到达站:{},出发时间:{},到达时间:{},剩余票数:{}'.format(
                train.find('td', {'id': 'train_no'}).text,
                train.find('td', {'id': 'from_station_name'}).text,
                train.find('td', {'id': 'to_station_name'}).text,
                train.find('td', {'id': 'start_time'}).text,
                train.find('td', {'id': 'arrive_time'}).text,
                train.find('td', {'id': 'ticket'}).text
            ))
            break
    else:
        print('暂无余票,继续查询...')

    # 间隔一段时间再查询
    time.sleep(1)

3. 自动下单

import time

# 设置抢票参数
seat_type = 'O'  # 座位类型(O:二等座,M:一等座)
passenger_name = '张三'  # 乘客姓名
passenger_id = '身份证号'  # 乘客身份证号
phone_number = '12345678910'  # 乘客手机号

# 循环查询车票并自动下单
while True:
    # 发送请求查询车票
    url = 'https://kyfw.12306.cn/otn/leftTicket/query?' + 'leftTicketDTO.train_date=' + train_date + '&leftTicketDTO.from_station=' + from_station + '&leftTicketDTO.to_station=' + to_station + '&purpose_codes=ADULT'
    response = requests.get(url, headers=headers)

    # 解析车票信息
    soup = BeautifulSoup(response.text, 'lxml')
    tickets = soup.find_all('tr')

    # 筛选出有票的车次
    available_trains = []
    for ticket in tickets:
        if ticket.find('td', {'id': 'ticket'}) is not None:
            available_trains.append(ticket)

    # 自动下单
    if len(available_trains) > 0:
        train = available_trains[0]
        seat_count = train.find('td', {'id': 'ticket'}).text  # 获取剩余票数

        if int(seat_count) >= 1:
            # 拼接下单参数
            data = {
                'secretStr': train.find('form', {'id': 'form_submit'})['action'],
                'train_date': train_date,
                'back_train_date': train_date,
                'tour_flag': 'dc',
                'purpose_codes': 'ADULT',
                'query_from_station_name': from_station,
                'query_to_station_name': to_station,
                'undefined': '',
                'from_station': from_station,
                'to_station': to_station,
                'seat_types': seat_type,
                'train_no': train.find('td', {'id': 'train_no'}).text,
                'stationTrainCode': train.find('td', {'id': 'station_train_code'}).text,
                'leftTicket': seat_count,
                'submitToken': train.find('input', {'id': 'submitToken'})['value'],
                'passengerTicketStr': passenger_name + ',1,' + seat_type + ',' + passenger_id + ',' + 'N' + ',11,' + phone_number,
                'oldPassengerStr': passenger_name + ',' + passenger_id + ',' + '11'
            }

            # 发送下单请求
            url = 'https://kyfw.12306.cn/otn/leftTicket/submitOrderRequest'
            response = requests.post(url, data=data, headers=headers)
            print(response.text)  # 打印下单结果

            break
    else:
        print('暂无余票,继续查询...')

    # 间隔一段时间再查询
    time.sleep(1)

相关文章

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

716

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

627

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

742

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1236

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

575

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

699

2023.08.11

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

65

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 2.6万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号