scrapy之setting文件详解

一、使用项目配置文件的好处

1. 集中管理配置
配置文件将各种设定集中管理,避免了在代码中散布配置参数。这使得开发人员能够方便地找到并修改全局参数,不必在代码的各个部分寻找。

2. 提升代码可维护性
配置文件将程序逻辑与具体的配置解耦,使代码更易于维护。开发人员可以专注于实现功能,而无需频繁修改代码中嵌入的硬编码参数。

3. 便于环境切换
不同的环境(如开发、测试、生产)往往需要不同的配置。通过配置文件,开发者可以轻松地为不同环境提供不同的设置,例如数据库连接信息、日志级别、调度策略等。Scrapy 的 settings.py 就支持通过命令行指定配置文件,适应不同场景。

4. 提高复用性和灵活性
配置文件可以被多次复用。对于需要在多个项目或模块间共享的配置,只需要维护一个配置文件,而不必每次手动配置。Scrapy 支持用户通过 settings.py 配置爬取延迟、下载中间件、爬虫等参数,使得框架的使用更灵活。

5. 安全性
通过将敏感信息如 API 密钥、数据库凭证等存储在单独的配置文件中,开发者可以在发布时轻松忽略这些文件,不将其暴露到版本控制系统中,增强安全性。

6. 支持动态加载配置
Scrapy 允许在运行时通过 settings.py 文件动态调整某些配置,比如请求的并发数、用户代理等,使得爬虫能够根据实际需求灵活调整,而无需重启或修改源代码。

7. 简化团队协作
团队成员可以通过配置文件快速了解整个项目的设置,统一参数的使用标准,减少了由于个别成员使用不同配置而引发的问题。Scrapy 的 settings.py 清晰地列出爬虫行为的各个配置项,有助于团队之间的合作。

二、scrapy的setting.py

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

在较为项目复杂或者是想要了解更多的信息可以到官网查看官方文档,包含setting、middleware等。

BOT_NAME = "douban"SPIDER_MODULES = ["douban.spiders"]
NEWSPIDER_MODULE = "douban.spiders"

BOT_NAME 就是项目名,MODULES就是一个包含所有scrapy项目的列表。

# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = "douban (+http://www.yourdomain.com)"

Crawl responsibly by identifying yourself:进行爬取时要“负责任”,明确表明你的身份。这意味着在进行网络爬取时,不要伪装成其他浏览器,而应明确声明爬虫的身份,尊重网站的使用条款。
(and your website):这里提到的“你的网站”是指,如果你的爬虫有对应的官方网站,可以在 User-Agent 中附上该网站的 URL。这样网站管理员可以追踪到爬虫来源并联系你,以防爬虫对服务器造成负面影响。

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

是否遵守君子协议,就是先访问对方网站的robots.txt,明确哪些东西可以爬,哪些东西不能爬。懂得都懂。

# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

并发请求指的是爬虫在同一时间内可以同时发出的请求数。也就是说,爬虫可以在一个时刻与多个服务器或页面进行交互,而不是每次完成一个请求后再开始下一个请求。
Scrapy 默认的最大并发请求数为 16。这意味着在默认情况下,Scrapy 会同时发出最多 16 个请求。可以修改 CONCURRENT_REQUESTS 的值。注释中的例子给出的是 32,也就是最多可以同时发出 32 个请求。

# Configure a delay for requests for the same website (default: 0)
# See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
#DOWNLOAD_DELAY = 3
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16
#CONCURRENT_REQUESTS_PER_IP = 16

请求延迟是指在同一个网站上的连续请求之间设置的等待时间。也就是说,Scrapy 在向同一网站发送多个请求时,会在每次请求之间暂停一段时间,以避免对目标网站造成压力,模拟类似人类用户的行为。默认情况下,这个延迟为 0 秒,也就是说 Scrapy 在同一个网站上的请求是没有等待时间的,可以立即连续发送。AutoThrottle 设置,可以根据目标网站的负载动态调整请求速度。通过设置DOWNLOAD_DELAY来进行控制。

CONCURRENT_REQUESTS_PER_DOMAIN:该选项用于设置每个域名的最大并发请求数。如果设置为 16,则 Scrapy 对某一个域名的同时并发请求不会超过 16 个。这个配置项允许你控制对每个域名发出的请求数量,避免对某个特定域名过度爬取。
CONCURRENT_REQUESTS_PER_IP:该选项用于设置每个 IP 地址的最大并发请求数。如果 Scrapy 通过代理发送请求,可以根据目标网站的 IP 地址限制并发请求数。比如,如果某些网站有多个域名但同一个 IP 地址,你可以通过这个配置来限制并发请求

# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

Cookies 是服务器发送给客户端的少量数据,存储在客户端的浏览器中,通常用于会话管理、用户跟踪和个性化设置。当客户端访问同一网站时,浏览器会携带相应的 Cookie 发送请求,服务器根据这些 Cookies 可以识别用户的身份或保存的状态信息。
Disable cookies (enabled by default):意思是 "禁用 Cookies(默认情况下是启用的)"。Scrapy 默认情况下会启用 Cookies 处理,这意味着每个请求都会携带 Cookies 信息,这对某些依赖 Cookies 的网站至关重要。
启用 Cookies 的情况:
保持会话状态:某些网站使用 Cookies 进行会话管理,比如用户登录、购物车、用户偏好设置等。如果爬虫需要访问这些页面,必须启用 Cookies 才能保持与服务器的连续会话状态。
访问受限制的内容:一些网站只有登录后才能访问部分内容,启用 Cookies 可以保存登录状态,从而访问这些内容。
禁用 Cookies 的情况:
减少网络开销:如果目标网站不依赖 Cookies 或者对 Cookies 处理无需求,禁用它可以减少网络开销,提升爬取效率。
防止跟踪:网站可以通过 Cookies 追踪客户端的行为,禁用 Cookies 可以避免被追踪到爬虫的访问模式。
避免干扰:有些网站通过设置 Cookies 来记录用户的访问行为并相应调整页面,禁用 Cookies 可以防止这些干扰因素,爬虫能够获取到一致的页面内容。

# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

 Telnet 控制台是 Scrapy 提供的一个远程调试工具。通过它,你可以在爬虫运行时,实时查看和修改一些参数或状态,比如查看请求队列、修改设置、调试正在运行的代码等。当这个配置项为 True(默认值),Scrapy 启动时会开启 Telnet 控制台,允许你通过 Telnet 客户端连接到爬虫的进程进行调试。

# Override the default request headers:
# DEFAULT_REQUEST_HEADERS = {
# }

配置默认请求头,设置请求头的目的就是为了让目标网站将我们的请求标记为正常浏览器的行为,而不是爬虫程序,设置默认请求头之后每次请求都会带上该请求头,也可以在中间件中进行参数添加等操作。如果爬虫403了,首先看看是不是请求头出了问题。

# Enable or disable spider middlewares
# See https://docs.scrapy.org/en/latest/topics/spider-middleware.html
#SPIDER_MIDDLEWARES = {
#    "douban.middlewares.DoubanSpiderMiddleware": 543,
#}

爬虫中间件是介于引擎和爬虫之间的一种组件,用于对传入和传出的数据(如请求和响应)进行处理。你可以通过自定义中间件来控制 Scrapy 如何处理这些数据流。
键:"douban.middlewares.DoubanSpiderMiddleware" 指定了自定义的中间件的 Python 路径,也就是你自己定义的爬虫中间件类。
值:543 是中间件的优先级,数值越小,优先级越高,越早执行。

# Enable or disable downloader middlewares
# See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html
#DOWNLOADER_MIDDLEWARES = {
#    "douban.middlewares.DoubanDownloaderMiddleware": 543,
#}

下载器中间件(Downloader Middleware)是 Scrapy 框架中位于 Scrapy 引擎 和 下载器 之间的一层组件,负责处理每个 请求 和 响应。它提供了一种机制,让开发者可以对请求和响应进行自定义处理,以满足不同场景下的特殊需求。功能包括请求处理、响应处理、请求重试、请求和响应的统计、绕过网站反爬机制、数据压缩和解压、自定义错误处理和流量控制等。

# Enable or disable extensions
# See https://docs.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    "scrapy.extensions.telnet.TelnetConsole": None,
#}

配置扩展,Scrapy 允许使用扩展功能来增强爬虫的功能,比如监控爬虫的运行状态、提供额外的命令行工具等。

# Configure item pipelines
# See https://docs.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
#    "douban.pipelines.DoubanPipeline": 300,
#}

