scrapy的setting

第一部分:基本配置

1、项目名称,默认的USER_AGENT由它来构成,也作为日志记录的日志名

BOT_NAME = 'Amazon'

2、爬虫应用路径

SPIDER_MODULES = ['Amazon.spiders']

NEWSPIDER_MODULE = 'Amazon.spiders'

3、客户端User-Agent请求头

USER_AGENT = 'Amazon (+http://www.yourdomain.com)'

4、是否遵循爬虫协议

# Obey robots.txt rules

ROBOTSTXT_OBEY = False

5、是否支持cookie,cookiejar进行操作cookie,默认开启

#COOKIES_ENABLED = False

6、Telnet用于查看当前爬虫的信息,操作爬虫等...使用telnet ip port ,然后通过命令操作

#TELNETCONSOLE_ENABLED = False

#TELNETCONSOLE_HOST = '127.0.0.1'

#TELNETCONSOLE_PORT = [6023,]

7、Scrapy发送HTTP请求默认使用的请求头

#DEFAULT_REQUEST_HEADERS = {

# 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

# 'Accept-Language': 'en',

#}

8、请求失败后(retry)

RETRY_ENABLED: 是否开启retry
RETRY_TIMES: 重试次数
RETRY_HTTP_CODECS: 遇到什么http code时需要重试,默认是500,502,503,504,408,其他的,网络连接超时等问题也会自动retry的

第二部分:并发与延迟

1、下载器总共最大处理的并发请求数,默认值16

#CONCURRENT_REQUESTS = 32

2、每个域名能够被执行的最大并发请求数目,默认值8

#CONCURRENT_REQUESTS_PER_DOMAIN = 16

3、能够被单个IP处理的并发请求数,默认值0,代表无限制,需要注意两点

#I、如果不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每个IP来计算,而不是每个域名

#II、该设置也影响DOWNLOAD_DELAY,如果该值不为零,那么DOWNLOAD_DELAY下载延迟是限制每个IP而不是每个域 #CONCURRENT_REQUESTS_PER_IP = 16

4、如果没有开启智能限速,这个值就代表一个规定死的值,代表对同一网址延迟请求的秒数

#DOWNLOAD_DELAY = 3

第三部分:智能限速/自动节流:AutoThrottle extension

一:介绍

from scrapy.contrib.throttle import AutoThrottle

http://scrapy.readthedocs.io/en/latest/topics/autothrottle.html

#topics-autothrottle

设置目标:

1、比使用默认的下载延迟对站点更好

2、自动调整scrapy到最佳的爬取速度,所以用户无需自己调整下载延迟到最佳状态。用户只需要定义允许最大并发的请求,剩下的事情由该扩展组件自动完成

二:如何实现?

在Scrapy中,下载延迟是通过计算建立TCP连接到接收到HTTP包头(header)之间的时间来测量的。 注意,由于Scrapy可能在忙着处理spider的回调函数或者无法下载,因此在合作的多任务环境下准确测量这些延迟是十分苦难的。 不过,这些延迟仍然是对Scrapy(甚至是服务器)繁忙程度的合理测量,而这扩展就是以此为前提进行编写的。

三:限速算法

自动限速算法基于以下规则调整下载延迟

1、spiders开始时的下载延迟是基于AUTOTHROTTLE_START_DELAY的值

2、当收到一个response,对目标站点的下载延迟=收到响应的延迟时间/AUTOTHROTTLE_TARGET_CONCURRENCY

3、下一次请求的下载延迟就被设置成:对目标站点下载延迟时间和过去的下载延迟时间的平均值

4、没有达到200个response则不允许降低延迟

5、下载延迟不能变的比DOWNLOAD_DELAY更低或者比AUTOTHROTTLE_MAX_DELAY更高

四:配置使用

开启True,默认False

AUTOTHROTTLE_ENABLED = True

起始的延迟

AUTOTHROTTLE_START_DELAY = 5

最小延迟

DOWNLOAD_DELAY = 3

最大延迟

AUTOTHROTTLE_MAX_DELAY = 10

每秒并发请求数的平均值,不能高于 CONCURRENT_REQUESTS_PER_DOMAIN或CONCURRENT_REQUESTS_PER_IP,调高了则吞吐量增大强奸目标站点,调低了则对目标站点更加”礼貌“

每个特定的时间点,scrapy并发请求的数目都可能高于或低于该值,这是爬虫视图达到的建议值而不是硬限制

AUTOTHROTTLE_TARGET_CONCURRENCY = 16.0

调试

AUTOTHROTTLE_DEBUG = True

CONCURRENT_REQUESTS_PER_DOMAIN = 16

CONCURRENT_REQUESTS_PER_IP = 16

第四部分:爬取深度与爬取方式

1、爬虫允许的最大深度,可以通过meta查看当前深度;0表示无深度

# DEPTH_LIMIT = 3

2、爬取时,0表示深度优先Lifo(默认);1表示广度优先FiFo

 后进先出,深度优先

# DEPTH_PRIORITY = 0

# SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleLifoDiskQueue'

# SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.LifoMemoryQueue'

#先进先出,广度优先

# DEPTH_PRIORITY = 1

# SCHEDULER_DISK_QUEUE = 'scrapy.squeue.PickleFifoDiskQueue'

# SCHEDULER_MEMORY_QUEUE = 'scrapy.squeue.FifoMemoryQueue'

3、调度器队列

# SCHEDULER = 'scrapy.core.scheduler.Scheduler'

# from scrapy.core.scheduler import Scheduler

4、访问URL去重

# DUPEFILTER_CLASS = 'step8_king.duplication.RepeatUrl'

第五部分:中间件、Pipelines、扩展

1、Enable or disable spider middlewares

# See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html

#SPIDER_MIDDLEWARES = {

# 'Amazon.middlewares.AmazonSpiderMiddleware': 543,

#} 

2、Enable or disable downloader middlewares

# See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { # 'Amazon.middlewares.DownMiddleware1': 543, }

3、Enable or disable extensions # See http://scrapy.readthedocs.org/en/latest/topics/extensions.html

#EXTENSIONS = {

# 'scrapy.extensions.telnet.TelnetConsole': None,

#}

4、Configure item pipelines

# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = {

# 'Amazon.pipelines.CustomPipeline': 200, }

第六部分:缓存

"""

1. 启用缓存

目的用于将已经发送的请求或相应缓存下来,以便以后使用

from scrapy.downloadermiddlewares.httpcache import HttpCacheMiddleware

from scrapy.extensions.httpcache import DummyPolicy

from scrapy.extensions.httpcache import FilesystemCacheStorage

"""

是否启用缓存策略

# HTTPCACHE_ENABLED = True

缓存策略:所有请求均缓存,下次在请求直接访问原来的缓存即可

# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.DummyPolicy"

缓存策略:

根据Http响应头:Cache-Control、Last-Modified 等进行缓存的策略

# HTTPCACHE_POLICY = "scrapy.extensions.httpcache.RFC2616Policy"

缓存超时时间

# HTTPCACHE_EXPIRATION_SECS = 0

#缓存保存路径

# HTTPCACHE_DIR = 'httpcache'

缓存忽略的Http状态码

# HTTPCACHE_IGNORE_HTTP_CODES = []

# 缓存存储的插件

# HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值