最近我正写一个项目,项目的需求如下
一,要爬取大约100种几百个网页的类容,并且这些网页的爬取频率不一样,有些一天爬取一次,有些一周爬取一次,
二,网页爬取内容有变化,也就是说要爬取的内容会根据需求进行改变
鉴于以上需求,但我们就一定的做成分步式,在多台服务器上运行,用scrapy框架的话就会几百个spider ,如果要使用多台服务器的话,那怎么样才能保证各个服务的利用率呢,如果在不同的服务器上运行不同的spider,这种情况下如果不加以控制就可能会出现这种情况,一些服务器上的spider在全力运行,另一些服务器上的spider正空闲着,不能达到负载均衡,如果在做到负载均衡,把这些服务器做master-slave结构,如果把这几百个爬虫一起启动。用master对各个服务器进行分配任务,。做成主从结构之后主服务器对从服务器进行任务的分配,维护这个分配也是一件很容易出错的事情。
另一种方式是:将这几百个spider在不同的服务器上同时启动,同时监听。scrapy_redis默认是不自动关闭的。也就是说,如果从服务器上已经没有request。服务器仍是不会关闭的。他会持续的监听。这种情况就需要人为关闭,那这几百个爬虫的开启和关闭的维护就是一件很麻烦的事情。

我的解决办法是。把这些这几百个网页内容的爬虫,这几百个爬虫。放在一起做成一个综合的爬虫(主爬虫)。
如果这个项目只启动一个爬虫。对于那些不需要爬取的url只需要在我们的配置文件中进行配置就行,把不需要启动分爬虫注释掉,这样不需要启动的爬虫就不会激动。

这样做就解决了上述的问题,

第一,在这所有的服务器中,我们只启动了一个爬虫,那么这一个爬虫的开启或关闭的维护就变得很容易。
第二,就是说我只启动了一个爬虫。所有的服务器运行只运行一个爬虫,都到一个一个队列中去取数据这样所以的服务器就自动负载均衡。
第三,爬虫管理方便,如果对某个网页进行爬取,我们只需要对把要爬取的网页所对应的类注册到配置文件就行,把其他不需要爬取的类注释掉。这样主爬虫就会按照要求进行爬取。
第四,只有一个主spider到队列中取数据,这们队列的维护也变的简单

但是我们所使用的scrapy框架。默认是以单个爬虫作为单位的,也就是说。所有的爬虫就是一个class文件。他所有解析函数全是在这个class中,所以我们要更改scrapy的源码。把爬虫文件的解析类放在另外的包中,便于维护,这一步是最主要的工作,涉及到更改scrapy源码。

所爬取的网站主要分以下两种情况
第一、全站爬取,也就是说我给一个起始的URL,然后我再给这个爬虫的Rule规则,爬虫就会按照这样的规则,根据这个起始的URL进行全站爬取。
第二、不能进行全站爬取。只能通过给定的ID或者其他数据对构造URL,然后通过这些URL进行爬取。

其他功能:
一,定交Logger类,定义了之后在其他地方我们可以简单地调用就行。
二,我还定义了其他一些辅助方法。比如当爬虫队列中没有数据后过多久对爬虫进行关闭
三、当爬虫启动或者关闭或者出现异常时。都给我发邮件,这样对这个爬虫项目的监控就变的简单。

项目全解析很复杂,这里是项目地址