项管道是 Scrapy 用于处理爬虫抓取的数据(即 Item)的一个重要组件。它允许开发者定义如何处理抓取到的 Item,例如清洗、验证、存储等。Scrapy 使用一个字典格式来配置项管道。字典的键是管道的路径,值是管道的执行优先级(数字越小优先级越高)。通过 ITEM_PIPELINES 配置,开发者可以定义如何处理抓取到的 Item,包括清理、存储、验证等操作。

# Enable and configure the AutoThrottle extension (disabled by default)
# See https://docs.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

AutoThrottle 是 Scrapy 的一个功能,旨在根据服务器的响应时间和负载动态调整请求的下载延迟,从而避免对目标网站造成过大压力。该配置项设定了 Scrapy 开始下载时的初始延迟(单位为秒)。在启用 AutoThrottle 后,初始延迟会影响首次请求的发送时间。
#AUTOTHROTTLE_MAX_DELAY = 60——如果服务器的响应时间较长,AutoThrottle 将会根据该配置设定的最大延迟来调整下载速度。在此例中,最大延迟为 60 秒。AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0——:该配置项设定了 Scrapy 希望并行发送给每个远程服务器的平均请求数。在此例中,设置为 1.0 意味着每次仅发送一个请求。

# Enable and configure HTTP caching (disabled by default)
# See https://docs.scrapy.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 提供了 HTTP 缓存的功能,允许在爬虫运行时缓存已下载的页面,以避免重复请求同一 URL,从而提高效率和节省带宽。该功能默认是关闭的。#HTTPCACHE_ENABLED = True——这行代码用于启用 HTTP 缓存。如果取消注释并将其设置为 True,Scrapy 将开始缓存 HTTP 响应。默认情况下,此项为 False,表示缓存功能是关闭的。#HTTPCACHE_EXPIRATION_SECS = 0——这是缓存的过期时间设置(以秒为单位)。如果设置为 0,表示缓存永不过期,响应将一直保留在缓存中。开发者可以根据需要调整此值,以控制缓存的有效期,设置为 3600 例如表示缓存有效期为 1 小时。#HTTPCACHE_DIR = "httpcache"——指定缓存存储的目录。默认情况下,Scrapy 将缓存存储在当前工作目录下的 httpcache 文件夹中。如果取消注释,可以自定义此目录,方便管理和访问缓存文件。#HTTPCACHE_IGNORE_HTTP_CODES = []——这是一个列表,用于指定在缓存中应忽略的 HTTP 状态码。例如,如果设置为 [404, 500],那么 Scrapy 在接收到这些状态码的响应时,将不会将其缓存。默认情况下,该列表为空,表示所有状态码都将被缓存。#HTTPCACHE_STORAGE = "scrapy.extensions.httpcache.FilesystemCacheStorage"——这行代码指定了缓存存储的方式。默认情况下,Scrapy 使用文件系统缓存(FilesystemCacheStorage),即将响应缓存存储在文件中。开发者可以根据需要选择不同的存储后端,比如数据库等,只需替换这个值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/54406.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年最新大数据毕业设计选题-基于Spark分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

人工智能开发实战辅助诊断应用解析

内容导读 项目分析预备知识项目实战 一、项目分析 1、提出问题 随着人们生活水平的提升和健康意识的增强,民众定期进行身体健康体检已成为常态,这种早期的疾病检测和筛查可以及早发现身体里已经出现的异常体征信息,做出正确诊断和有效处理…

css实现居中的方法

水平居中 1. 行内设置text-align 给父元素设置text-align为center,一般用于实现文字水平居中 2. 给当前元素设置margin:0 auto 原理:块级独占一行,表现为在水平方向上占满整个父容器,当水平方向padding,…

navicat无法连接远程mysql数据库1130报错的解决方法

出现报错:1130 - Host ipaddress is not allowed to connect to this MySQL serve navicat,当前ip不允许连接到这个MySQL服务 解决当前ip无法连接远程mysql的方法 1. 查看mysql端口,并在服务器安全组中放开相应入方向端口后重启服务器 sud…

音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

编写乘法器求解算法表达式 描述 编写一个4bit乘法器模块,并例化该乘法器求解c12*a5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。 模块的信号接口图如下: 要求使用Verilog HDL语言实现以上…

水下目标检测数据集 urpc2021

