Python爬取12306车次
介绍
在介绍如何使用Python爬取12306车次之前,我们先来了解一下整个流程。爬取12306车次主要包括以下几个步骤:
- 发送请求获取车次信息
- 解析返回的页面数据
- 提取所需的车次信息
- 存储数据
接下来,我将逐步为你解释每个步骤需要做什么,并提供相应的代码示例。
步骤一:发送请求获取车次信息
首先,我们需要发送一个HTTP GET请求到12306的查询接口,获取车次信息的页面。可以使用Python的requests
库来发送请求,代码如下:
import requests
# 发送GET请求
response = requests.get(url)
其中,url
是12306的查询接口的URL地址。
步骤二:解析返回的页面数据
当我们发送请求后,会得到一个HTML页面作为响应。接下来,我们需要使用一个HTML解析库将页面数据解析成可操作的对象。Python中常用的HTML解析库有BeautifulSoup
和lxml
,这里我们选择使用BeautifulSoup
。代码如下所示:
from bs4 import BeautifulSoup
# 使用BeautifulSoup解析页面数据
soup = BeautifulSoup(response.text, 'html.parser')
步骤三:提取所需的车次信息
在解析页面数据之后,我们需要从中提取出所需的车次信息。这里我们先分析一下页面结构,找到包含车次信息的HTML元素,然后使用相应的方法提取信息。
首先,我们需要找到所有的车次信息所在的HTML元素,通常是一个表格。可以使用find_all
方法找到所有符合条件的元素,代码如下:
# 找到车次信息的HTML元素
table = soup.find_all('table', class_='list_table')[0]
接下来,我们需要遍历表格中的每一行,找到所需的信息。通常,车次、出发站、到达站等信息会以特定的HTML标签(如<td>
)包裹起来。我们可以使用find_all
方法找到所有符合条件的元素,然后提取出相应的文本信息。代码示例如下:
# 遍历每一行,提取信息
for row in table.find_all('tr'):
# 提取车次信息
train = row.find('a').text
# 提取出发站和到达站信息
stations = row.find_all('td', class_='station')
start_station = stations[0].text
end_station = stations[1].text
# 提取发车时间和到达时间
times = row.find_all('td', class_='time')
start_time = times[0].text
end_time = times[1].text
# 其他信息的提取...
步骤四:存储数据
当我们提取到所需的车次信息后,可以选择将其存储到本地文件或数据库中,以供后续使用。这里我们选择将数据存储到CSV文件中。可以使用Python的csv
模块来实现。代码如下所示:
import csv
# 将数据存储到CSV文件中
with open('train_info.csv', 'w', newline='') as csvfile:
writer = csv.writer(csvfile)
# 写入表头
writer.writerow(['车次', '出发站', '到达站', '发车时间', '到达时间'])
# 写入每一行数据
for train_info in train_infos:
writer.writerow(train_info)
其中,train_infos
是一个包含所有车次信息的列表。
以上就是使用Python爬取12306车次的完整流程。希望本文能对你有所帮助。
关系图
erDiagram
CAR --|> TRAIN
TRAIN ||-| STATION: 经过
TRAIN ||-| TIME: 发车、到达
以上是车次信息的关系图,表明了车次与车站、发车时间、到达时间之间的关系。