博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
是程序员就用Python查12306的票
阅读量:6530 次
发布时间:2019-06-24

本文共 1624 字,大约阅读时间需要 5 分钟。

0.环境

操作系统:Windows Python版本:3.5.2

1.前言

当你想查询一下火车票信息的时候,你还在上 12306 官网吗?或是打开你手机里的 APP? 下面让我们来用 Python 写一个命令行版的火车票查看器, 只要在命令行一敲就能获得你想要的火车票信息!如果你刚掌握了 Python 基础,这将是个不错的小练习。 效果图:

2.安装Requests库

若你的环境中没有requests模块,直接使用pip安装。

pip install requests

注:Requests库使用介绍详见 https://blog.csdn.net/i_chaoren/article/details/63266154

3.代码实现思路

首先我们打开12306的票价查询页面: https://kyfw.12306.cn/otn/leftTicket/init 以chrome为例,按下F12打开浏览器开发者编辑模式。随便输入起点终点,和开始日期,点击查询。

然后你就会看到开发者模式的network选项里会显示出来浏览器页面加载的文件,就像下图这样:

看不出什么?那我们再重新点击查询按钮好几次,你会发现浏览器跟着你的点击发起了好几次查询请求,就像下图这样,我这里用红框帮你标出来了:
在这些查询请求里,我们找一个点进去,看看它到底请求了点什么东西。
可以看到在点击查询按钮的时候,浏览器发起了一个名为 https://kyfw.12306.cn/otn/leftTicket/queryX?leftTicketDTO.train_date=2019-03-10&leftTicketDTO.from_station=SHH&leftTicketDTO.to_station=HHC&purpose_codes=ADULT 的请求。

我们来仔细看看这个url里面,train_date,from_station 以及 to_station 是不是分别代表着火车出发日期,始发站,终点站?

我们直接把这个url贴到浏览器里看看:

是不是发现了什么?

对了,这其实里面就包含了我们需要的火车票信息数据!!!

那我们是不是只要在代码里把我们自己需要查询的火车出发日期,始发站,终点站填进这个url,然后把返回的这些数据过滤一下显示出来就行了?

但是且慢,细心的同学会发现,from_station 和 to_station 里面的都不是正常的中文地名,而是代号,我们不能直接把中文地名填进url,而是需要把中文地名转换成代号,那这个代号又是哪里来的呢?

我们再看这个url请求12306响应了的东西:

可以在“map”里看到,城市火车站代号和城市火车站是有一一对应的关系的,那这些一一对应的关系又是藏在哪里的呢? 我们点击开发者模式的Sources选项,经过耐心查找,我们发现了一个东西,见下图:

看名字是不是觉得发现了什么? 我们把这个路径写成url贴进浏览器试试: https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9098

就这样成功发现了全国的火车站的名字及代号对应表!!!

4.总结

由于 12306 的接口经常变化,本文提供的代码可能会很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成这个应用。

好了,那现在代码的实现思路就有了。 我来给你梳理一下:

  • 填入你需要的出行日期、始发站、终点站。
  • 将获取到的中文始发站终点站,通过全国的火车站的名字及代号对应表转换成代号,再拼接成查询url,去查询数据。
  • 过滤并显示查询结果。

关注公众号「Python专栏」,后台回复「12306」获取完整代码~

转载于:https://juejin.im/post/5c8320d96fb9a04a027b28c9

你可能感兴趣的文章
Oracle 12C 新特性之 db默认字符集AL32UTF8、PDB支持不同字符集
查看>>
Linker Special Section Types
查看>>
一个android版本的rss阅读器--明天补充实现过程,先上图
查看>>
[转]Android模拟键盘和键盘监听的一些调研
查看>>
hadoop集群部署
查看>>
windows xp 批处理
查看>>
基本控件使用实例-使用组合框控件
查看>>
CBiontCache
查看>>
hibernate中3个重要的类 Configuration SessionFactory Session
查看>>
nginx的使用
查看>>
Quartz.NET配置
查看>>
Howto Building GNU Toolchains
查看>>
miRbase 数据库简介
查看>>
Java中如何动态创建接口的实现
查看>>
Ural_1207. Median on the Plane(计算几何)
查看>>
C#3.0学习笔记(4)浅谈结构struct
查看>>
百度得来的所谓“三层结构”
查看>>
ASP.NET Session的七点认识【转】
查看>>
8天学通MongoDB——第二天 细说增删查改
查看>>
借助WebService实现多线程上传文件
查看>>