项目背景: 水下目标检测在海洋科学研究、水下考古、海洋资源勘探等多个领域具有重要的应用价值。由于水下环境的复杂性和多变性,传统的人工检测方法存在诸多限制,自动化检测技术的需求日益增加。URPC2021数据集旨在为水下目标检测提供高质量…

蔚来是如何算加电网络的「大账」的?

作者 | 张马也 编辑 | 德新 李斌很忙,连中秋假期也没休息,开着ES8在新疆喀什周边的县区考察。 这次考察的目的,是为了推进「加电县县通」计划的落地。蔚来在一个月前的加电日发布会,推出了这个大胆的计划,要实现全国县…

如何在webots中搭建一个履带机器人

前期准备 下载webotswebots基本知识 a. 官方文档:Webots documentation: Track b. B站教程:webots-超详细入门教程(2020)_哔哩哔哩_bilibili搭建流程 搭建履带机器人主要使用到了webots中的track节点,这个节点是专门用来定义履带的相关属性,模拟履带运动的 首先,创建一个…

C一语言—动态内存管理

目录 一、为什么要有动态内存管理 二、malloc和free (2.1)malloc (2.2)free 三、calloc和realloc (3.1)calloc (3.2)realloc 四、常见的动态内存的错误(举例均为错…

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法,本关开始进入post方法。其实post也好get也好,本质都差不多,使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交,这里我们尝试在Username一栏通过…

Scrapy爬虫实战——某瓣250

# 按照我个人的习惯,在一些需要较多的包作为基础支撑的项目里,习惯使用虚拟环境,因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库,A和B同时依赖于C,但是A需要的C库版本大于N,而B…

Python中lambda表达式的使用——完整通透版

文章目录 一、前言二、 基本语法三、举个简单的例子:四、常见应用场景1. 用于排序函数sort() 方法简介lambda 表达式的作用详细解释进一步扩展总结 2、与 map、filter、reduce 等函数结合1、 map() 函数示例:将列表中的每个数字平方 2、 filter() 函数示…

音视频直播应用场景探讨之RTMP推流还是GB28181接入?

技术背景 好多开发者跟我们沟通音视频解决方案的时候,不清楚什么时候用RTMP推送模块,什么时候用GB28181设备接入模块,也不清楚二者差异化。实际上,RTMP推流和GB28181接入模块,在很多方面存在差异,如应用领…

centos 安装VNC,实现远程连接

centos 安装VNC,实现远程连接 VNC(Virtual Network Computing)是一种远程控制软件,可以实现通过网络远程连接计算机的图形界面。 服务器安装VNC服务 yum install -y tigervnc-server*启动VNC服务,过程中需要输入连接密码 vncserver :1查看…

云栖大会Day1:云应用开发平台 CAP 来了

2024 云栖大会开幕,在大会第一天,阿里云正式发布全新产品——云应用开发平台 CAP。CAP 拥有丰富的场景化应用模板,可以极速体验,并且具备更低的成本优势以及灵活组装等特点,成为广大开发者与企业必备的一站式应用开发平…

Stable Diffusion绘画 | ControlNet应用-instant-ID控制器:快速生成人物多角度图片

使用 instant-ID 控制器,用户只需要提供一张正脸图片,就可以快速地给人物生成多角度图片的,从而很好的保持了人物的一致性。 对于要制作小说推文、创建人物故事情节的创作,是一个非常好用且高效的功能。 准备工作 使用该控制类型&…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第一篇-原理】

如果想直接制作,请看【第二篇】内容 这次做一个这样的东西,通过在2DRT上实时绘制,生成动态的体积纹理,也就是可以runtime的VDB 设想的文章流程: 对原理进行学习制作体积渲染制作实时绘制 第一篇(本篇)是对“…

vue3+element-plus icons图标选择组件封装

一、最终效果 二、参数配置 1、代码示例 <t-select-icon v-model"selectVlaue" />2、配置参数&#xff08;Attributes&#xff09;继承 el-input Attributes 参数说明类型默认值v-model绑定值string-prefixIcon输入框前缀iconstringSearchisShowSearch是否显…

机器翻译之创建Seq2Seq的编码器、解码器

1.创建编码器、解码器的基类 1.1创建编码器的基类 from torch import nn#构建编码器的基类 class Encoder(nn.Module): #继承父类nn.Moduledef __init__(self, **kwargs): #**kwargs&#xff1a;不定常的关键字参数super().__init__(**kwargs)def forward(self, X, *args…