scrapy分布式抓取基本设置

本文介绍如何使用Scrapy-Redis实现分布式爬虫。通过共享Redis中的请求队列,多个爬虫可以协同工作,包括任务分配、去重及数据汇总。文章详细讲述了环境搭建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


scrapy本身并不是一个为分布式爬取而设计的框架,但第三方库scrapy-redis为其扩展了分布式抓取的功能,在分布式爬虫框架中,需要使用某种通信机制协调各个爬虫工作

(1)当前的爬取任务,下载+提取数据(分配任务)

(2)当前爬取任务是否已经被其他爬虫执行过(任务去重)

(3)如何存储怕去到的数据(数据存储)

scrapy-redis利用Redis数据库作为多个爬虫的数据共享

下载源码:

$git clone https://github.com/rolando/scrapy-redis

 

分布式需要解决两个基本问题,

1分配爬取任务,分配每个爬虫不同任务;2汇总爬取数据,将所有数据汇总

scrapy-redis为多个爬虫分配爬取任务方式是:让所有的爬虫共享一个存在于Redis数据库中的请求队列(替代了每个爬虫独立的请求队列),每个爬虫从请求队列中获取请求,下载并解析页面,将解析出来的新请求加入到请求队列,每个爬虫既是生产者又是消费者。重新实现了一下的组件(1)基于Redis的请求队列(2)基于Redis的请求去重过滤器(3)基于以上两个组件的调度器。

 

 

搭建环境

首先搭建scrapy-redis分布式爬虫环境,假设三台A(116.29.00.000)、B、C

三台安装scrapy和scrapy-redis

pip install scrapy

pip install scrapy-redis

 

选择其中A(116.29.00.000)为搭建所有爬虫使用的Redis数据库

1.安装redis-server

  sudo apt-get install redis-server

2.在Redis配置文件中修改服务器的绑定地址,以确保数据库可被所有爬虫访问到

  sudo vi  /etc/redis/redis.conf

    ....

    #bin 127.0.0.1

    bin 0.0.0.0

  

3.启动Redis服务器

  sudo service redis-server restart

 

测试能否访问到 :redis-cli -h 166.29.00.00 ping

 

复制一份项目代码

在配置文件settings.py中添加scrapy-redis的相关配置

REDIS_URL = 'redis://116.35.00.00:6379'   #指定爬虫需要的使用的Redis数据库

SCHEDULER= 'scrapy_redis.scheduler.Scheduler'       #使用scrapy_redis的调度器替代原有的调度器

DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter’    #使用scrapy_redis的RFPDupeFilter作为去重过滤器

 

ITEM_PIPELINES={

'scrapy_redis.pipilines.RedisPipeline':300

}#启用scrapy_redis的RedisPipeline将爬取到的数据汇总到Redis数据库

 

 

将单机版spider改为分布式spider

 

from scrapy_redis.spider import RedisSpider

class NameSpider(RedisSpider):

#将start_urls注释
#start_urls=['']

 

运行之后,由于Redis起始的列表和请求队列都是空的,此时需要在A中设置起爬点,

redis-cli -h 116.29.00.000

lpush name:start_urls 'http://........'

 

转载于:https://www.cnblogs.com/master-song/p/9037904.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值