📅  最后修改于: 2023-12-03 15:36:36.603000             🧑  作者: Mango
这里介绍如何使用Python获取车站之间的火车信息。我们将使用requests
库来获取数据,以及BeautifulSoup
库来解析HTML文件。
在开始之前,我们需要先安装必要的依赖库。在终端中输入以下命令:
pip install requests
pip install beautifulsoup4
我们可以通过访问国家铁路局的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格式返回。我们需要使用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')
在运行脚本之前,请确保您已经安装了requests
和BeautifulSoup
库,并将参数from_station
、to_station
和date
设置为适当的值。在这个例子中,我们查询的是2022年1月1日从北京到上海的火车信息。