Python中如何实现Scrapy分布式管理?

最近在使用 scrapy-redis 做分布式爬虫,目前考虑写一个扩展,主要可以实现:

  • 通过一个 ui 界面来提交爬虫代码。(大概类似于一些 oj 刷题网站的代码编辑页面)
  • 然后点击运行按钮,就能够自动启动一个 scrapy 实例。

这里遇到一些问题,爬虫代码保存在哪里?然后通过什么方法来运行这份爬虫代码? 目前我的方案是:

  • 把代码文件存到一个公共的目录,所有的爬虫都从这个目录启动。
  • 然后爬虫通过 docker 来启动,docker 可以访问那个公共目录。

不过感觉这样好麻烦啊,估计会碰到很多坑,不知道各位 v 友有没有什么更优的方式,实现我这个需求。


Python中如何实现Scrapy分布式管理?

11 回复

自己部个 marathon 或者 k8s,然后通过 api 启动实例?


核心方案:使用Scrapy-Redis实现分布式爬虫。

Scrapy本身是单机框架,要实现分布式管理,需要引入Scrapy-Redis库。它通过Redis作为调度队列和数据存储中心,让多个爬虫实例共享请求队列和去重集合。

1. 安装依赖

pip install scrapy-redis redis

2. 修改Scrapy项目配置settings.py中添加:

# 启用Scrapy-Redis调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"

# 启用去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"

# Redis连接设置
REDIS_HOST = 'localhost'  # Redis服务器地址
REDIS_PORT = 6379         # Redis端口
REDIS_PASSWORD = None     # 密码(如果有)

# 保持Redis数据持久化(爬虫关闭后不清空队列)
SCHEDULER_PERSIST = True

# 请求队列模式(可选优先级队列)
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'

3. 修改爬虫文件 将原有爬虫继承类改为RedisSpiderRedisCrawlSpider

from scrapy_redis.spiders import RedisSpider

class MyDistributedSpider(RedisSpider):
    name = 'distributed_spider'
    redis_key = 'myspider:start_urls'  # Redis中的起始URL键名
    
    def parse(self, response):
        # 解析逻辑保持不变
        # 新增的请求会自动进入Redis队列
        yield {
            'title': response.css('title::text').get()
        }

4. 运行分布式爬虫

  • 启动Redis服务:redis-server
  • 在不同机器/进程运行爬虫:scrapy crawl distributed_spider
  • 向Redis队列添加起始URL(通过redis-cli):
    lpush myspider:start_urls http://example.com/page1
    lpush myspider:start_urls http://example.com/page2
    

关键点:

  • 所有爬虫实例从同一个Redis队列获取请求,自动分配任务
  • 去重指纹存储在Redis中,避免多机重复爬取
  • 支持动态添加新URL到队列

一句话总结:用Scrapy-Redis+Redis做任务调度中心就能轻松实现分布式。

= =不会啊,还没用过。

> 然后点击运行按钮,就能够自动启动一个 scrapy 实例。

这个顺序反了吧,应该是启动一个 scrapy 实例,向中央服务器注册?

试试 spiderkeeper

Heroku 把,它可以和你的 git 联动

如果用 docker 的话,强力推荐 rancher

那个项目部署方式太蛋疼了,界面可以参考一下,但是调度方式还是得写一套。

[捂脸]我还觉得挺好用的, 有 api 直接写好脚本打包 egg, 上传到 scrapyd 服务器

有一个现成的轮子,需要配置 scrapyd

https://github.com/DormyMo/SpiderKeeper

如何简单高效地部署和监控分布式爬虫项目 www.v2ex.com/t/507933

回到顶部