Scrapy爬蟲框架之settings文件詳解,內置設置


# -*- coding: utf-8 -*-

# Scrapy settings for maoyan project
#
# For simplicity, this file contains only settings considered important or
# commonly used. You can find more settings consulting the documentation:
#
#     https://doc.scrapy.org/en/latest/topics/settings.html
#     https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
#     https://doc.scrapy.org/en/latest/topics/spider-middleware.html

# #Scrapy項目的名字,這將用來構造默認 User-Agent
BOT_NAME = 'BLZX'

SPIDER_MODULES = ['BLZX.spiders']         # Scrapy搜索spider的模塊列表 默認: [xxx.spiders]
NEWSPIDER_MODULE = 'BLZX.spiders'         # 使用 genspider 命令創建新spider的模塊。默認: 'xxx.spiders'

# 通過在用戶代理上標識您自己(和您的網站)來負責地爬行
# Crawl responsibly by identifying yourself (and your website) on the user-agent
#USER_AGENT = 'maoyan (+http://www.yourdomain.com)'

# Obey robots.txt rules    遵守robots.txt規則
ROBOTSTXT_OBEY = False

# 配置Scrapy執行的最大並發請求(默認值:16)
# Configure maximum concurrent requests performed by Scrapy (default: 16)
#CONCURRENT_REQUESTS = 32

# 同一網站的請求配置延遲(默認值:0)
# Configure a delay for requests for the same website (default: 0)
# See https://doc.scrapy.org/en/latest/topics/settings.html#download-delay
# See also autothrottle settings and docs
# 下載延遲
#DOWNLOAD_DELAY = 3

# 下載延遲設置將僅滿足以下條件之一(二選一)
# The download delay setting will honor only one of:
#CONCURRENT_REQUESTS_PER_DOMAIN = 16            # 每個域的並發請求的最大值
#CONCURRENT_REQUESTS_PER_IP = 16                # 對單個IP進行並發請求的最大值

# 禁用cookie(默認情況下啟用)
# Disable cookies (enabled by default)
#COOKIES_ENABLED = False

# 禁用telnet控制台(默認啟用)
# Disable Telnet Console (enabled by default)
#TELNETCONSOLE_ENABLED = False

# 覆蓋默認請求頭
# Override the default request headers:
#DEFAULT_REQUEST_HEADERS = {
#   'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
#   'Accept-Language': 'en',
#}

# 啟用或禁用蜘蛛中間件
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html

# =======================Spider Middleware=============================
#SPIDER_MIDDLEWARES = {
#    'maoyan.middlewares.MaoyanSpiderMiddleware': 543,
#}


# 啟用或禁用下載器中間件
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html

# =====================Downloader Middleware===========================
# DOWNLOADER_MIDDLEWARES = {
   # 'maoyan.middlewares.MaoyanDownloaderMiddleware': 543,
# }

# 啟用或禁用擴展
# Enable or disable extensions
# See https://doc.scrapy.org/en/latest/topics/extensions.html
#EXTENSIONS = {
#    'scrapy.extensions.telnet.TelnetConsole': None,
#}

# 管道配置項目
# Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
#ITEM_PIPELINES = {
#    'maoyan.pipelines.MaoyanPipeline': 300,
#}

# 啟用和配置AutoThrottle擴展(默認情況下禁用)
# Enable and configure the AutoThrottle extension (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/autothrottle.html
#AUTOTHROTTLE_ENABLED = True

# 初始下載延遲
# The initial download delay
#AUTOTHROTTLE_START_DELAY = 5

# 在高延遲情況下設置的最大下載延遲
# The maximum download delay to be set in case of high latencies
#AUTOTHROTTLE_MAX_DELAY = 60

# Scrapy平均請求數應與每個遠程服務器並行發送
# The average number of requests Scrapy should be sending in parallel to
# each remote server
#AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0
# Enable showing throttling stats for every response received:
#AUTOTHROTTLE_DEBUG = False

# 啟用和配置HTTP緩存(默認情況下禁用)
# Enable and configure HTTP caching (disabled by default)
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings
#HTTPCACHE_ENABLED = True
#HTTPCACHE_EXPIRATION_SECS = 0
#HTTPCACHE_DIR = 'httpcache'
#HTTPCACHE_IGNORE_HTTP_CODES = []
#HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'

Scrapy設定(settings)提供了定制Scrapy組件的方法。你可以控制包括核心(core),插件(extension),pipeline及spider組件。設定為代碼提供了提取以key-value映射的配置值的的全局命名空間(namespace)。

Scrapy內置設置

下面給出scrapy提供的常用內置設置列表,你可以在settings.py文件里面修改這些設置,以應用或者禁用這些設置項。

    • BOT_NAME
      默認: 'scrapybot'
      Scrapy項目實現的bot的名字。用來構造默認 User-Agent,同時也用來log。
      當你使用 startproject 命令創建項目時其也被自動賦值。
    • CONCURRENT_ITEMS
      默認: 100
      Item Processor(即 Item Pipeline) 同時處理(每個response的)item的最大值
    • CONCURRENT_REQUESTS
      默認: 16
      Scrapy downloader 並發請求(concurrent requests)的最大值。
    • CONCURRENT_REQUESTS_PER_DOMAIN
      默認: 8
      對單個網站進行並發請求的最大值。
    • CONCURRENT_REQUESTS_PER_IP
      默認: 0
      對單個IP進行並發請求的最大值。如果非0,則忽略 CONCURRENT_REQUESTS_PER_DOMAIN 設定, 使用該設定。 也就是說,並發限制將針對IP,而不是網站。
      該設定也影響 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下載延遲應用在IP而不是網站上。
    • DEFAULT_ITEM_CLASS
      默認: 'scrapy.item.Item'
      the Scrapy shell 中實例化item使用的默認類。
    • DEFAULT_REQUEST_HEADERS
      默認:

      {
          'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', }
      Scrapy HTTP Request使用的默認header。由 DefaultHeadersMiddleware 產生。
    • DOWNLOADER
      默認: 'scrapy.core.downloader.Downloader'
      用於crawl的downloader.
    • DOWNLOADER_MIDDLEWARES
      默認:: {}
      保存項目中啟用的下載中間件及其順序的字典。
    • DOWNLOAD_DELAY
      默認: 0
      下載器在下載同一個網站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度, 減輕服務器壓力。同時也支持小數:
    • DOWNLOAD_HANDLERS
      默認: {}
      保存項目中啟用的下載處理器(request downloader handler)的字典。
    • DOWNLOAD_TIMEOUT
      默認: 180
      下載器超時時間(單位: 秒)。
    • EXTENSIONS
      默認:{}
      保存項目中啟用的插件及其順序的字典。
    • ITEM_PIPELINES
      默認: {}
      保存項目中啟用的pipeline及其順序的字典。該字典默認為空,值(value)任意。 不過值(value)習慣設定在0-1000范圍內。
    • ITEM_PIPELINES_BASE
      默認: {}
      保存項目中默認啟用的pipeline的字典。 永遠不要在項目中修改該設定,而是修改 ITEM_PIPELINES 。
    • LOG_ENABLED
      默認: True
      是否啟用logging。
    • LOG_ENCODING
      默認: 'utf-8'
      logging使用的編碼。
    • LOG_FILE
      默認: None
      logging輸出的文件名。如果為None,則使用標准錯誤輸出(standard error)。
    • LOG_FORMAT
      默認: '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
      日志的數據格式
    • LOG_DATEFORMAT
      默認: '%Y-%m-%d %H:%M:%S'
      日志的日期格式
    • LOG_LEVEL
      默認: 'DEBUG'
      log的最低級別。可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
    • LOG_STDOUT
      默認: False
      如果為 True ,進程所有的標准輸出(及錯誤)將會被重定向到log中。
    • RANDOMIZE_DOWNLOAD_DELAY
      默認: True
      如果啟用,當從相同的網站獲取數據時,Scrapy將會等待一個隨機的值 (0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY)。
      該隨機值降低了crawler被檢測到(接着被block)的機會。某些網站會分析請求, 查找請求之間時間的相似性。
    • REDIRECT_MAX_TIMES
      默認: 20
      定義request允許重定向的最大次數。超過該限制后該request直接返回獲取到的結果。 對某些任務我們使用Firefox默認值。
    • ROBOTSTXT_OBEY
      默認: False
      是否遵循robots協議
    • SCHEDULER
      默認: 'scrapy.core.scheduler.Scheduler'
      用於爬取的調度器。
    • SPIDER_MIDDLEWARES
      默認: {}
      保存項目中啟用的下載中間件及其順序的字典。
    • USER_AGENT
      默認: "Scrapy/VERSION (+http://scrapy.org)"
      爬取的默認User-Agent,除非被覆蓋。

Scrapy默認BASE設置

