爬蟲(十五):scrapy中的settings詳解

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

Scrapy內置設置

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

  • 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
    默認:shell

    {
        '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的默認基礎設置。cookie

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

  • DOWNLOADER_MIDDLEWARES_BASE
    默認:app

    {
        '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 。scrapy

  • SPIDER_MIDDLEWARES_BASE
    默認:ide

    {
        '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, }
相關文章
相關標籤/搜索