通过更改scrapy源码进行spider分发实现一个综合爬虫的更多相关文章

  1. Scrapy源码学习(一)

    用Scrapy已经有一段时间了,觉得该是看一下源码的时候了.最开始用的时候还是0.16的版本,现在稳定版已经到了0.18.结合使用Scrapy的过程,先从Scrapy的命令行看起. 一.准备 下载源代 ...

  2. scrapy源码分析(转)

    记录一下两个讲解scrapy源码的博客: 1.http://kaito-kidd.com/2016/11/21/scrapy-code-analyze-component-initialization ...

  3. 2018-01-28-TF源码做版本兼容的一个粗暴方法

    layout: post title: 2018-01-28-TF源码做版本兼容的一个粗暴方法 key: 20180128 tags: IT AI TF modify_date: 2018-01-28 ...

  4. memcached源码分析-----item过期失效处理以及LRU爬虫

    memcached源码分析-----item过期失效处理以及LRU爬虫,memcached-----item 转载请注明出处:http://blog.csdn.net/luotuo44/article ...

  5. Twisted使用和scrapy源码剖析

    1.Twisted是用Python实现的基于事件驱动的网络引擎框架. 事件驱动编程是一种编程范式,这里程序的执行流由外部事件来决定.它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的 ...

  6. Scrapy源码注解--CookiesMiddleware

    class CookiesMiddleware(object): """ 中间件在Scrapy启动时实例化.其中jars属性是一个默认值为CookieJar对象的dict ...

  7. highchart导出功能的介绍更改exporting源码

    本案利用highchar作为前端,展示数据的图形效果,结合spring+springmvc来完成数据图片的导出. jsp引入文件: <script src="${pageContext ...

  8. 更改ligerui源码实现分页样式修改

    修改后样式: 第一步:实现功能. 更改源码部分ligerui.all.js文件 读源代码,发现ligerui底部工具条是这样实现的(ps:注释部分为源码) _render: function () { ...

  9. 【朝花夕拾】Android自定义View篇之(六)Android事件分发机制(中)从源码分析事件分发逻辑及经常遇到的一些“诡异”现象

    前言 转载请注明,转自[https://www.cnblogs.com/andy-songwei/p/11039252.html]谢谢! 在上一篇文章[[朝花夕拾]Android自定义View篇之(五 ...

随机推荐

  1. javascript---DOM大编程2

    编程挑战 现在利用之前我们学过的JavaScript知识,实现选项卡切换的效果. 效果图: 文字素材: 房产: 275万购昌平邻铁三居 总价20万买一居    200万内购五环三居 140万安家东三环 ...

  2. 转 【TTS】AIX平台数据库迁移到Linux--基于RMAN(真实环境)

    [TTS]AIX平台数据库迁移到Linux--基于RMAN(真实环境) http://www.cnblogs.com/lhrbest/articles/5186933.html 各位技术爱好者,看完本 ...

  3. jmeter(三)参数传递

    [一]参数化 录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统. 这个时候就需要对用户名和密码进行参数化,使每个虚拟用户都使用不 ...

  4. Android开发学习——Volley框架

    转载至: http://blog.csdn.net/guolin_blog/article/details/17482095 一些概念性的东西 大家进入上边链接理解,我贴一下 具体的实现代码: pub ...

  5. Neither BindingResult nor plain target object for bean name 'user' available as request attribute

    这个异常是因为jsp页面写错了. 把<form:form></form:form>标签改成普通的标签即可. 应该是第一次访问的时候,user是空的.但springmvc不能是空 ...

  6. css3 transform + deviceorientation实现图片旋转效果

    1. 陀螺仪deviceorientation的使用,参考<关于陀螺仪deviceorientation>https://segmentfault.com/a/11900000071838 ...

  7. java 生成特定范围内的随机数

    /** * 生成[1, max]之间的随机数 */ public static Integer getRandomNumber(Integer max) { Random rd = new Rando ...

  8. iOS/Android 视频编辑SDK

    锐动天地为开发者提供短视频编辑.特效.直播.录屏.编解码.视频转换,等多种解决方案,涵盖PC.iOS.Android多平台.以市场为导向,不断打磨并创新技术,在稳定性,兼容性,硬件设备效率优化上千捶百 ...

  9. tomcat 启动失败 和闪退 和 启动成功却没有页面显示

    1.解压版tomcat 将tomcat解压至英文目录下, 在系统环境变量里面配置 JAVA_HOME 和CATALINA_HOME (就是tomcat的安装目录) 在path中配置 %CATALINA ...

  10. 强大的云存储与应用管理工具DzzOffice1.0 Beta(大桌子办公)发布下载

    之前在9月份我们发布了一份内测版,得到了1000多位朋友参与下载测试.经过2个月,结合测试后朋友们反馈的问题,和开发建议.终于完成了这次Beta版的开发.感谢这两个月中参与测试,和帮助我们完善程序的朋 ...