scrapy的配置文件settings


#==>第一部分:基本配置<===
#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',
#}



#===>第二部分:並發與延遲<===
#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'

settings.py


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM