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. ES三节点重启后报错no known master node

    问题 一直在研究ES的监控怎么做,想偷点懒,不去通过API获取然后计算,就想找个现成的插件或者监控软件,只要装个agent就可以,然后就找到了x-pack,插件装好了之后,需要重启ES集群,线上的ES ...

  2. 介绍ArcGIS中各种数据的打开方法——shp(矢量文件)

    2.加载shp文件到地图控件 ShapeFile是一种矢量数据模型的计算机数据组织文件,用于在计算机上表达矢量数据的计算机文件. 加载ShapeFile文件最主要是:axMapControll控件对象 ...

  3. Neo4j:图数据库GraphDB(二)高级查找

    接着上一篇,继续介绍图数据库Neo4j: http://www.cnblogs.com/rongyux/p/5537028.html 三 高级查找操作 1过滤   name = "Tom H ...

  4. TensorFlow2.0(9):TensorBoard可视化

    .caret, .dropup > .btn > .caret { border-top-color: #000 !important; } .label { border: 1px so ...

  5. python学习-列表、元组和字典(三)

    学习笔记中的源码:传送门 3.1 列表和元组 3.2 不同类型变量的初始化: 数值 digital_value = 0 字符串 str_value = "" 或 str_value ...

  6. javascript学习总结之对象的深拷贝和浅拷贝

    前言 最近在写ES6的文章的时候发现重复遇到关于javascript深拷贝和浅拷贝的问题,然后查找了一些资料,根据资料和自己的理解做了以下笔记,毕竟javascript关于深拷贝和浅拷贝的问题在一些面 ...

  7. .Net轻量状态机Stateless的简单应用

    对于大部分系统中流程的变更,是十分正常的事情,小到一个状态的切换,大到整个系统都是围绕业务流再走,复杂点的有工作流引擎,简单点的几个if/else收工,但是往往有那种,心有余而力不足的,比简单复杂,比 ...

  8. 《编写可维护的JavaScript》 笔记

    <编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...

  9. unity 之 自定义弹出框

    一.弹出框的搭建: 布局如图:Message为整个父物体,并且添加UiMessage代码.panel为遮罩. MessageBox为整个提示框,Panel为标题,ok为确定按钮,cancel为取消按钮 ...

  10. char 、signed char、unsigned char

    看如下代码: char c = -1; signed char sc = -1; unsigned char uc = -1; printf("c=%d, sc=%d, uc=%d, cx= ...