利用Python把github上非常实用的数据全部抓取下…

2018-07-03 01:12:20来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

这是我根据这个流程实现的代码,网址:LiuRoy/github_spider

递归实现

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

运行结果

因为每个请求延时很高,爬虫运行效率很慢,访问了几千个请求之后拿到了部分数据,这是按照查看数降序排列的python项目:

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

这是按粉丝数降序排列的用户列表

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

运行缺陷

作为一个有追求的程序员,当然不能因为一点小成就满足,总结一下递归实现的几个缺陷:

因为是深度优先,当整个用户图很大的时候,单机递归可能造成内存溢出从而使程序崩溃,只能在单机短时间运行。单个请求延时过长,数据下载速度太慢。

  1. 针对一段时间内访问失败的链接没有重试机制,存在数据丢失的可能。

异步优化

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

队列实现

实现原理

采取广度优先的遍历的方式,可以把要访问的网址存放在队列中,再套用生产者消费者的模式就可以很容易的实现多并发,从而解决上面的问题2。如果某段时间内一直失败,只需要将数据再仍会队列就可以彻底解决问题3。不仅如此,这种方式还可以支持中断后继续运行,程序流程图如下:

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

运行程序

为了实现多级部署(虽然我就只有一台机器),消息队列使用了rabbitmq,需要创建名为github,类型是direct的exchange,然后创建四个名称分别为user, repo, follower, following的队列,详细的绑定关系见下图:

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

利用Python把github上非常实用的数据全部抓取下来!留给自己备用

 

进群:125240963  即可获取数十套PDF哦!

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:如何证明我Python爬虫是否入门?

下一篇:python错误记录