爬取火车票以及票价

需求来源:一个文科生妹子,需要火车站的连通数据,写毕业论文。具体需求是,获取给定的313个车站之间的火车耗时最短的车次的最低票价。例如:
武汉到深圳的车次很多,以2018-06-08日为例,历时最短的车次是G77次高铁,最低票价是二等座538,现在的任务就是取出这313个城市两两之间的历时最短的车次的最低票价,普通火车对应的就是硬座,高铁或者动车对应的一般就是二等座。也不排除有其他情况。
这里写图片描述

操作步骤:
1.先打开游览器上面的开发工具,并且访问12306网站,查询武汉到深圳的车次,根据开发工具中的network->headers->request url。拿到访问的url,例如:武汉到深圳的url
https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2018-06-08&leftTicketDTO.from_station=WHN&leftTicketDTO.to_station=SZQ&purpose_codes=ADULT
从url上面看到,train_date就是你查询的日期,from_station是武汉火车站的车站代号,这个后面介绍,to_station是到达火车站的车站代号,purpose_codes是成人还是学生啦。
火车站代码可以从下面的那个js文件拿到。
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js
所有车次的数据:
https://kyfw.12306.cn/otn/resources/js/query/train_list.js?scriptVersion=1.0
2. 再次根据开发工具中的network->response中拿到会返回结果,也可以通过上面游览器访问步骤一中的url,查看返回结果。在结果中有几个需要关注的字段,”status”,”data”以及子字段”result”。
子字段”result”中的数据看上去比较复杂,我们主要的数据就在这个里面,把长串本次用不到的数据去掉之后,就是下面这个样子

"null|预订|930000Z23201|Z229|WAR|SZQ|WCN|SZQ|06:22|19:28|13:06|Y|null|20180606|3|R1|15|22|0|0|||||||无||有|有|||||101030|113|0"
"null|预订|4e000G10010B|G1001|WHN|IOQ|WHN|IOQ|07:25|12:12|04:47|Y|null|20180608|3|N2|01|08|1|0|||||||无||||有|有|20||O090M0O0|O9MO|0"

以’|’为分隔符,分解上面的数据,第三个段数据为车次编号,第四个段数据为车次号,第9个段数据为发车时间,后面一次为到达时间和历时时间,第15个段为起始站编号,16个段为到达站编号,第34个段为座位类型,这几个数据都是我们需要的,其他的字段在此不做分析了。对于历时时间,需要关注一种特殊情况,就是列车停运,从12306返回来看,如果某个车次列车停运,历时时间会是99:59。
3.通过上面的两个步骤,可以拿到历时最短的车次了,但是票价还没有得到,接着利用游览器的开发者工具,得到查询票价的接口,示例:信阳到深圳的2018-06-08车次G73票价查询接口
https://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=3800000G730B&from_station_no=04&to_station_no=10&seat_types=OM9&train_date=2018-06-08
通过步骤2中的分解,票价的查询url也可以得到。
4.查看票价查询结构的返回数据,如下示例,票价数据前面都有”¥”标记,解析一下”¥”标记即可。

idateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{"OT":[],"WZ":"¥609.0","M":"¥955.0","A9":"¥1888.0","9":"18880","O":"¥609.0","train_no":"3800000G730B"},"messages":[],"validateMessages":{}}

再这个过程中,还发现了一个比较好的网站,”http://www.jt2345.com
可以获取到所有车次的列车时刻表,但是票价数据没有,不过先利用爬虫爬取所有的列车时刻表,然后分析城市的火车连通情况,以及某些城市的中转情况。
[https://github.com/skyflower/python_study/tree/master/train_price ]

====================================================================

评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值