分布式 & 增量式

本文介绍了如何实现分布式和增量式爬虫。对于分布式爬虫,使用scrapy结合scrapy-redis组件,通过设置调度器和管道实现分布式数据爬取。而增量式爬虫利用redis的set进行数据指纹存储,监测网站更新并只抓取新数据。
摘要由CSDN通过智能技术生成

分布式

分布式爬虫,搭建一个分布式的机群,然后让机群中的每一台电脑执行同一组程序,让其对同一组资源进行联合且分布的数据爬取。

实现方式是scrapy + redis (使用scrapy结合着scrapy-redis组件)。原生scrapy框架无法实现分布式,因为调度器、管道无法被分布式机群共享。scrapy-redis组件可以给原生scrapy框架提供共享的管道和调度器。

实现流程

1.修改爬虫文件
- 1.1 导包:from scrapy_redis.spiders import RedisCrawlSpider
- 1.2 修改当前爬虫类的父类为:RedisCrawlSpider
- 1.3 将start_url替换成redis_keys的属性,属性值为任意字符串
- redis_key = ‘xxx’:表示的是可以被共享的调度器队列的名称,最终是需要将起始的url手动
放置到redis_key表示的队列中
- 1.4 将数据解析的补充完整即可
2.对settings.py进行配置
- 指定调度器
# 增加了一个去重容器类的配置, 作用使用Redis的set集合来存储请求的指纹数据, 从而实现请求去重的持久化
DUPEFILTER_CLASS = “scrapy_redis.dupefilter.RFPDupeFilter”
# 使用scrapy-redis组件自己的调度器
SCHEDULER = “scrapy_redis.scheduler.Scheduler”
# 配置调度器是否要持久化, 也就是当爬虫结束了, 要不要清空Redis中请求队列和去重指纹的set。如果是True, 就表示要持久化存储, 就不清空数据, 否则清空数据
SCHEDULER_PERSIST = True
- 指定管道
ITEM_PIPELINES = {
‘scrapy_redis.pipelines.RedisPipeline’: 400
}
- 特点:该种管道只可以将item写入redis
- 指定redis
REDIS_HOST = ‘redis服务的ip地址’
REDIS_PORT = 6379
3.配置redis的配置文件(redis.window.conf)
- 解除默认绑定
- 56行:#bind 127.0.0.1
- 关闭保护模式
- 75行:protected-mode no
4.启动redis服务和客户端
5.执行scrapy工程(不要在配置文件中加入LOG_LEVEL)
- 程序会停留在listening位置:等待起始的url加入
6.向redis_key表示的队列中添加起始url
- 需要在redis的客户端执行如下指令:(调度器队列是存在于redis中)
- lpush 队列名称 http://wz.sun0769.com/political/index/politicsNewest?id=1&page=1

代码(不包括Redis部分)
spider

import scrapy
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from scrapy_redis.spiders import RedisCrawlSpider
from fbsPro.items import FbsproItem
# 修改父类
class FbsSpider(RedisCrawlSpider):
    name = 'fbs'
    # allowed_domains = ['www.xxx.co']
    # start_urls = ['http://www.xxx.co/']
    redis_key = 'sunQueue' #可以被共享的调度器队列的名称
    #在Redis中将一个起始的url手动的添加到redis_key表示的队列中
    rules = (
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值