制作一个火车票查询余票的爬虫
用python写出一个12306查询余票的爬虫
制作一个火车票查询余票的爬虫
PS:因为我要接入网页里面的,所以只做了个大概功能,其余后期做个接口接入到网页
这是代码
1 |
|
这是结果:
1 |
|
制作过程
看着代码量挺少的,不过找东西浪费挺多的。。。
首先是链接的url
1 |
|
在12306查询网页上,按下F12,点击netword。输入站点和时间后,点击查询,就能找到这个连接了
可以看出有3个重要的值要传入,分别是时间:train_date=2017-09-02,出发站:from_station=CBQ终点站:to_station=IZQ
输入的城市他都会配到生成3个字母,而且没看出什么规律的,所以又得在netword里面翻一翻,最后看到一个叫station_name的,就找到链接了。里面是城市对应城市代码文件,然后又在网页源代码找到这个链接(因为这个文件会升级,所以就找到这个链接,制作一个可以随时生成城市-城市代码的文件)
代码:
1 |
|
这份代码里面的station_get用美丽汤匹配完是一个有包含这些元素的列表,而我要的那个刚好是第8个,就用切片取出来。
由于取出来后我用正则都正则不了,脑子没什么回路,于是就有了a,b,c这3行清洗数据的代码- -(后来也懒得改了)反正这样就匹配出来,然后就拼成一个连接就更get到那份城市-城市代码列表了=。=,之后在用正则就能取出来了,最后保存在json里面。注意一定要加入参数(ensure_ascii = False)不然就是生成\u23s这些东西
这份列表获取完了,可以进行下一步了(虽然我源代码里面没引用到- -。。。不过以后肯定得用到的)
由于12306有证书验证,所以要加(verify = False)
传入url后获取到的json可以看到我们的数据在[‘data’][‘result‘]里面,我们就可以把他取出来,由于取出来后是一个列表,我们就可以用split()来切割,切割完重点就来了 。。。前面站点,出发时间这些还好,后面那些票我得找好久啊,一直数也不是事。而且在网上,票数比较多就显示有,没票就显示无,其他也就显示几十张票,得查很久才能找到这些数据对应在哪里。(还好我比较懒,难得动脑筋-。-)。按下F12后按下面这张图找,如果右边那个框显示的格式不是这样的话,点击两个框中间的{}就可以了~~(还好12306容易找,然后搜索”–”就找到他对应的位置了。。),从图片可以看出什么票型对应在哪个位置,好像最后只有一个动卧我找不到,只能重新搜索,然后刚好哪个车次动卧有显示具体车票就找到了,然后发现网页的值是yb - -
python里面如果值为空显示其他值可以写(or ‘ 你期望的值’),果然python好啊!!!!
虽然看似简单,但找链接,匹配正则,最后匹配数据费了许多时间。而且这个还是我半年前曾经看过关于查询火车票的教程,现在还依稀记得才节约点时间-。-(哪个教程我找不到了。。。。。)
好了,抓取数据就这样愉快的捉取完了,至于怎么引用,得看到学到那里啊。。。还有看到潮汕到广州开学那段时间的票空空如也t_t。。。
- 本文作者:So1n
- 本文链接:http://so1n.me/2017/08/10/8_12306_spider/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!