📜  使用Python在车站之间获取火车(1)

📅  最后修改于: 2023-12-03 15:36:36.603000             🧑  作者: Mango

使用Python在车站之间获取火车

这里介绍如何使用Python获取车站之间的火车信息。我们将使用requests库来获取数据,以及BeautifulSoup库来解析HTML文件。

安装依赖库

在开始之前,我们需要先安装必要的依赖库。在终端中输入以下命令:

pip install requests
pip install beautifulsoup4
发送API请求

我们可以通过访问国家铁路局的API来获取火车信息。以下是一个使用API请求数据的例子:

import requests

url = "https://kyfw.12306.cn/otn/leftTicket/queryZ"

params = {
    'leftTicketDTO.train_date': '2022-01-01',
    'leftTicketDTO.from_station': '北京',
    'leftTicketDTO.to_station': '上海',
    'purpose_codes': 'ADULT'
}

response = requests.get(url, params=params)

data = response.json()

在这个例子中,我们将API的URL设置为https://kyfw.12306.cn/otn/leftTicket/queryZ,并在请求中加入params参数。这些参数指定了我们希望查询的日期(2022-01-01)、出发站(北京)和目的地(上海),以及乘客类型(成人)。

requests.get函数用于向API发送请求,并返回响应。我们可以使用response.json()函数将响应数据转换为Python字典。

解析HTML文件

当我们请求到数据后,它会以HTML格式返回。我们需要使用BeautifulSoup库来解析HTML文件并提取所需的信息。以下是一个使用BeautifulSoup解析HTML文件的例子:

from bs4 import BeautifulSoup

soup = BeautifulSoup(data['data']['result'], 'html.parser')

for train in soup.select('tr'):
    train_data = train.select('td')
    if len(train_data) > 0:
        train_no = train_data[2].text
        from_station = train_data[6].text
        to_station = train_data[7].text
        start_time = train_data[8].text
        end_time = train_data[9].text
        duration = train_data[10].text
        print(train_no, from_station, to_station, start_time, end_time, duration)

在这个例子中,我们首先使用BeautifulSoup库解析响应数据,然后使用soup.select函数来选择HTML标签中包含所需信息的元素(在这个例子中是 <tr> 标签)。接着,我们从每个元素中提取所需的信息,如车次号码、出发站、到达站、出发时间、到达时间和历时时间。

完整代码

以下是一个完整的Python脚本,它使用API和BeautifulSoup库获取两个指定车站之间的火车信息:

import requests
from bs4 import BeautifulSoup

def get_trains_between_stations(from_station, to_station, date):
    url = "https://kyfw.12306.cn/otn/leftTicket/queryZ"

    params = {
        'leftTicketDTO.train_date': date,
        'leftTicketDTO.from_station': from_station,
        'leftTicketDTO.to_station': to_station,
        'purpose_codes': 'ADULT'
    }

    response = requests.get(url, params=params)
    data = response.json()

    soup = BeautifulSoup(data['data']['result'], 'html.parser')

    for train in soup.select('tr'):
        train_data = train.select('td')
        if len(train_data) > 0:
            train_no = train_data[2].text
            from_station = train_data[6].text
            to_station = train_data[7].text
            start_time = train_data[8].text
            end_time = train_data[9].text
            duration = train_data[10].text
            print(train_no, from_station, to_station, start_time, end_time, duration)

get_trains_between_stations('北京', '上海', '2022-01-01')

在运行脚本之前,请确保您已经安装了requestsBeautifulSoup库,并将参数from_stationto_stationdate设置为适当的值。在这个例子中,我们查询的是2022年1月1日从北京到上海的火车信息。