zoukankan      html  css  js  c++  java
  • 分布式爬虫与增量式爬虫

    首先要说一下scrapy-redis

      配置文件settings主要配置Scrapy_Redis的功能,其中配置SCHEDULER是改变Scrapy原有的调度器。当项目运行的时候,Scrapy从配置文件中读取配置信息,根据配置信息运行Scrapy_Redis的功能,使得整个项目的调度器Scheduler和Spider都是Scrapy_Redis定义的,从而实现了分布式爬虫

    从Scrapy_Redis的分布式爬虫原理得知,当前请求的URL地址和响应内容都已经保存在Redis数据库的时候,Scrapy不再对当前请求发送HTTP请求,而是直接执行下面一条请求,这样可以防止分布式的爬虫程序重复爬取,从而保证了数据的唯一性

      根据分布式爬虫的原理可以衍生出一种新的使用方式--增量式爬虫。增量式爬虫是在已经保存网站部分数据的情况下,当再次运行爬虫的时候,它不会对应有的数据重复爬取,只爬取数据库中尚未保存的数据,分布式爬虫Scrapy_Redis也可以作为增量式爬虫,此外还可以在Scrapy项目里自主开发增量式爬虫,,实现的方式和Scrapy_Redis的大差不差

      自主开发增量式爬虫的两种方式:基于管道实现增量式爬虫和中间件实现增量式。两个在Scrapy的不同文件中实现

      基于管道实现增量式爬虫是在pipelineswenjian的process_ite()方法内判断数据是否已经保存在redis数据库中,如果存在则不做数据库入库处理,反之就将当前数据写入到Redis数据库和目标数据库中

      基于中间件实现增量式爬虫,是在middlewares文件中定义中间件,判断当前请求的URL地址是否已经存在在Redis数据库中,如果存在就跳过当前请求并且直接执行下一个请求,反之就讲当前的URL地址写入Redis数据库并对该请求向下执行

    基于管道实现增量式爬虫

      基于管道实现是将Scrapy_Redis的pipelines单独使用,它最大的有点是对以访问的URL地址重复访问并且获得数据,这样可以及时更新数据的动态变化

      应用场景:

        排行榜、论坛贴吧等网站的爬取;

      缺点:

        它会对URL地址重复的访问,如果网站数据固定不变就会造成网络资源的浪费,同时也增大了反爬虫机制检测的风险

      实现管道增量式爬虫可以使用Scrapy_Redis的pipelines文件的RedisPipeline类,不过他会涉及到Scrapy_Redis其他文件的使用。为了简化功能的复杂度,可以根据原理在项目的pipelines文件编写相对应的功能就可以了,

    基于中间件实现增量式爬虫

      基于中间件实现增量式爬虫是在发送HTTP请求之前,首先要对该请求的URL地址进行判断,如果该URL地址在此之前已经发送过HTTP请求,则本次请求将不再往下执行了,这样可以避免同一个URL地址的重复访问。因此自定义中间件主要对当前请求的URL地址进行判断,根据不同的判断结果执行不同的处理方式

    总结

      基于管道实现增量式爬虫是在pipelines文件的process_item()方法里判断数据是否保存在Redis数据库,如果存在则不需要做数据库入库处理,反之就需要将当前数据写入Redis数据库和目标数据库

      基于中间件实现的增量式爬虫是在middlewares文件里定义中间件,判断当前请求的URL地址是否已经存在于Redis数据库中,如果存在则跳过当前请求并直接执行下一个请求,反之就需要将当前的URL地址写入到Redis数据库并对该请求向下执行

  • 相关阅读:
    【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers
    【Codeforces Round #433 (Div. 1) B】Jury Meeting
    【 2017 Multi-University Training Contest
    【Codeforces Round #433 (Div. 2) C】Planning
    JavaEE(15)
    谓词推入引发的惨案
    子查询解嵌套in改写为exists
    子查询解嵌套not in 无法展开改写
    dump datafile block
    关于v$sql_bind_capture 的问题
  • 原文地址:https://www.cnblogs.com/tulintao/p/11594481.html
Copyright © 2011-2022 走看看