Database这门课的大Project是要做一个类似12306的数据库系统,不过在写框架之前总得有样例数据才来的安心。这篇文章闲来无聊就先写一下自己的思路吧。

准备工作

2020年之后12306.cn经历了大的调整,原有的教程大多都已不可用,不过还有少数接口依然保留而且有在返回较新的数据。

首先感谢GitHub Developer metromancn的Parse12306,主要思路大部分来自于他的成果。

经过实测,目前可用的有车站信息和车次信息两个接口。

车站信息

车次信息

那么,接下来开始轮询时刻表获取完整车次信息。

通过访问12306官网,得出对应URL(以2020-04-06日的Z3次列车为例):

https://kyfw.12306.cn/otn/queryTrainInfo/query?leftTicketDTO.train_no=24000000Z30L&leftTicketDTO.train_date=2020-04-06

除此之外也得到了关键词检索得出全部相关车次信息的接口,不过这次Project并不需要用到,所以先放到一边。

得到以下两个搜索所需的变量:

车次号

1
leftTicketDTO.train_no

出发日期

1
leftTicketDTO.train_date

接下来的工作就很简单了,不过在此之前有几件事需要注意(SOURCE: Parse12306 from GitHub):

a) 部分车次仅在特定日期运营(比如:工作日,周末,节假日等)
b) 同一车次,在不同日期,运营时刻和停靠车站可能不一样
c) 同一车次同一列车编号,在不同日期,运营时刻和停靠车站完全一致

开爬

晚上懒得写代码了,就单纯记一下思路,早上起来再干吧。

  1. Merge车次,去重后获得所有车次编号和相关信息
  2. 用车次对应的train_no查询时刻表获得JSON文件
  3. 解析之后整理,导出为CSV格式方便后续导入数据库

当然,也不要忘记保留车站和车次信息,同样导出为CSV格式