#一、项目名称,默认的USER_AGENT由它来构成,也做为日志记录的日志名 BOT_NAME = 'Amazon' #二、爬虫应用路径 SPIDER_MODULES = ['Amazon.spiders'] NEWSPIDER_MODULE = 'Amazon.spiders' #三、客户端User-Agent请求头 #USER_AGENT = 'Amazon (+http://www.yourdomain.com)' #四、是否遵循爬虫协议 # Obey robots.txt rules ROBOTSTXT_OBEY = False #五、是否支持cookie,cookiejar进行操做cookie,默认开启 #COOKIES_ENABLED = False #六、Telnet用于查看当前爬虫的信息,操做爬虫等...使用telnet ip port ,而后经过命令操做 #TELNETCONSOLE_ENABLED = False #TELNETCONSOLE_HOST = '127.0.0.1' #TELNETCONSOLE_PORT = [6023,] #七、Scrapy发送HTTP请求默认使用的请求头 #DEFAULT_REQUEST_HEADERS = { # 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', # 'Accept-Language': 'en', #}
#一、下载器总共最大处理的并发请求数,默认值16 #CONCURRENT_REQUESTS = 32 #二、每一个域名可以被执行的最大并发请求数目,默认值8 #CONCURRENT_REQUESTS_PER_DOMAIN = 16 #三、可以被单个IP处理的并发请求数,默认值0,表明无限制,须要注意两点 #I、若是不为零,那CONCURRENT_REQUESTS_PER_DOMAIN将被忽略,即并发数的限制是按照每一个IP来计算,而不是每一个域名 #II、该设置也影响DOWNLOAD_DELAY,若是该值不为零,那么DOWNLOAD_DELAY下载延迟是限制每一个IP而不是每一个域 #CONCURRENT_REQUESTS_PER_IP = 16 #四、若是没有开启智能限速,这个值就表明一个规定死的值,表明对同一网址延迟请求的秒数 #DOWNLOAD_DELAY = 3
from scrapy.contrib.throttle import AutoThrottle #http://scrapy.readthedocs.io/en/latest/topics/autothrottle.html#topics-autothrottle
一、比使用默认的下载延迟对站点更好html
二、自动调整scrapy到最佳的爬取速度,因此用户无需本身调整下载延迟到最佳状态。用户只须要定义容许最大并发的请求,剩下的事情由该扩展组件自动完成算法
在Scrapy中,下载延迟是经过计算创建TCP链接到接收到HTTP包头(header)之间的时间来测量的。缓存
注意,因为Scrapy可能在忙着处理spider的回调函数或者没法下载,所以在合做的多任务环境下准确测量这些延迟是十分苦难的。 不过,这些延迟仍然是对Scrapy(甚至是服务器)繁忙程度的合理测量,而这扩展就是以此为前提进行编写的。服务器
自动限速算法基于如下规则调整下载延迟cookie
#一、spiders开始时的下载延迟是基于AUTOTHROTTLE_START_DELAY的值 #二、当收到一个response,对目标站点的下载延迟=收到响应的延迟时间/AUTOTHROTTLE_TARGET_CONCURRENCY #三、下一次请求的下载延迟就被设置成:对目标站点下载延迟时间和过去的下载延迟时间的平均值 #四、没有达到200个response则不容许下降延迟 #五、下载延迟不能变的比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
#一、爬虫容许的最大深度,能够经过meta查看当前深度;0表示无深度 # DEPTH_LIMIT = 3 #二、爬取时,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' #三、调度器队列 # SCHEDULER = 'scrapy.core.scheduler.Scheduler' # from scrapy.core.scheduler import Scheduler #四、访问URL去重 # DUPEFILTER_CLASS = 'step8_king.duplication.RepeatUrl'
#一、Enable or disable spider middlewares # See http://scrapy.readthedocs.org/en/latest/topics/spider-middleware.html #SPIDER_MIDDLEWARES = { # 'Amazon.middlewares.AmazonSpiderMiddleware': 543, #} #二、Enable or disable downloader middlewares # See http://scrapy.readthedocs.org/en/latest/topics/downloader-middleware.html DOWNLOADER_MIDDLEWARES = { # 'Amazon.middlewares.DownMiddleware1': 543, } #三、Enable or disable extensions # See http://scrapy.readthedocs.org/en/latest/topics/extensions.html #EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, #} #四、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'