scrapy settings设置详解

本文档详细介绍了Scrapy爬虫项目的配置设置,包括基本配置如项目名称、并发请求、下载延迟等,以及中间件、扩展、管道和自动节流等高级配置。适合初学者了解Scrapy的工作原理和优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

# -*- coding: utf-8 -*-


# Scrapy settings for demo1 project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     http://doc.scrapy.org/en/latest/topics/settings.html
#     http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
#     http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html


BOT_NAME = ''   #Scrapy项目的名字,这将用来构造默认 User-Agent,同时也用来log,当您使用 startproject 命令创建项目时其也被自动赋值。


SPIDER_MODULES = ['']   #Scrapy搜索spider的模块列表 默认: [xxx.spiders]
NEWSPIDER_MODULE = ''   #使用 genspider 命令创建新spider的模块。默认: 'xxx.spiders'




#爬取的默认User-Agent,除非被覆盖
#USER_AGENT =‘’

#如果启用,Scrapy将会采用 robots.txt策略
ROBOTSTXT_OBEY = True


#Scrapy downloader 并发请求(concurrent requests)的最大值,默认: 16
#CONCURRENT_REQUESTS = 32


#为同一网站的请求配置延迟(默认值:0)
# See http://scrapy.readthedocs.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs  
#DOWNLOAD_DELAY = 3   下载器在下载同一个网站下一个页面前需要等待的时间,该选项可以用来限制爬取速度,减轻服务器压力。同时也支持小数:0.25 以秒为单位


    
#下载延迟设置只有一个有效
#CONCURRENT_REQUESTS_PER_DOMAIN = 16   对单个网站进行并发请求的最大值。
#CONCURRENT_REQUESTS_PER_IP = 16       对单个IP进行并发请求的最大值。如果非0,则忽略 CONCURRENT_REQUESTS_PER_DOMAIN 设定,使用该设定。 也就是说,并发限制将针对IP,而不是网站。该设定也影响 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下载延迟应用在IP而不是网站上。


#禁用Cookie(默认情况下启用)
#COOKIES_ENABLED = False


#禁用Telnet控制台(默认启用)
#TELNETCONSOLE_ENABLED = False 


#覆盖默认请求标头:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}


#启用或禁用蜘蛛中间件
# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    'demo1.middlewares.Demo1SpiderMiddleware': 543,
#}


#启用或禁用下载器中间件
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    'demo1.middlewares.MyCustomDownloaderMiddleware': 543,
#}


#启用或禁用扩展程序
# See http://scrapy.readthedocs.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}


#配置项目管道
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
#    'demo1.pipelines.Demo1Pipeline': 300,
#}


#启用和配置AutoThrottle扩展(默认情况下禁用)
# See http://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True


#初始下载延迟
#AUTOTHROTTLE_START_DELAY = 5


#在高延迟的情况下设置的最大下载延迟
#AUTOTHROTTLE_MAX_DELAY = 60




#Scrapy请求的平均数量应该并行发送每个远程服务器
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0


#启用显示所收到的每个响应的调节统计信息:
#AUTOTHROTTLE_DEBUG = False


#启用和配置HTTP缓存(默认情况下禁用)
# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

### Scrapy 分布式爬虫实现详解 #### 基本概念 Scrapy 是一种功能强大的 Python 爬虫框架,用于抓取网页并提取结构化数据。然而,默认情况下,Scrapy组件(如请求队列和去重集合)仅限于单机环境运行[^1]。为了提升性能和扩展能力,可以通过引入 Redis 数据库将这些组件迁移到共享环境中,从而支持多节点协作完成任务。 #### 技术架构概述 分布式爬虫的核心在于通过集中化的存储机制让不同机器上的多个 Scrapy 进程能够访问相同的待处理 URL 列表以及已访问记录集。具体来说: - **URL 队列管理**: 将原本存在于内存中的请求队列替换为基于 Redis 的持久化列表。 - **指纹去重**: 使用 Redis Set 来保存已经发起过的请求哈希值,防止重复抓取同一页面。 - **资源共享与负载均衡**: 多个独立部署的 Scrapy 实例连接到统一的 Redis 服务器获取新目标链接执行下载操作[^2]。 #### 主要修改点分析 ##### (1) 替换默认 Scheduler 组件 标准版 Scrapy 中的任务调度器负责维护未完成 HTTP 请求序列;而在分布式版本里,则需指定 `SCHEDULER` 参数指向兼容远程通信协议的新类——即由 scrapy-redis 提供的支持 Redis 存储方式的对象实例定义如下所示: ```python # settings.py configuration example SCHEDULER = "scrapy_redis.scheduler.Scheduler" DUPEFILTER_CLASS = 'scrapy_redis.dupefilter.RFPDupeFilter' REDIS_URL = 'redis://localhost:6379' # Connection string to your redis instance. ``` 此处配置项说明: - SCHEDULER 设置指定了自定义计划程序路径; - DUPEFILTER_CLASS 更改了原有的过滤逻辑至利用 Redis Sets 结构判断是否曾经遇到过相同地址; - REDIS_URL 明确告知插件所依赖的服务端位置信息以便建立网络通道[^2]。 ##### (2) 动态加载初始种子链接 传统模式下开发者通常会在 Spider 类内部硬编码设定 start_urls 属性数组作为入口起点。但在实际生产场景中往往更倾向于采用灵活的方式动态注入这批资源。因此借助外部数据库或者消息队列服务成为必然选择之一。例如,在此案例中我们推荐把所有候选网址预先存入名为 spider_queue 的 key 下面等待消费: ```bash LPUSH myspider:start_urls http://example.com/page1.html LPUSH myspider:start_urls http://example.com/page2.html ... ``` 随后当某个 worker 启动之后便会自动拉取消息开始新一轮迭代过程直到耗尽全部库存为止。 #### 示例代码片段展示 下面给出一段简单的完整项目模板帮助理解整个流程运作情况: ```python import scrapy from scrapy_redis.spiders import RedisSpider class MyCrawler(RedisSpider): name = 'mycrawler' def parse(self, response): self.logger.info(f"Parsed {response.url}") yield { 'title': response.css('h1::text').get(), 'url': response.url, } next_pages = response.css('a::attr(href)').extract() for url in next_pages: yield scrapy
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值