【每周代码】携程+12306爬虫项目实现

阅读: 评论:0

【每周代码】携程+12306爬⾍项⽬实现
最近⼀直在做爬⾍相关的⼯作
爬12306算是爬⾍⾥的经典项⽬了(我觉得基本类似于深度学习⾥的⼿写字符串识别项⽬了hhhh)
和普通的爬⾍项⽬不同,因为要⽤到实际的⼯作当中,所以整个流程进⾏了分布式处理:
⼤概思路如下:
1. 得到车次的全量表,存⼊数据库(⽅便以后更新)
2. 从数据库中得到车次,从携程上爬取对应车次的中间站信息⽹页
3. 将原⽹址和对应转存⽹址的链接都统⼀存在redis⾥
4. 将⽹址内容保存在ks3中
5. 根据需求从redis⾥到对应链接,从ks3中下载内容进⾏解析
这期间考虑了⼏个问题:
1. 因为12306太容易崩了,所以为了爬⾍的稳定性,除了总表是从12306⾥爬下来的以外,其他的部分都是从携程爬下来的。幸运的
是携程没有反爬机制:)
2. 分布式的好处在这⾥可能体现的不明显,对长期任务来说,⼀些⽐较难爬取的⽹页可以⼀次性存储到ks3中,根据需求多次解析。简
单快捷。
3. 依旧使⽤的是scrapy框架,所以代码部分没有体现redis存储和ks3存储(这⼀部分在⾃⼰搭建的架构的middlewares⽂件⾥修改)下载的代码如下所⽰:
下载成功以后打开,还没有解析的json⼤概是酱紫的:
因为在这个爬⾍项⽬中,⽇期的作⽤不⼤(只需要知道所有在运营的⽕车的车次号)
所以进⾏了解析,⽤正则表达式过滤了⽇期和车次后⾯对应的(出发-终点)的内容
代码如下所⽰:
北约成员国
处理完以后的数据如图所⽰火车实时动态查询
总共⼤概9000+数据,可以认为是⽕车车次可运⾏的全量表。
因为12306的⽹站总是时不时崩溃,所以换了携程的⽹站来爬取数据
(虽然携程的数据也不是很完善,后⾯还登陆了其他⽹站进⾏了补充
还发现了很多冷门⼩知识hiahiahia)
在这个代码之前我还写过⼀个百度百科的爬⾍,按照⼈名进⾏资料爬取,区别在于百度百科存在重名问题(⽐如张三可能有100个),所以需要对爬取的页⾯的“多义词”部分进⾏解析,把所有相同名字的全部爬取下来。
相⽐之下,携程的要简单很多,因为同⼀个车次,只会对应⼀个页⾯。
所以代码如下
这⾥涉及到读取数据库的部分并没有截取
转存到redis的部分写在middleware⾥,并不影响正常⽤框架爬取
需要注意的是,携程⽹页的编码⽅式是“gbk”
如果⽤utf-8的话会报错双塔山
后⾯因为数据不是很全,⼜换了别的⽹页来爬取,整体代码结构差不多,这⾥就不赘⾔了。
新疆吐鲁番技术层⾯来说,这并不是⼀个很难的操作,因为携程的⽹页上没有反爬机制,⽹页结构也⽐较简单(感觉携程的员⼯要来打我了
爬取流程⽐较顺畅
如果说意外收获的话,⼤概是发现了很多⽕车的冷知识?
⽐如P100,实际上车票是不会卖的,正常售票都统⼀按照Z100来售卖,这辆车是上海通往⾹港的,每⽇发车,但是隔⽇才会停⾹港,另⼀半时间在⼴东就停⽌了,所以⽕车系统内部为了区分,就把终点在⾹港的称作P100潮州十大旅游景点排名
hhhh通过⼩代码了解⼀些⼩知识,也是挺有意思的~
>8月底9月初适合去哪里旅游

本文发布于:2023-05-28 14:53:46,感谢您对本站的认可!

本文链接:http://www.035400.com/whly/2/443378.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:香港如厕攻略
下一篇:酒店OTA策略
标签:携程   爬取   部分   车次   没有   代码
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2024-2030 Comsenz Inc.Powered by © 文化旅游网 滇ICP备2022007236号-403 联系QQ:1103060800网站地图