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

Posted py1780

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Python把github上非常实用的数据全部抓取下来!留给自己备用相关的知识,希望对你有一定的参考价值。

技术分享图片

 

技术分享图片

 

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

递归实现

技术分享图片

 

运行结果

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

技术分享图片

 

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

技术分享图片

 

运行缺陷

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

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

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

异步优化

技术分享图片

 

队列实现

实现原理

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

技术分享图片

 

运行程序

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

技术分享图片

 

技术分享图片

 

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

以上是关于利用Python把github上非常实用的数据全部抓取下来!留给自己备用的主要内容,如果未能解决你的问题,请参考以下文章

推荐10个Github热门Python库,非常实用!

PM2实用入门指南

3个腾讯开源的 GitHub 项目,非常实用!

利用Python下载网页视频

Github上好玩又实用的8个Python项目

Python 实用技能 RAPIDS | 利用 GPU 加速数据科学工作流程