阿里云CentOS部署Scrapy-Redis分布式爬虫实战指南

2026-06-11阅读 0热度 0
分布式

Scrapy 在 Python 爬虫生态中属于高效框架,通过少量组件即可完成网页数据抓取。但面对大规模目标页面时,单机部署很快遭遇瓶颈——吞吐量不足、并发请求受限。此时,分布式爬虫架构的优势便凸显出来:多节点协同、横向扩展、资源复用。

Scrapy-Redis 正是基于 Redis 实现的分布式调度组件。其核心逻辑简明:利用 Redis 统一管理爬取请求(Requests),既承担存储职责又负责调度分发,同时将抓取到的 items 暂存在 Redis 中供后续处理。简言之,scrapy-redis 重写了 Scrapy 若干关键模块,让原本单机运行的爬虫可扩展到多台主机协同完成任务。

_1

实操层面,通过 Redis 维护一个 URL 队列。所有爬虫节点连接到该 Redis 实例,从队列中获取 URL;每取走一个,Redis 立即从队列中删除,确保不会重复分配。即使极端并发下两个节点同时抓取到相同 URL,返回结果时 Redis 还会执行二次去重。如此,分布式效果轻松实现——一台主机运行 Redis 队列,其余主机运行爬虫进程。此外,scrapy-redis 与 Redis 保持长连接,即便队列暂空,爬虫也会定期轮询,一有新任务立即开工。

先在主机和从机上分别安装依赖库:

pip3 install requests scrapy scrapy-redis redis

安装 Redis

在主机上部署 Redis:

yum install redis

启动服务:

systemctl start redis

检查版本:

redis-cli --version

配置开机自启:

systemctl enable redis.service

调整 Redis 配置文件 /etc/redis.conf:将保护模式设为 no,注释掉 bind 行以允许远程连接。注意阿里云安全组需放行 6379 端口。修改后务必重启服务:

systemctl restart redis

接着在主机和从机上分别创建爬虫项目:

scrapy startproject myspider

在项目的 spiders 目录下新建 test.py

导包

import scrapy
import os
from scrapy_redis.spiders import RedisSpider

定义爬虫类

class Test(RedisSpider):
    # 爬虫名称,与命令行启动保持一致
    name = "test"
    # Redis 中存储起始 URL 的 key
    redis_key = 'test:start_urls'
    # 请求头
    headers = {
        'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36'
    }
    def parse(self, response):
        print(response.url)
        pass

然后修改 settings.py,添加以下配置。其中 Redis 地址指向主机的配置:

BOT_NAME = 'myspider'

SPIDER_MODULES = ['myspider.spiders']
NEWSPIDER_MODULE = 'myspider.spiders'

# 设置中文编码
FEED_EXPORT_ENCODING = 'utf-8'

# scrapy-redis 主机地址
REDIS_URL = 'redis://root@39.106.228.179:6379'

# 队列调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 不清除缓存
SCHEDULER_PERSIST = True

# 使用 Redis 进行去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# 不遵守 robots 协议
ROBOTSTXT_OBEY = False

最后,在两台主机上分别启动 Scrapy 服务。此时服务已运行,但 Redis 队列中无任务,处于等待状态。登录主机 Redis:

redis-cli

向队列中推送任务:

lpush test:start_urls http://baidu.com
lpush test:start_urls http://chouti.com

你会立刻看到两台服务器的爬虫各自领取队列中的 URL 开始抓取。得益于 Redis 的去重机制,URL 不会被重复处理。

121

爬取完成后,执行 flushdb 命令清除地址指纹,便于再次抓取历史 URL。整个流程简洁高效,分布式爬虫的落地门槛远低于预期。

免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策