1,指纹去重原理存在于 scrapy.util.requests 里面
需要安装的包
pip install scrapy-redis-cluster # 安装模块
pip install scrapy-redis-cluster==0.4 # 安装模块时指定版本
pip install --upgrade scrapy-redis-cluster # 升级模块版本
2,setting配置
# -*- coding: utf-8 -*-
BOT_NAME = 'zongheng'
SPIDER_MODULES = ['rankxs.spiders']
NEWSPIDER_MODULE = 'rankxs.spiders'
# Crawl responsibly by identifying yourself (and your website) on the user-agent
# Obey robots.txt rules
ROBOTSTXT_OBEY = False
######################################################
##############下面是Scrapy-Redis相关配置################
######################################################
# 指定Redis的主机名和端口
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
# 调度器启用Redis存储Requests队列
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
# 确保所有的爬虫实例使用Redis进行重复过滤
DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
# 将Requests队列持久化到Redis,可支持暂停或重启爬虫
SCHEDULER_PERSIST = True
# Requests的调度策略,默认优先级队列
SCHEDULER_QUEUE_CLASS = 'scrapy_redis.queue.PriorityQueue'
# 将爬取到的items保存到Redis 以便进行后续处理
ITEM_PIPELINES = {
"rankxs.pipelines.RankxsPipeline": 1,
'scrapy_redis.pipelines.RedisPipeline': 2
}
此处的关键点在于管道的先后顺序,顺序错了,数据库的数据会进不去
3,指纹去重在redis里面的显示,用redis做去重逻辑--先遣队
zongheng:items 和 zongheng:dupefilters 两个key
一个是items 里面的数据 ,另外一个则是已经爬取的 md5 url
爬虫爬取会先去查询redis里面的dupefiters md5 url
4,多爬虫任务可以在同一个文件进行执行CrawlerProcess,和CrawlerRunner
crawler.CrawlerRunner
from scrapy.utils.project import get_project_settings
# process=crawler.CrawlerProcess(get_project_settings()) # process.crawl(ZonghengSpider) # process.start(stop_after_crawl=False)
程序执行报错
关键点在于stop_after_crawl配置和注释TWISTED_REACTOR可以避免,具体原因可以去看源码
5,关于多功能的文章来源:https://www.toymoban.com/news/detail-619070.html
from scrapy.linkextractors import LinkExtractor
不论是scrapy 还是scrawlspider 都可以用的链接提取器比较实用文章来源地址https://www.toymoban.com/news/detail-619070.html
到了这里,关于scrapy分布式+指纹去重原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!