项目实战一 12306火车票余票查询软件

项目实战一 12306火车票余票查询软件

  容易发现,12306余票查询的页面使用了Ajax,可以找到其header中的request url

  可以发现,这个url的基础是'https://kyfw.12306.cn/otn/leftTicket/query?',后面的一系列都是参数,包括时间、始发站、终点站、成人等。而车站的名称都是字母码表示的。要想构造完整的url,必须知道站名和字母码的关系表。

  找到12306出发站与目标站的地名对应文件,鼠标右键->copy link address,可以看到目前使用的文件外链是:https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9061,点进去可看到json数据

  可以测试一下,测试的时候取消“#”注释:

  在这里,特地打印出了构造的url,对比④中的request url,可以认为是合理的。

  有了正确的request url,可以看一下返回的数据的构造

  可以修改crawler函数如下:

  可以发现打印出好长一串字符(如果日期不是设置在今天且没有车次了的话:)),这些字符串应该是可以用json解析的,不然12306的界面显示肯定会混乱不堪,对吧?初步怀疑是两个json中的一个,先打开第一个。注意图中标记的{}可以prettyprint此json,不然多难看不是?

  美观多了,对吧?

  鼠标放在json文本窗口中,ctrl+f打开搜索功能,搜索t-list,这样就能减少阅读工作量,至于为什么要搜t-list,也算是一种基于经验的判断:

  搜索发现疑似目标

  复制出一段来,以备修改:

  ? ? ? ? ? ? var cq=ct[cr].split("|");

  ? ? ? ? ? ? cw.secretHBStr=cq[36];

  ? ? ? ? ? ? cw.secretStr=cq[0];

  ? ? ? ? ? ? cw.buttonTextInfo=cq[1];

  ? ? ? ? ? ? var cu=[];

  ? ? ? ? ? ? cu.train_no=cq[2];

  ? ? ? ? ? ? cu.station_train_code=cq[3];

  ? ? ? ? ? ? cu.start_station_telecode=cq[4];

  ? ? ? ? ? ? cu.end_station_telecode=cq[5];

  ? ? ? ? ? ? cu.from_station_telecode=cq[6];

  ? ? ? ? ? ? cu.to_station_telecode=cq[7];

  ? ? ? ? ? ? cu.start_time=cq[8];

  ? ? ? ? ? ? cu.arrive_time=cq[9];

  ? ? ? ? ? ? cu.lishi=cq[10];

  ? ? ? ? ? ? cu.canWebBuy=cq[11];

  ? ? ? ? ? ? cu.yp_info=cq[12];

  ? ? ? ? ? ? cu.start_train_date=cq[13];

  ? ? ? ? ? ? cu.train_seat_feature=cq[14];

  ? ? ? ? ? ? cu.location_code=cq[15];

  ? ? ? ? ? ? cu.from_station_no=cq[16];

  ? ? ? ? ? ? cu.to_station_no=cq[17];

  ? ? ? ? ? ? cu.is_support_card=cq[18];

  ? ? ? ? ? ? cu.controlled_train_flag=cq[19];

  ? ? ? ? ? ? cu.gg_num=cq[20] ? cq[20] : "--";

  ? ? ? ? ? ? cu.gr_num=cq[21] ? cq[21] : "--";

  ? ? ? ? ? ? cu.qt_num=cq[22] ? cq[22] : "--";


上一篇:关于南方地区地理位置和自然环境的描述,正确

下一篇:没有了