1.设置优先级

Scrapy中有不同层次的设置,其类型以及优先级如下(从高到低):

  • 1.命令行命令中指定的设置
  • 2.每个spider中的设置
  • 3.scrapy项目中settings.py设置
  • 4.命令行命令的默认设置
  • 5.scrapy全局的默认设置

1.命令行命令中指定的设置

命令行提供的参数是最优先的参数,覆盖任何其他选项

scrapy crawl myspider -s LOG_FILE=scrapy.log

2.每个spider中的设置

spider可以定义自己的设置,这些设置优先并覆盖项目设置。他们可以通过设置custom_settings属性来实现

class MySpider(scrapy.Spider):
name = 'myspider' custom_settings = {
'SOME_SETTING': 'some value',
}

3.scrapy项目中settings.py设置

通过project.settings中修改,下面有详细的配置解释

4.命令行命令的默认设置

每个Scrapy工具命令都可以有自己的默认设置,这些设置会覆盖全局默认设置。这些自定义命令设置default_settings在命令类的属性中指定。

5.scrapy全局的默认设置

全局默认值位于scrapy.settings.default_settings 模块中

2.settings设置

BOT_NAME

此Scrapy项目名称。这将默认用于构建User-Agent,也用于日志记录。使用该startproject命令创建项目时,它会自动填充项目名称

SPIDER_MODULES

scrapy查找spider的路径

NEWSPIDER_MODULE

指定使用genspider时创建spider的路径

USER_AGENT

爬虫时使用的默认User-Agent,除非被覆盖。默认: "Scrapy/VERSION (+https://scrapy.org)"

ROBOTSTXT_OBEY

表示遵不遵守君子协议,默认False

CONCURRENT_REQUESTS

Scrapy下载程序将执行的最大并发(即同时)请求数。默认16

DOWNLOAD_DELAY

下载延时,限制爬虫速度,防止过快被封

CONCURRENT_REQUESTS_PER_DOMAIN

将对任何单个域执行的最大并发(即同时)请求数

CONCURRENT_REQUESTS_PER_IP

对任何单个IP执行的最大并发(即同时)请求数。如果设置这个会忽略CONCURRENT_REQUESTS_PER_DOMAIN设置

COOKIES_ENABLED

是否启用cookies,如果启用,同时也会启用cookies中间件,默认是开。如果要用setting中请求头中cookie设置,则需要关闭这个,因为scrapy默认使用cookies中间件管理,可能会有冲突。

TELNETCONSOLE_ENABLED

是否启用Telnet

DEFAULT_REQUEST_HEADERS

配置请求头,项目全局配置,会被局部如spider headers请求中间件等覆盖,详细看这里解释的比较好
即优先级为:中间件方式downloadermiddleware  > scrapy.Request(headers)  > spider中custom_settings   > settings.py > Scrapy默认

SPIDER_MIDDLEWARES

启用的spider中间件,数字越高优先级越高

DOWNLOADER_MIDDLEWARES

下载器中间件

EXTENSIONS

拓展,参考官网拓展章节

ITEM_PIPELINES

启用的item管道

AUTOTHROTTLE_ENABLED

启用AutoThrottle扩展,自动限速功能,有时爬的数据不全,可以试试这个。。

AUTOTHROTTLE_START_DELAY

AutoThrottle扩展初始下载延迟(以秒为单位)

AUTOTHROTTLE_MAX_DELAY

AutoThrottle扩展,在高延迟的情况下要设置的最大下载延迟(以秒为单位)

AUTOTHROTTLE_TARGET_CONCURRENCY

AutoThrottle扩展,对每个网站的并发量

AUTOTHROTTLE_DEBUG

启用AutoThrottle调试模式,该模式将显示收到的每个响应的统计信息,以便您可以查看如何实时调整限制参数

HTTPCACHE_ENABLED

是否启用HTTP缓存

HTTPCACHE_EXPIRATION_SECS

缓存请求的到期时间,以秒为单位

HTTPCACHE_DIR

用于存储(低级)HTTP缓存的目录。如果为空,则将禁用HTTP缓存。如果给出相对路径,则相对于项目数据dir

HTTPCACHE_IGNORE_HTTP_CODES

不要使用这些HTTP代码缓存响应(不懂)

HTTPCACHE_STORAGE

实现缓存存储后端的类
 
以上是使用startproject时settings.py中默认的设置,还有其它设置可以自行添加
 

3.访问setting

在spider中通过self.settings获取

class MySpider(scrapy.Spider):
name = 'myspider'
start_urls = ['http://example.com'] def parse(self, response):
print("Existing settings: %s" % self.settings.attributes.keys())

通过from_crawler类方法获取scrapy.crawler.Crawler.settings 中的属性

class MyExtension(object):
def __init__(self, log_is_enabled=False):
if log_is_enabled:
print("log is enabled!") @classmethod
def from_crawler(cls, crawler):
settings = crawler.settings
return cls(settings.getbool('LOG_ENABLED'))

可以在spider类、middleware类、pipeline类以及extension使用from_crawler方法

4.总结

1.settings.py中的设置是针对整个项目的,可以添加对整个spiders通用的设置

