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

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Java多线程-实例解析
Java多线程-实例解析 Java多线程实例 3种实现方法 Java中的多线程有三种实现方式: 1.继承Thread类,重写run方法。Thread本质上也是一个实现了Runnable的实例,他代表一个线程的实例,并且启动线程的唯一方法就是通过Thread类的start方法。 2.实现Runnable接口,并实现该接口的run()方法.创建一个Thread对象,用实现的Runnable接口的对象作为参数实例化Thread对象,调用此对象的start方法。 3.实现Callable接口,重写call方法。Callable接口与Runnable接口的功能类似,但提供了比Runnable更强大的功能。有以下三点 1).Callable可以在人物结束后提供一个返回值,Runnable没有提供这个功能。 2).Callable中的call方法可以抛出异常,而Runnable的run方法不能抛出异常。 3).运行Callable可以拿到一个Future对象,表示异步计算的结果,提供了检查计算是否完成的方法。 需要注意的是,无论用那种方式实现了多线程,调用start方法并不意味着立即执行多线程代码,...
- 下一篇
业余草,Java新人入职——配置环境及安装开发工具(总结)
很多新人对于进入新公司,相关工具的安装和环境变量的设定很苦恼。又苦于没有完整的配置开发环境的资料,我这里写一篇操作步骤的案例, 至少让你能把开发工具安装起来,并实用起来,就不会那么无助了。毕竟连开发环境都弄不好的人,leader对你肯定也不抱希望。废话少说,具体操作如下: 一、首先肯定是安装jdk 1、下载jdk版本 这里我的电脑是64位的,用的是Java8 , jdk版本是jdk1.8.0_92。 下载地址:链接:http://pan.baidu.com/s/1pLht3eF 密码:vgwu。 这里我也提供一个Java7 的版本:链接:http://pan.baidu.com/s/1hsOlk80 密码:i6k4 2、安装,并设定jdk、jre安装路径 安装路径你可以用默认的,但是一定要记住安装的地址,我一般指定额外的安装路径,比如E盘。如下图: 二、配置环境变量 安装好jdk和jre后,就需要配置环境变量,这个可以参照:点击打开链接 三、安装开发工具。 1、这里我用的是eclipse,具体开发工具用啥,大家看着处理:链接:https://pan.baidu.com/s/1MeNwU...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8