Python 12306 余票查询实现指南

作为一名刚入行的开发者,你可能会对如何实现一个Python程序来查询12306的余票信息感到困惑。不用担心,我将通过这篇文章,一步步教你如何完成这个任务。

1. 整体流程

首先,我们需要了解整个查询余票的流程。以下是一个简单的流程表:

步骤描述
1获取登录凭证
2登录12306网站
3查询余票信息
4解析查询结果
5展示查询结果

2. 步骤详解

2.1 获取登录凭证

首先,我们需要获取登录12306网站的凭证。这通常包括用户名和密码。出于安全考虑,我们建议使用环境变量来存储这些敏感信息。

import os

username = os.getenv('12306_USERNAME')
password = os.getenv('12306_PASSWORD')
  • 1.
  • 2.
  • 3.
  • 4.
2.2 登录12306网站

接下来,我们需要使用一个Python库,如requests,来模拟登录过程。首先,我们需要发送一个POST请求到登录页面。

import requests

login_url = '
data = {
    'username': username,
    'password': password,
    'appid': 'otn'
}
session = requests.Session()
response = session.post(login_url, data=data)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
2.3 查询余票信息

登录成功后,我们可以发送另一个POST请求来查询余票信息。我们需要提供出发站、到达站、出发日期等信息。

query_url = '
query_data = {
    'leftTicketRequest': {
        'train_date': '2024-04-02',
        'from_station': 'BJP',
        'to_station': 'SHA',
        'purpose_codes': 'ADULT'
    }
}
response = session.post(query_url, data=query_data)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
2.4 解析查询结果

查询完成后,我们需要解析返回的JSON数据,以获取余票信息。

import json

result = json.loads(response.text)
tickets = result['data']['result']
  • 1.
  • 2.
  • 3.
  • 4.
2.5 展示查询结果

最后,我们可以将查询到的余票信息打印出来。

for ticket in tickets:
    print(f"Train: {ticket['train_no']}, Date: {ticket['start_time']}, Seats: {ticket['seat_types']}")
  • 1.
  • 2.

3. 序列图

以下是一个使用Mermaid语法的序列图,展示了整个查询过程:

W P U W P U W P U W P U Start Script Send Login Request Return Login Response Send Query Request Return Query Response Display Query Results

4. 结语

通过这篇文章,你应该对如何使用Python实现12306余票查询有了基本的了解。这个过程涉及到发送HTTP请求、处理JSON数据等基本概念。希望这篇文章能帮助你入门Python网络编程,并为你的编程之旅提供一些启发。

记住,编程是一个不断学习和实践的过程。不要害怕犯错,每一次错误都是成长的机会。祝你在编程的道路上越走越远!