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,关于多功能的
from scrapy.linkextractors import LinkExtractor
不论是scrapy 还是scrawlspider 都可以用的链接提取器比较实用