用Python把github上非常实用的数据全部抓取下来!留给自
2018-06-30 本文已影响24人
de69a2cfb530
这是我根据这个流程实现的代码,网址:LiuRoy/github_spider
Python的学习q-u n 二二七,四三五,四五零 ,是想转行还是想入行都可以来了解一起进步一起学习!裙内有开发工具,很多干货和技术资料分享!希望新手少走弯路递归实现
运行结果
因为每个请求延时很高,爬虫运行效率很慢,访问了几千个请求之后拿到了部分数据,这是按照查看数降序排列的python项目:
这是按粉丝数降序排列的用户列表
运行缺陷
作为一个有追求的程序员,当然不能因为一点小成就满足,总结一下递归实现的几个缺陷:
因为是深度优先,当整个用户图很大的时候,单机递归可能造成内存溢出从而使程序崩溃,只能在单机短时间运行。单个请求延时过长,数据下载速度太慢。
针对一段时间内访问失败的链接没有重试机制,存在数据丢失的可能。
异步优化
队列实现
实现原理
采取广度优先的遍历的方式,可以把要访问的网址存放在队列中,再套用生产者消费者的模式就可以很容易的实现多并发,从而解决上面的问题2。如果某段时间内一直失败,只需要将数据再仍会队列就可以彻底解决问题3。不仅如此,这种方式还可以支持中断后继续运行,程序流程图如下:
运行程序
为了实现多级部署(虽然我就只有一台机器),消息队列使用了rabbitmq,需要创建名为github,类型是direct的exchange,然后创建四个名称分别为user, repo, follower, following的队列,详细的绑定关系见下图: