标签:cto 执行 persist conf 基类 ide efi 间隔 domain
Scrapy 是一个通用的爬虫框架,但是不支持分布式,Scrapy-redis是为了更方便地实现Scrapy分布式爬取,而提供了一些以redis为基础的组件(仅有组件)。
Master端
(核心服务器):搭建一个Redis数据库,并开启redis-server,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储Slaver端
(爬虫程序执行端) :负责执行爬虫程序,运行过程中提交新的Request给Masterpip3 install scrapy-redis
Master端需要安装Redis数据库,可以参照:redis数据库使用
需要注意的是,配置文件redis.conf中需要注释掉bind 127.0.0.1这一行,从而允许Slaver端远程连接。
# 指定使用scrapy-redis的调度器
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 指定使用scrapy-redis的去重过滤器
DUPEFILTER_CLASS = ‘scrapy_redis.dupefilter.RFPDupeFilter‘
#默认情况下,RFPDupeFilter只记录第一个重复请求。将DUPEFILTER_DEBUG设置为True会记录所有重复的请求。
# DUPEFILTER_DEBUG =True
# 允许爬虫程序中断恢复后,接着之前的请求继续爬取,而不是从头开始爬
SCHEDULER_PERSIST = True
# 指定排序爬取地址时使用的队列
#SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderPriorityQueue‘ 按优先级排序(Scrapy默认),redis数据库中通过有序集合(sorted set)类型实现
# SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderQueue‘ 按先进先出排序(FIFO)
# SCHEDULER_QUEUE_CLASS = ‘scrapy_redis.queue.SpiderStack‘按后进先出排序(LIFO)
# 只在使用SpiderQueue或者SpiderStack时有效,指定爬虫关闭的最大间隔时间
# SCHEDULER_IDLE_BEFORE_CLOSE = 10
ITEM_PIPELINES = {
#‘example.pipelines.ExamplePipeline‘: 300,
‘scrapy_redis.pipelines.RedisPipeline‘: 400 #将数据存储到redis数据库,如果自己也实现了Pipeline,切记RedisPipeline后面的数值一定要比前面的大,因为它并不会return item以便后续管道文件处理
}
#指定数据库连接参数,默认本地
#REDIS_HOST = ‘Master端ip‘
#REDIS_PORT = 6379
#REDIS_PARAMS ={
# ‘password‘: ‘密码‘,
#}
from scrapy_redis.spiders import RedisSpider #导入爬虫基类
class DemoSpider(RedisSpider):
name = ‘爬虫名‘
allowed_domains= [‘允许的爬虫域‘]
#redis中存放start_urls的键名,一定要指定
redis_key = ‘demospider:start_urls‘ #即启动爬虫的命令,参考格式:redis_key = ‘小写类名:start_urls‘
def parse(self, response):
pass
from scrapy.spiders import Rule
from scrapy.linkextractors import LinkExtractor
from scrapy_redis.spiders import RedisCrawlSpider
class DemoSpider(RedisCrawlSpider):
name = ‘爬虫名‘
allowed_domains = [‘允许的爬虫域‘]
redis_key = ‘demospider:start_urls‘ #可任意指定,最好遵循‘小写类名:start_urls‘这种形式
rules = {
Rule(LinkExtractor(), callback=‘parse_page‘, follow=True),#callback不能为‘parse‘ ,否则爬虫无法允许
}
def parse_page(self,response):
pass
scrapy runspider xx.py
lpush demospider:start_urls http://www.dmoz.org/
注:如果仅仅想通过redis数据库来进行去重和保存数据,只需按照上述设置settings.py即可,然后使用命令:scrapy crawl 爬虫名 来执行爬虫,切记不需要通过redis数据库客户端lpush指令了
标签:cto 执行 persist conf 基类 ide efi 间隔 domain
原文地址:https://www.cnblogs.com/eliwang/p/14747043.html