scrapy對某些內部組件進行了默認設置,這些組件通常情況下是不能被修改的,但是我們在自定義了某些組件以后,比如我們設置了自定義的middleware中間件,需要按照一定的順序把他添加到組件之中,這個時候需要參考scrapy的默認設置,因為這個順序會影響scrapy的執行,下面列出了scrapy的默認基礎設置。

注意:如果你想要修改以下的某些設置,應該避免直接修改下列內容,而是修改其對應的自定義內容,例如,你想修改下面的DOWNLOADER_MIDDLEWARES_BASE的內容,你應該去修改DOWNLOADER_MIDDLEWARES這個內容,只是去掉了_BASE而已,其他的也是類似這樣。

  • DOWNLOADER_MIDDLEWARES_BASE
    默認:

    {
        'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300, 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400, 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500, 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550, 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, 'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830, 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, }

    包含Scrapy默認啟用的下載中間件的字典。 永遠不要在項目中修改該設定,而是修改 DOWNLOADER_MIDDLEWARES 。

  • SPIDER_MIDDLEWARES_BASE
    默認:

    {
        'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50, 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500, 'scrapy.spidermiddlewares.referer.RefererMiddleware': 700, 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800, 'scrapy.spidermiddlewares.depth.DepthMiddleware': 900, }
    保存項目中默認啟用的spider中間件的字典。 永遠不要在項目中修改該設定,而是修改 SPIDER_MIDDLEWARES 。
  • EXTENSIONS_BASE
    默認:

    {
        'scrapy.extensions.corestats.CoreStats': 0, 'scrapy.telnet.TelnetConsole': 0, 'scrapy.extensions.memusage.MemoryUsage': 0, 'scrapy.extensions.memdebug.MemoryDebugger': 0, 'scrapy.extensions.closespider.CloseSpider': 0, 'scrapy.extensions.feedexport.FeedExporter': 0, 'scrapy.extensions.logstats.LogStats': 0, 'scrapy.extensions.spiderstate.SpiderState': 0, 'scrapy.extensions.throttle.AutoThrottle': 0, }
    可用的插件列表。需要注意,有些插件需要通過設定來啟用。默認情況下, 該設定包含所有穩定(stable)的內置插件。
  • DOWNLOAD_HANDLERS_BASE
    默認:

    {
        'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler', 'http': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler', 'https': 'scrapy.core.downloader.handlers.http.HttpDownloadHandler', 's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler', }

    保存項目中默認啟用的下載處理器(request downloader handler)的字典。 永遠不要在項目中修改該設定,而是修改 DOWNLOADER_HANDLERS 。

    如果需要關閉上面的下載處理器,您必須在項目中的 DOWNLOAD_HANDLERS 設定中設置該處理器,並為其賦值為 None 。

說明

即使我們添加了一些我們自定義的組件,scrapy默認的base設置依然會被應用,這樣說可能會一頭霧水,簡單地例子:

假如我們在middlewares.py文件中定義了一個中間件,名稱為MyMiddleware,我們把它添加到settings.py文件里面的DOWNLOADER_MIDDLEWARES,且他的執行順序我們設置為450,最終的設置內容就是:

DOWNLOADER_MIDDLEWARES = {
    'cnblog.middlewares.MyMiddleware':450,
}

我們再來看一下默認的DOWNLOADER_MIDDLEWARES_BASE的內容:

DOWNLOADER_MIDDLEWARES_BASE ={
    'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300, 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 400, 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500, 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 550, 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, 'scrapy.downloadermiddlewares.chunked.ChunkedTransferMiddleware': 830, 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, }

這個時候,scrapy下載中間件的最終的執行順序就是,把DOWNLOADER_MIDDLEWARESDOWNLOADER_MIDDLEWARES_BASE里面的中間件按照順序執行,100>300>350>400>450>500>550>580>590>600>700>750>830>850>900且全部執行,並不會因為我們定義了一個中間件,而使默認的中間件失效,也就是說,最終的結果其實是合並執行。

如果我們不想應用某一個默認的中間件,假如'scrapy.downloadermiddlewares.retry.RetryMiddleware': 500,那么,就應該在DOWNLOADER_MIDDLEWARES里面把它的值設置為None,像下面這樣:

DOWNLOADER_MIDDLEWARES = {
    'cnblog.middlewares.MyMiddleware':450, 'scrapy.downloadermiddlewares.retry.RetryMiddleware':None, }


來自:https://www.cnblogs.com/felixwang2/p/8798653.html,https://www.cnblogs.com/zhaco/p/10615553.html
 


免責聲明!

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



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