注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力!
1. 核心思路
- 需求:获取明天(2025 年 2 月 21 日)从北京到上海的车次、票价、出发时间、硬卧二等卧信息,并保存到 CSV 文件,然后分析出价格最低的 10 趟车次。
- 目标网站:12306.cn是一个铁路票务网站,有反爬虫机制,需要处理请求头、验证码等问题。同时,其数据接口可能需要进行参数分析。
-
获取车站代码:通过12306的接口获取北京和上海的车站电报码。
-
构造请求参数:设置出发地、目的地、日期等信息。
-
获取车次列表:调用12306的余票查询接口,解析车次基本信息。
-
查询票价信息:针对每个车次,调用票价查询接口获取硬卧/二等卧价格。
-
数据存储:使用
csv
模块将获取到的车次信息和票价保存到CSV文件。 -
数据分析:使用
pandas
库读取CSV数据,清洗筛选出硬卧二等卧价格数据,排序后取价格最低的 10 趟车次。
2. 数据获取
- 请求 URL:需要找到 12306 的车次查询接口,通常需要携带出发地、到达地、出发日期等参数。
- 请求头:设置合适的请求头,模拟浏览器行为,避免被反爬虫机制拦截。
- 处理验证码:12306 会有验证码机制,需要使用打码平台或人工识别。
- 解析数据:使用
requests
库发送请求,使用json
模块解析返回的 JSON 数据。 - 车站代码解析:通过JS接口获取全国车站电报码,正则解析
station_name.js
,构建{城市名:电报码}
字典。 - 车次列表获取:调用余票查询接口
leftTicket/query,
需动态解析返回数据字段索引(如出发时间在数组第8位)。 - 票价深度抓取:针对每个车次单独请求票价接口,依赖
train_no
和seat_types
参数,需关联车次基础数据。 - 数据持久化:使用
csv
模块处理中文编码问题,字段顺序优化,保存为CSV文件。 -
票价字段映射表(常见座位类型)
座位类型 | 接口字段 | 说明</ |
---|