准备
安装postgreSQL数据库,和可视化工具pgadmin3,或者其他数据库
实现功能,抓取12306全部的站点,并实现通过站点查询出所有经过次站点的车次,通过车次查出次列车经过的城市
分析
分析12306,找合适的接口,最符合要求的是查询车次的这张页面,但是有验证码,无形增加了难度
经过分析,合适的页面是车票预订的页面,查询两个站点直接的车次,用火狐自带的f12工具,点击查询清晰的看到只有一条get请求
再看响应的内容,json,根据经验这是我们想要东西
通过这条链接,我们可以得到两站点之间的车次信息,我们只需要车次的名称就好了,通过字符串或者正则都可以,正则不太熟,我用的是字符串
分析怎么才能把全国的站点和车次都抓取到,并且实现彼此查询的功能?
站点和城市多对多关系,理应建立三张表,用中间表关联.最后放弃了三表的想法,使用一张表联合主键实现
只要获取到全国的城市站点,通过for循环两两测试,不就可以得到全部的火车车次了,并且两列都是主键,同时还解决了两个城市之间车次重复的问题,
1 CREATE TABLE public.t_city2(3 city_name character varying(64) NOT NULL,4 train_num character varying(64) NOT NULL,5CONSTRAINT t_city_pkey PRIMARY KEY (city_name, train_num)6 )
下一步要找到全国的火车站点
从页面的一条js中,找到一条连接 https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9049
一条json数据
接下来,开始写程序,解析数据
数据库链接(换了台电脑改成了mysql数据库
publicclass DbUtil {
private static final String DBDRIVER="com.mysql.jdbc.Driver";
private static final String url= "jdbc:mysql://12