码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-30 16:23:52      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:图片   成就   IV   http   cap   hub   pytho   内存   使用   

技术分享图片

 

技术分享图片

 

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

递归实现

技术分享图片

 

运行结果

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

技术分享图片

 

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

技术分享图片

 

运行缺陷

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

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

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

异步优化

技术分享图片

 

队列实现

实现原理

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

技术分享图片

 

运行程序

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

技术分享图片

 

技术分享图片

 

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

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

标签:图片   成就   IV   http   cap   hub   pytho   内存   使用   

原文地址:https://www.cnblogs.com/PY1780/p/9247222.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!