使用Python爬虫查询12306列车信息
来源:互联网 发布:知网查重入口 知乎 编辑:程序博客网 时间:2024/06/15 07:40
我们先随意设定出发地和目的地,这里选择了郑州-哈尔滨,然后打开开发者工具,再点击查询得到如下信息:
分别查看这两个结果,可以从第二个里面发现如下信息:
因为我们查询到的列车车次是六班,而这里的数据虽然是加密过的,但显示也是6组,所以我们可以断定这6组数据就是我们要爬取的列车信息。
在Headers标签内复制URL和User-Agent进行请求(由于12306的安全证书限制,所以这里需要忽略安全证书)。
https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=2017-10-31&leftTicketDTO.from_station=ZZF&leftTicketDTO.to_station=HBB&purpose_codes=ADULT
请求到的数据是json格式,简单分析后就可以很轻易的通过转化成字典得到我们需要的数据:
由于得到的result数据是由“|”隔开的,所以需要对字符串进行切割,然后判断不同信息所在的索引。这里由于数据比较多就不上传寻找的过程了,直接给结果,比如我们要查找硬座的信息,它的索引是29,如果要查询其他类型的座位只需要改动索引或者再加一些判断输出所有信息也可以(关于有座的车次,12306有的显示“有”,有的显示是具体数字,所以做了如下处理。):
至此我们就得到了2017年10月31号郑州-哈尔滨硬座有座位的车次信息了:
那如果要得到任意时间任意城市间的列车信息呢?我们继续分析Headers里面的信息
在这里我们可以发现前三个值分别是日期、出发地的城市名代号、目的地的城市名代号,由此可以自己构造URL,由于这里面的出发地和目的地不是用中文表示的,所以还需要做一些转化:http://www.pm-road.com/index.php/2014/09/01/86/
我在这里找到了对应关系,数据比较混乱需要自己提取一下,我处理完之后以字典的格式保存成了TXT文本以便查询:
然后以如下两个函数查询对应的城市码,考虑到两次查询城市码都要读取文件再做成字典比较耗时间,所以写成了两个函数,trainCode()在代码执行开始就运行完返回一个字典:
接下来就是构造URL啦,从键盘输入日期和出发地、目的地:
至此整个代码就完成啦!至于破解验证码…自动抢票..我就不会啦!可以去问大佬..从我的代码风格和渣渣手法应该能看出来我才学Python没多少天..萌新
运行一下:(别忘了这里只显示硬座的信息)
- 使用Python爬虫查询12306列车信息
- python 编写爬12306列车信息脚本
- 用python 通过12306api抓取列车信息
- Python爬虫----12306火车票余票查询器
- 【python爬虫】python使用代理爬虫例子
- python爬虫的使用
- Python爬虫基本使用
- python 爬虫简单使用
- Python爬虫Selenium使用
- 全路列车信息
- Python爬虫练习-查询lol隐藏分
- python爬虫实战-自动IP地址查询
- python.scrapy爬虫-xpath查询语法
- 使用python爬虫抓取学术论文
- python爬虫urllib使用B
- python爬虫cookie的使用
- 爬虫中的python使用技巧
- Python网络爬虫使用总结
- 50. Pow(x, n)
- java并发包中的Lock
- va_list/va_start/va_arg/va_end深入分析
- SpringMVC异步加载
- Json
- 使用Python爬虫查询12306列车信息
- 我的电路初学
- python 的进程、线程以及协程(2)
- bootstrap之popover
- [noip2014]联合权值
- [Python基础]函数
- 大数据之路-MAC中VMwareFusion安装CentOS6.8
- COM学习(三)——COM的跨语言
- JSP基础(十六)——使用JDBC进行批处理