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. 【DP合集】tree-knapsack

    Description 给出一个 N 个节点的有根树,点编号 1 ∼ N ,编号为 i 的点有权值 v i .请选出一个包含树根的,点数 不超过 K 的连通块,使得点权和最大. Input 输入的第一 ...

  2. Cohen-Sutherland算法

    Cohen-Sutherland算法 本算法又称为编码裁剪算法,算法的基本思想是对每 条直线段分三种情况处理: (1)若点p1和p 2完全在裁剪窗口内 “简取”之 (2)若点p1(x1,y1)和p2( ...

  3. Linux防火墙常用操作

    /tcp —— 配置白名单 sudo systemctl start firewalld — 启动防火墙 sudo firewall-cmd --state - 看状态 sudo firewall-c ...

  4. Java学习笔记之基础语法(数组)

    数组 数组概述:是具有相同数据类型的数据的集合 数组的定义:数据类型 数组名 [] 数组特点: 1,数组是引用数据类型. 2,数组值用大括号,元素之间用逗号隔开,元素的个数是0-N个 3,数组长度是固 ...

  5. [BZOJ1076] 奖励关

    Description 你正在玩你最喜欢的电子游戏,并且刚刚进入一个奖励关.在这个奖励关里,系统将依次随机抛出k次宝物, 每次你都可以选择吃或者不吃(必须在抛出下一个宝物之前做出选择,且现在决定不吃的 ...

  6. go-数组-切片-字典

    声明一个数组变量的同时为该变量赋值. ], , } 另一种便捷方法, 类型字面量中省略代表其长度的数字 , , } 对于数组来说,索引值既不能小于0也不能大于或等于数组值的长度. 索引值的最小有效值从 ...

  7. {每日一题}:四种方法实现打印feibo斐波那契数列

    刚开始学Python的时候,记得经常遇到打印斐波那契数列了,今天玩玩使用四种办法打印出斐波那契数列 方法一:使用普通函数 def feibo(n): """ 打印斐波那契 ...

  8. C#+Selenium抓取百度搜索结果前100网址

    需求 爬取百度搜索某个关键字对应的前一百个网址. 实现方式 VS2017 + Chrome .NET Framework + C# + Selenium(浏览器自动化测试框架) 环境准备 创建控制台应 ...

  9. LeetCode108——Convert Sorted Array to Binary Search Tree

    题目: Given an array where elements are sorted in ascending order, convert it to a height balanced BST ...

  10. 从零开始把项目发布到maven仓库中心

    sonatype准备操作 注册账号 https://issues.sonatype.org 1. 密码符号规范,并且工记住 新建项目 1. group id 如果你有com域名的所有权可以直接使用,如 ...