Python爬取12306车次

介绍

在介绍如何使用Python爬取12306车次之前,我们先来了解一下整个流程。爬取12306车次主要包括以下几个步骤:

  1. 发送请求获取车次信息
  2. 解析返回的页面数据
  3. 提取所需的车次信息
  4. 存储数据

接下来,我将逐步为你解释每个步骤需要做什么,并提供相应的代码示例。

步骤一:发送请求获取车次信息

首先,我们需要发送一个HTTP GET请求到12306的查询接口,获取车次信息的页面。可以使用Python的requests库来发送请求,代码如下:

import requests

# 发送GET请求
response = requests.get(url)

其中,url是12306的查询接口的URL地址。

步骤二:解析返回的页面数据

当我们发送请求后,会得到一个HTML页面作为响应。接下来,我们需要使用一个HTML解析库将页面数据解析成可操作的对象。Python中常用的HTML解析库有BeautifulSouplxml,这里我们选择使用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: 发车、到达

以上是车次信息的关系图,表明了车次与车站、发车时间、到达时间之间的关系。