2.custom_settings是spider单独的设置,比如可以设置每个spider用不同的中间件或管道

3.命令行中的设置,最高的优先级,应用场景比如,cmd多开的时候使用不同配置去跑spider,不过一些配置可能会出问题

Scrapy进阶知识点总结(五)——Settings的更多相关文章

  1. Scrapy进阶知识点总结(六)——中间件详解

    概述 查看scrapy官网的框架图,可以看出中间件处于几大主要组件之间,类似于生产流水线上的加工过程,将原料按照不同需求与功能加工成成品 其中4,5处于下载器与引擎之间的就是下载中间件,而spider ...

  2. Scrapy进阶知识点总结(四)——Item Pipeline

    Item Pipeline Item Pipeline调用发生在Spider产生Item之后.当Spider解析完Response之后,Item就会传递到Item Pipeline,被定义的Item ...

  3. Scrapy进阶知识点总结(一)——基本命令与基本类(spider,request,response)

    一.常见命令 scrapy全局命令可以在任何地方用,项目命令只能在项目路径下用 全局命令: 项目命令: startproject crawl genspider check settings list ...

  4. Scrapy进阶知识点总结(三)——Items与Item Loaders

    一.Items 抓取的主要目标是从非结构化源(通常是网页)中提取结构化数据.Scrapy蜘蛛可以像Python一样返回提取的数据.虽然方便和熟悉,但Python缺乏结构:很容易在字段名称中输入拼写错误 ...

  5. Scrapy进阶知识点总结(二)——选择器Selectors

    1. Selectors选择器 在抓取网页时,您需要执行的最常见任务是从HTML源提取数据.有几个库可用于实现此目的,例如: BeautifulSoup是Python程序员中非常流行的Web抓取库,它 ...

  6. 网页爬虫--scrapy进阶

    本篇将谈一些scrapy的进阶内容,帮助大家能更熟悉这个框架. 1. 站点选取 现在的大网站基本除了pc端都会有移动端,所以需要先确定爬哪个. 比如爬新浪微博,有以下几个选择: www.weibo.c ...

  7. Java进阶(三十五)java int与integer的区别

    Java进阶(三十五)java int与Integer的区别 前言 int与Integer的区别从大的方面来说就是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而Integer是对象 ...

  8. Java进阶(二十五)Java连接mysql数据库(底层实现)

    Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜 ...

  9. scrapy爬虫学习系列五:图片的抓取和下载

    系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备:      http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...

随机推荐

  1. JavaScript ES6函数式编程(一):闭包与高阶函数

    函数式编程的历史 函数的第一原则是要小,第二原则则是要更小 -- ROBERT C. MARTIN 解释一下上面那句话,就是我们常说的一个函数只做一件事,比如:将字符串首字母和尾字母都改成大写,我们此 ...

  2. 面试必备:高频算法题终章「图文解析 + 范例代码」之 矩阵 二进制 + 位运算 + LRU 合集

    Attention 秋招接近尾声,我总结了 牛客.WanAndroid 上,有关笔试面经的帖子中出现的算法题,结合往年考题写了这一系列文章,所有文章均与 LeetCode 进行核对.测试.欢迎食用 本 ...

  3. Java学习笔记之基础语法(顺序,条件,循环语句)

    顺序结构:自上而下 条件分支选择结构: if条件语句   1,一旦某一个分支确定执行以后,其他分支就不会执行.if后面的条件必须是boolean类型   2,if  后面如果不加大括号,默认相邻的下一 ...

  4. Python3字符串常见方法

    目录 字符串的进阶使用 格式化输出字符串 当然除了上述方法外,还可以你使用format方法 format方法第二种用法: Python字符串与二进制的转换 字母大写 计字符a出现的次数 输出50个字符 ...

  5. [Luogu2879][USACO07JAN]区间统计Tallest Cow

    题目描述 FJ's N (1 ≤ N ≤ 10,000) cows conveniently indexed 1..N are standing in a line. Each cow has a p ...

  6. 你必须知道的容器监控 (1) Docker自带子命令与Weave Scope

    本篇已加入<.NET Core on K8S学习实践系列文章索引>,可以点击查看更多容器化技术相关系列文章.本篇会介绍几个目前比较常用且流行的容器监控工具,首先我们来看看Docker自带的 ...

  7. 在Hadoop上用Python实现WordCount

    一.简单说明 本例中我们用Python写一个简单的运行在Hadoop上的MapReduce程序,即WordCount(读取文本文件并统计单词的词频).这里我们将要输入的单词文本input.txt和Py ...

  8. opencv::Canny边缘检测

    Canny算法介绍 五步 in cv::Canny 高斯模糊 - GaussianBlur 灰度转换 - cvtColor 计算梯度 – Sobel/Scharr 非最大信号抑制 高低阈值输出二值图像 ...

  9. Mqtt-Client

    客户端选择:paho MQTT client. 使用vs2013编译成库 需要用到paho-mqtt3a库和paho-mqtt3c库.

  10. idea的tomcat实现热部署遇到的问题

    选择Deployment的时候,要选择exploded结尾的,否则不支持热部署