Python语言技术文档

微信小程序技术文档

php语言技术文档

jsp语言技术文档

asp语言技术文档

C#/.NET语言技术文档

html5/css技术文档

javascript

点击排行

您现在的位置:首页 > 技术文档 > Python网络爬虫

python编程实例教程12306的一个小爬虫实例

来源:中文源码网    浏览:296 次    日期:2024-04-12 02:50:07
【下载文档:  python编程实例教程12306的一个小爬虫实例.txt 】


python编程实现12306的一个小爬虫实例
本文思路主要来源于实验楼的教程,但是一些具体的一些细节是我自己发现的,比如哪里获得站点对应的3位英文编号,怎么获得这个查询的url
本文用到的库主要有requests(获取url的内容),prettytable(让文本输出美观),argparse(命令行参数解析)
关于这些库怎么使用,可以参见我之前的博文
1、首先打开12306余票查询的界面
http://kyfw.12306.cn/otn/lcxxcx/init
我们想要的信息当然就是在输入了始发站、终点站和日期之后各车次的时间和车票余量,那么我们尝试在始发站使用检查元素,观察一下它是怎么上传始发站的信息的,那么我们不妨随便输入出发地、目的地和信息,使用抓包工具来看看它是怎么发包的(使用浏览器也可以,因为我们只需要查看包的内容,不需要更改包)
2、
在chrome的network中我们可以查看到我们点击之后浏览器发送的所有包(关于http包的知识不熟悉的同学,可以看看《图解http》这本书)
点击查询之后我们马上就会注意到以query开头的这个包,显然这就是一个查询指令,我们看看这个包的url
'http://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,我们马上就能发现,它就在标签的

相关内容