java爬虫12306_java爬虫12306,爬取所有的站点和车次,并导入postgreSQL数据库

本文介绍了如何使用java爬虫抓取12306网站上的全部站点和车次信息,并将这些数据导入到postgreSQL数据库中。通过分析12306网页,找到了合适的接口,利用js解析数据,然后通过循环遍历所有站点组合,获取车次信息。数据存储在一张联合主键的表中,避免了重复。程序还实现了防止被12306限制请求的策略。
摘要由CSDN通过智能技术生成

准备

安装postgreSQL数据库,和可视化工具pgadmin3,或者其他数据库

实现功能,抓取12306全部的站点,并实现通过站点查询出所有经过次站点的车次,通过车次查出次列车经过的城市

分析

分析12306,找合适的接口,最符合要求的是查询车次的这张页面,但是有验证码,无形增加了难度

a3d888724246e64c5eaccfd3b90246da.png

经过分析,合适的页面是车票预订的页面,查询两个站点直接的车次,用火狐自带的f12工具,点击查询清晰的看到只有一条get请求

ab1cc071569adc20212a8ac2dac2d396.png

再看响应的内容,json,根据经验这是我们想要东西

c19454e075a8151735a6363a3f53c152.png

通过这条链接,我们可以得到两站点之间的车次信息,我们只需要车次的名称就好了,通过字符串或者正则都可以,正则不太熟,我用的是字符串

分析怎么才能把全国的站点和车次都抓取到,并且实现彼此查询的功能?

站点和城市多对多关系,理应建立三张表,用中间表关联.最后放弃了三表的想法,使用一张表联合主键实现

只要获取到全国的城市站点,通过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

66a0c0d1845aebe9fce33aef00a19c98.png

一条json数据

接下来,开始写程序,解析数据

数据库链接(换了台电脑改成了mysql数据库

publicclass DbUtil {

private static final String DBDRIVER="com.mysql.jdbc.Driver";

private static final String url= "jdbc:mysql://12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值