先上效果图:
打开12306查询界面,右键查看元素,转到网络部分。为了方便看清查询过程,我们清空现有的记录。

查询后可以看到如下信息:
发现是通过get方法请求的数据,返回类型为json数据,点开后可以看到请求的地址:https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2019-02-14&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT
返回的文件为:

可以看到车票信息就在返回的json中。

同时发现map中列出的车站和城市是用三个字母表示的,如北京:BJP,上海:SHH等,如果想在客户端中直接查询城市的话还要知道城市和车站的代码。通过这个网址可以得到:
https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9091
因为数据比较乱,我整理之后放到了HashMap里面序列化保存到本地,并在程序启动时读取。
这样就可以模拟get请求获取数据了。

关键代码如下(这里用到了fastjson 可以直接百度的到):

import java.io.Serializable;
import java.util.*;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class SearchJSON implements Serializable {public String from;//三个字母的代码public String to;//代码public String date;//整理成yyyy-MM-dd的形式public String method;//成人:ADULT 学生:0X00public ArrayList<String> result;//用于存放列车的信息public HashMap<String, String> statMap;//用于存放车站信息//initpublic SearchJSON(String from, String to, String date, String method) {this.from = from;this.to = to;this.date = date;this.method = method;}//一个通过value查key的方法public static Object getKey(Map map, Object value){List<Object> keyList = new ArrayList<>();for(Object key: map.keySet()){if(map.get(key).equals(value)){keyList.add(key);}}return keyList;}public void search() {String url = "https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=" + date+ "&leftTicketDTO.from_station=" + from + "&leftTicketDTO.to_station=" + to + "&purpose_codes="+ method;// String url// ="https://kyfw.12306.cn/otn/leftTicket/queryZ?leftTicketDTO.train_date=2019-02-11&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=SHH&purpose_codes=ADULT";//System.out.println(url);String jsonStr = ConnGet.doGet(url);//System.out.println(jsonStr);//使用fastjsonJSONObject jsonObject = JSONObject.parseObject(jsonStr);JSONObject jsonDataObject = jsonObject.getJSONObject("data");JSONArray resultArray = jsonDataObject.getJSONArray("result");JSONObject stationMap = jsonDataObject.getJSONObject("map");result = new ArrayList<>();Iterator<Object> iterator = resultArray.iterator();while (iterator.hasNext()) {String re = (String) iterator.next();result.add(re);}statMap = new HashMap<>();Iterator<String> it = stationMap.keySet().iterator(); while (it.hasNext()){ String key; key=(String)it.next(); statMap.put(key,stationMap.getString(key));} }}

整理获得的ArrayList并打印出来:

public static String[][] parseResult(ArrayList<String> result){String[] temp_list[];try {temp_list = new String[result.size()][];}catch (Exception e){System.out.println("err in parsing json");temp_list =null;}System.out.println("车次\t出发\t到达\t历时\t一等\t二等\t软卧\t硬卧\t硬座\t无座\t高级软卧");System.out.println("--------------------------------------------------------------------------------------");for (int i = 0; i <result.size() ; i++){temp_list[i] = result.get(i).split("\\|");System.out.print(temp_list[i][3]+"\t");// 车次 出发时间 到达时间 历时 一等 二等 软卧 硬卧 硬座 无座 高级软卧 tmp_list[3],tmp_list[8],tmp_list[9],tmp_list[10],tmp_list[31],tmp_list[30],tmp_list[23],tmp_list[28],tmp_list[29],tmp_list[26],tmp_list[21] System.out.print(temp_list[i][8]+"\t");System.out.print(temp_list[i][9]+"\t");System.out.print(temp_list[i][10]+"\t");System.out.print(temp_list[i][31]+"\t");System.out.print(temp_list[i][30]+"\t");System.out.print(temp_list[i][23]+"\t");System.out.print(temp_list[i][28]+"\t");System.out.print(temp_list[i][29]+"\t");System.out.print(temp_list[i][26]+"\t");System.out.print(temp_list[i][21]+"\t");System.out.println();}return temp_list;}

至此,查询的功能部分已经完成。
剩下的只剩用户界面设计。

成品下载地址:
https://download.csdn.net/download/qq_25222351/10956090

【javafx】如何java查询12306火车票剩余数量相关推荐

  1. 一个可以查询全国火车票剩余票数的网址~以后回家不怕没座了~~

    这是一个可以查询到全国火车票剩余票量的网址,进入网页后选择下方的余票查询即可. http://www.12306.cn/mormhweb/kyfw/

  2. Python实现查询12306火车票信息

    例子来源于马哥的公众号,看了几遍,有些地方存在些疑问,然后就自己查找些资料,重写的一下,但是对于获取到的信息,并不能有效的解析出来,而且对于中文字符处理,并不是很好,请大神指教下!谢过! 1.接口设置 ...

  3. python django查询12306火车票

    逢年过节,想坐个高铁票,都得上12306去买票,但用过的都会发现,它会把临近站点的也筛出来了.但有时我们压根就不会考虑买到临近站点的. 另一方面,在购票高峰期,有可能你要的出发站到目的站都没有票了,这 ...

  4. python识别火车票二维码_Python实现查询12306火车票信息

    例子来源于马哥的公众号,看了几遍,有些地方存在些疑问,然后就自己查找些资料,重写的一下,但是对于获取到的信息,并不能有效的解析出来,而且对于中文字符处理,并不是很好,请大神指教下!谢过! 1.接口设置 ...

  5. 使用python代码查询12306火车票官网余票

    今天写一个12306余票查询的爬虫 首先使用Chrome浏览器打开12306检查这个查询过程发送的请求 点击完查询发现页面跳转了 现在打开检查元素,并且刷新此页面 在Network中找到了车次信息链接 ...

  6. 查询到全国火车票剩余票量的网址

    这是一个可以查询到全国火车票剩余票量的网址,进入网页后选择下方的余票查询即可.http://www.12306.cn/mormhweb/kyfw/ 一 关于放票时间 我们可能只知道"提前10 ...

  7. [转] 火车票剩余票数查询,以后不用为买票犯愁啦

    火车票剩余票数查询,以后不用为买票犯愁啦~~     这是一个可以查询到全国火车票剩余票量的网址,进入网页后选择下方的余票查询即可.http://www.12306.cn/mormhweb/kyfw/ ...

  8. 12306一直提示网络有问题_教你怎么在12306官网订购火车票 火车票查询12306订购...

    春运来了,快过年了, 又到一年中最一票难求的时候了,在外辛辛苦苦打拼了一年,为了让大家尽早的和亲朋好友家人团聚,本人今年很英勇的出来帮大家代抢火车票啦! 特地为大家建立了一个捡漏票微信群, 加微信qq ...

  9. python实现火车票查询_python实现12306火车票查询器

    12306火车票购票软件大家都用过,怎么用Python写一个命令行的火车票查看器,要求在命令行敲一行命令来获得你想要的火车票信息,下面通过本文学习吧. Python火车票查询器 接口设置 先给这个小应 ...

  10. python作业火车票订购系统_Python实现12306火车票查询系统

    最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...

最新文章

  1. 精灵图 html为什么会变大,[html] 第128天 精灵图和base64如何选择呢?
  2. 人工智能:决胜未来之道培训课程大纲
  3. 各版本jdk下载地址
  4. Python基础教程:生成器
  5. 注释,无处不在的注释
  6. 渗透测试初学者_渗透测试许可证:面向初学者的道德黑客课程
  7. 努比亚手机浏览器 安全证书失效_浏览器提示“该站点安全证书的吊销信息不可用”的解决方法-...
  8. ios开发之--令UITableView滚动到指定位置
  9. Linux自动删除n天前备份
  10. ipad无法充电怎么办_哈尔滨Ipad死机了维修费用价目表_京宏通讯器材维修培训学校...
  11. html在线编辑器 哪个好用,可视化HTML富文本编辑器有哪些?哪个好用?
  12. iphone目录结构
  13. java获取本机外网ip
  14. 几种能让Mac“飞”起来的系统空间清理方法
  15. 实战PyQt5: 130-使用HTTP请求下载文件
  16. 魔兽世界场景组织浅析
  17. 论文解读:AdderSR Towards Energy Efficient Image Super-Reso
  18. 软件工程学习笔记(一)
  19. 2021美赛C思路总结
  20. 共享文件夹服务器内存资源不足,『excel文件打开就提示可用资源不足,无法完成此任务』共享文件夹怎么设置...

热门文章

  1. ffmpeg复杂滤镜-filter_complex
  2. 【蓝桥杯选拔赛真题43】Scratch航天飞行 少儿编程scratch蓝桥杯选拔赛真题讲解
  3. NET Reflector 8 使用
  4. java 爬虫 微博_最新新浪微博爬虫程序Java版 2015
  5. EndNote 使用教程
  6. 脸上长痘部位详解 从痘痘看身体状况
  7. 报错:Exception opening socket
  8. java读取并导出多类型数据csv文件
  9. 求两个单链表的差集和并集
  10. 裸机服务器装系统步骤,组装裸机如何装系统?