十五:爬虫-Scrapy-redis分布式
Scrapy-Redis是一个用于Scrapy的Redis组件,它提供了一个基于Redis的调度器、优先级队列和Item pipelines,可以实现Scrapy的分布式爬取。
以下是一个简单的示例,展示如何使用Scrapy-Redis实现分布式爬虫:
- 安装Scrapy-Redis:
pip install scrapy-redis
- 修改Scrapy的配置文件(例如
settings.py
):
# 启用Redis调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 确保所有的爬虫通过Redis去重
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 持久化存储,不清除Redis队列,允许暂停/恢复爬取
SCHEDULER_PERSIST = True
# 默认的去重方式(你可以指定其他的去重方式)
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.SpiderPriorityQueue'
# 使用Redis作为Item Pipeline
ITEM_PIPELINES = {
'scrapy_redis.pipelines.RedisPipeline': 100
}
# 指定Redis的地址(默认为localhost:6379)
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
- 修改爬虫文件(例如
spiders/my_spider.py
):
import scrapy
class MySpider(scrapy.Spider):
name = 'my_spider'
allowed_domains = ['example.com']
start_urls = ['http://www.example.com/']
def parse(self, response):
# 解析响应并提取items
for url in response.css('a::attr(href)').getall():
yield response.follow(url, self.parse)
确保你的Redis服务器正在运行,然后运行Scrapy爬虫:
scrapy runspider spiders/my_spider.py
这样,爬虫会将要爬取的URL放入Redis队列中,并且可以在多个爬虫实例之间分配工作。
评论已关闭