本文思路主要来源于实验楼的教程,但是一些具体的一些细节是我自己发现的,比如哪里获得站点对应的3位英文编号,怎么获得这个查询的url

本文用到的库主要有requests(获取url的内容),prettytable(让文本输出美观),argparse(命令行参数解析)

关于这些库怎么使用,可以参见我之前的博文

1、首先打开12306余票查询的界面

我们想要的信息当然就是在输入了始发站、终点站和日期之后各车次的时间和车票余量,那么我们尝试在始发站使用检查元素,观察一下它是怎么上传始发站的信息的,那么我们不妨随便输入出发地、目的地和信息,使用抓包工具来看看它是怎么发包的(使用浏览器也可以,因为我们只需要查看包的内容,不需要更改包)

2、

在chrome的network中我们可以查看到我们点击之后浏览器发送的所有包(关于http包的知识不熟悉的同学,可以看看《图解http》这本书)

点击查询之后我们马上就会注意到以query开头的这个包,显然这就是一个查询指令,我们看看这个包的url

'https://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=2016-10-04&from_station=BJP&to_station=XKS'

然后我们看看它的response

仔细观察就能发现它其实是一串json格式的字符串(要非常有经验。。。。)

3、经过以上这些过程,我们大致就能知道我们需要做的是什么了,我们只需要更改url中的data,fromstaion,tostaion后面的内容,然后用requests获得response,然后解析这一串json字符就行了。

但是我们会发现,日期还好说,对于fromstation和tostaion的代码,我们该怎么办呢?

4、有两种可能,一中可能是这些文件在服务器上,每回改变站点网页都会从服务器请求这个站点的代码,还有一种可能是这个已经下载到本地了,如何判断呢?我们不妨改变一下始发站,然后用抓包软件(或者浏览器)观察我们的浏览器是否向12306发送了包

把北京改成了上海,但是我们发现浏览器并没有发送包

这样我们基本可以肯定这个车站编号信息是存在本地了(已经从服务器下载下来)

5、我们这时候,就需要分析html来发现这个编号信息到底储存在了那里

我们试着检查一下出发地附近的html标签,在‘热门'上面点击检查,我们很容易发现这个标签上面带了一个onclick方法

我们发现这个onclick方法指向了一个js文件,并且名字是‘Stationfor12306',基本我们可以确定这个js文件就是我们需要的站点信息文件了。

6、我们尝试在这个html(12306余票查询界面)里面搜一下stationfor,我们马上就能发现,它就在

标签的

python12306下单步骤_python编程实现12306的一个小爬虫实例相关推荐

  1. python12306下单步骤_python+splinter实现12306网站刷票并自动购票流程

    通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...

  2. python12306下单步骤_Python 12306完整使用方式

    1.项目下载 首先介绍一下python 12306的项目,这个项目gitup的一个抢票开源项目,并且在gitup中排行最高,使用最多.打开百度,所有gitup,进入gitup,搜索12306,排名第一 ...

  3. python学习之 12306的一个小爬虫

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文思路 ...

  4. python获取电脑几核几线程_python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import ti ...

  5. python测试电脑性能的代码_python编程测试电脑开启最大线程数实例代码

    本文实例代码主要实现python编程测试电脑开启最大线程数,具体实现代码如下. #!/usr/bin/env python #coding=gbk import threading import ti ...

  6. python12306刷票脚本_python+splinter实现12306网站刷票并自动购票流程

    通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...

  7. python关系运算符实例_python编程中最常用的比较运算符实例

    python运算符-编程中最常用的比较运算符(实例解析) 今天这篇文章我们来说说python比较运算符,这个一共有七种不一样的运算符分别是等于.不等于.大于.小于.大于等于.小于等于,这七种是比较常用 ...

  8. python输入若干个整数试找出其中的最大数和最小数_Python编程的若干个经典小技巧...

    1. 原地交换两个数字 Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:x,y= 10,20 print(x,y) x,y= y,x print(x,y) #1 ...

  9. 编程练习:Matlab 一个小任务(-)

    前言 将一个完整的任务拆分成各个小块进行练习,有利于增强工程实践的能力. 任务描述: 某软件公司 受银行的委托,开发一个小程序,要求: 1 编制程序显示印章图像(24位真彩色位图) 2 读出位图中每一 ...

最新文章

  1. 免费Windows系统服务器,免费试用人数太多,Windows 365云电脑服务器炸了,官方紧急暂停...
  2. 「图解」ThreadLocal 在并发问题中的应用
  3. APP专项测试方法有哪些?
  4. PHP的empty isset is_null
  5. IDEA安装Spring Initializer插件
  6. CSS中height:100%和height:inherit的异同
  7. app canvas渲染后图片黑色_H5 基于 canvas 实现电子签名并生成PDF文档
  8. mvp内粗泄露问题_如何在一天内从MVP转到生产服务器
  9. 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告
  10. PyTorch报错“RuntimeError: one of the variables needed for gradient computation has been modified by……”
  11. J2EE中使用MediaInfo库获取视频信息
  12. php jpgraph 中文,JPGraph 4.0(for PHP7)中文字体设置
  13. NVivo的节点矩阵
  14. python文本框_Python GUI-在文本框中插入文本
  15. 线性代数学习笔记——第三十二讲——向量混合积的概念与性质
  16. 七缸发动机预热,docker swarm + .net core 高速飙车成功
  17. 发布Flv合并器的.net版
  18. DataTable转换为ListT或者DataRow转换为T
  19. 九宫格构图学习[1]
  20. Micro:Bit手柄试用之一MagicPad (解决蓝牙与gamePad包共存)

热门文章

  1. win10任务栏图标居中
  2. iPhone计算机没有删除键,iphone备份相片没删除键怎么用电脑删除
  3. qwebkit的套壳开发
  4. 软件构造 Lab4 Lab5 实验日记
  5. 《三体》刘慈欣:意识上传离现实还存在很大技术障碍
  6. python对参数二值化处理_OpenCV自适应阀值二值化表格检测方法(python版)
  7. 【日常积累】实验室作业Socket实现多个客户端相互通信。
  8. css画三角形、梯形
  9. 【Java开发环境搭建】
  10. 【openjudge】金银岛