Scrapy學(xué)習(xí)篇(八)之settings

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

Scrapy內(nèi)置設(shè)置

下面給出scrapy提供的常用內(nèi)置設(shè)置列表,你可以在settings.py文件里面修改這些設(shè)置,以應(yīng)用或者禁用這些設(shè)置項(xiàng)。

  • BOT_NAME
    默認(rèn): 'scrapybot'
    Scrapy項(xiàng)目實(shí)現(xiàn)的bot的名字。用來構(gòu)造默認(rèn) User-Agent,同時(shí)也用來log。
    當(dāng)你使用 startproject 命令創(chuàng)建項(xiàng)目時(shí)其也被自動(dòng)賦值。
  • CONCURRENT_ITEMS
    默認(rèn): 100
    Item Processor(即 Item Pipeline) 同時(shí)處理(每個(gè)response的)item的最大值
  • CONCURRENT_REQUESTS
    默認(rèn): 16
    Scrapy downloader 并發(fā)請(qǐng)求(concurrent requests)的最大值。
  • CONCURRENT_REQUESTS_PER_DOMAIN
    默認(rèn): 8
    對(duì)單個(gè)網(wǎng)站進(jìn)行并發(fā)請(qǐng)求的最大值。
  • CONCURRENT_REQUESTS_PER_IP
    默認(rèn): 0
    對(duì)單個(gè)IP進(jìn)行并發(fā)請(qǐng)求的最大值。如果非0,則忽略 CONCURRENT_REQUESTS_PER_DOMAIN 設(shè)定, 使用該設(shè)定。 也就是說,并發(fā)限制將針對(duì)IP,而不是網(wǎng)站。
    該設(shè)定也影響 DOWNLOAD_DELAY: 如果 CONCURRENT_REQUESTS_PER_IP 非0,下載延遲應(yīng)用在IP而不是網(wǎng)站上。
  • DEFAULT_ITEM_CLASS
    默認(rèn): 'scrapy.item.Item'
    the Scrapy shell 中實(shí)例化item使用的默認(rèn)類。
  • DEFAULT_REQUEST_HEADERS
    默認(rèn):
    {
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en',
    }
    
    Scrapy HTTP Request使用的默認(rèn)header。由 DefaultHeadersMiddleware 產(chǎn)生。
  • DOWNLOADER
    默認(rèn): 'scrapy.core.downloader.Downloader'
    用于crawl的downloader.
  • DOWNLOADER_MIDDLEWARES
    默認(rèn):: {}
    保存項(xiàng)目中啟用的下載中間件及其順序的字典。
  • DOWNLOAD_DELAY
    默認(rèn): 0
    下載器在下載同一個(gè)網(wǎng)站下一個(gè)頁面前需要等待的時(shí)間。該選項(xiàng)可以用來限制爬取速度, 減輕服務(wù)器壓力。同時(shí)也支持小數(shù):
  • DOWNLOAD_HANDLERS
    默認(rèn): {}
    保存項(xiàng)目中啟用的下載處理器(request downloader handler)的字典。
  • DOWNLOAD_TIMEOUT
    默認(rèn): 180
    下載器超時(shí)時(shí)間(單位: 秒)。
  • EXTENSIONS
    默認(rèn):{}
    保存項(xiàng)目中啟用的插件及其順序的字典。
  • ITEM_PIPELINES
    默認(rèn): {}
    保存項(xiàng)目中啟用的pipeline及其順序的字典。該字典默認(rèn)為空,值(value)任意。 不過值(value)習(xí)慣設(shè)定在0-1000范圍內(nèi)。
  • ITEM_PIPELINES_BASE
    默認(rèn): {}
    保存項(xiàng)目中默認(rèn)啟用的pipeline的字典。 永遠(yuǎn)不要在項(xiàng)目中修改該設(shè)定,而是修改 ITEM_PIPELINES 。
  • LOG_ENABLED
    默認(rèn): True
    是否啟用logging。
  • LOG_ENCODING
    默認(rèn): 'utf-8'
    logging使用的編碼。
  • LOG_FILE
    默認(rèn): None
    logging輸出的文件名。如果為None,則使用標(biāo)準(zhǔn)錯(cuò)誤輸出(standard error)。
  • LOG_FORMAT
    默認(rèn): '%(asctime)s [%(name)s] %(levelname)s: %(message)s'
    日志的數(shù)據(jù)格式
  • LOG_DATEFORMAT
    默認(rèn): '%Y-%m-%d %H:%M:%S'
    日志的日期格式
  • LOG_LEVEL
    默認(rèn): 'DEBUG'
    log的最低級(jí)別。可選的級(jí)別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。
  • LOG_STDOUT
    默認(rèn): False
    如果為 True ,進(jìn)程所有的標(biāo)準(zhǔn)輸出(及錯(cuò)誤)將會(huì)被重定向到log中。
  • RANDOMIZE_DOWNLOAD_DELAY
    默認(rèn): True
    如果啟用,當(dāng)從相同的網(wǎng)站獲取數(shù)據(jù)時(shí),Scrapy將會(huì)等待一個(gè)隨機(jī)的值 (0.5到1.5之間的一個(gè)隨機(jī)值 * DOWNLOAD_DELAY)。
    該隨機(jī)值降低了crawler被檢測(cè)到(接著被block)的機(jī)會(huì)。某些網(wǎng)站會(huì)分析請(qǐng)求, 查找請(qǐng)求之間時(shí)間的相似性。
  • REDIRECT_MAX_TIMES
    默認(rèn): 20
    定義request允許重定向的最大次數(shù)。超過該限制后該request直接返回獲取到的結(jié)果。 對(duì)某些任務(wù)我們使用Firefox默認(rèn)值。
  • ROBOTSTXT_OBEY
    默認(rèn): False
    是否遵循robots協(xié)議
  • SCHEDULER
    默認(rèn): 'scrapy.core.scheduler.Scheduler'
    用于爬取的調(diào)度器。
  • SPIDER_MIDDLEWARES
    默認(rèn): {}
    保存項(xiàng)目中啟用的下載中間件及其順序的字典。
  • USER_AGENT
    默認(rèn): "Scrapy/VERSION (+http://scrapy.org)"
    爬取的默認(rèn)User-Agent,除非被覆蓋。

Scrapy默認(rèn)BASE設(shè)置

scrapy對(duì)某些內(nèi)部組件進(jìn)行了默認(rèn)設(shè)置,這些組件通常情況下是不能被修改的,但是我們?cè)谧远x了某些組件以后,比如我們?cè)O(shè)置了自定義的middleware中間件,需要按照一定的順序把他添加到組件之中,這個(gè)時(shí)候需要參考scrapy的默認(rèn)設(shè)置,因?yàn)檫@個(gè)順序會(huì)影響scrapy的執(zhí)行,下面列出了scrapy的默認(rèn)基礎(chǔ)設(shè)置。

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

  • DOWNLOADER_MIDDLEWARES_BASE
    默認(rèn):

    {
        '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默認(rèn)啟用的下載中間件的字典。 永遠(yuǎn)不要在項(xiàng)目中修改該設(shè)定,而是修改 DOWNLOADER_MIDDLEWARES 。

  • SPIDER_MIDDLEWARES_BASE
    默認(rèn):

    {
        '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,
    }
    

    保存項(xiàng)目中默認(rèn)啟用的spider中間件的字典。 永遠(yuǎn)不要在項(xiàng)目中修改該設(shè)定,而是修改 SPIDER_MIDDLEWARES 。

  • EXTENSIONS_BASE
    默認(rèn):

    {
        '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,
    }
    

    可用的插件列表。需要注意,有些插件需要通過設(shè)定來啟用。默認(rèn)情況下, 該設(shè)定包含所有穩(wěn)定(stable)的內(nèi)置插件。

  • DOWNLOAD_HANDLERS_BASE
    默認(rèn):

    {
        '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',
    }
    

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

    如果需要關(guān)閉上面的下載處理器,您必須在項(xiàng)目中的 DOWNLOAD_HANDLERS 設(shè)定中設(shè)置該處理器,并為其賦值為 None 。

說明

即使我們添加了一些我們自定義的組件,scrapy默認(rèn)的base設(shè)置依然會(huì)被應(yīng)用,這樣說可能會(huì)一頭霧水,簡(jiǎn)單地例子:

假如我們?cè)趍iddlewares.py文件中定義了一個(gè)中間件,名稱為MyMiddleware,我們把它添加到settings.py文件里面的DOWNLOADER_MIDDLEWARES,且他的執(zhí)行順序我們?cè)O(shè)置為450,最終的設(shè)置內(nèi)容就是:

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

我們?cè)賮砜匆幌履J(rèn)的DOWNLOADER_MIDDLEWARES_BASE的內(nèi)容:

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,
}

這個(gè)時(shí)候,scrapy下載中間件的最終的執(zhí)行順序就是,把DOWNLOADER_MIDDLEWARESDOWNLOADER_MIDDLEWARES_BASE里面的中間件按照順序執(zhí)行,100>300>350>400>450>500>550>580>590>600>700>750>830>850>900且全部執(zhí)行,并不會(huì)因?yàn)槲覀兌x了一個(gè)中間件,而使默認(rèn)的中間件失效,也就是說,最終的結(jié)果其實(shí)是合并執(zhí)行。

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

DOWNLOADER_MIDDLEWARES = {
    'cnblog.middlewares.MyMiddleware':450,
    'scrapy.downloadermiddlewares.retry.RetryMiddleware':None,
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,106評(píng)論 6 542
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,441評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,211評(píng)論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,736評(píng)論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,475評(píng)論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,834評(píng)論 1 328
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,829評(píng)論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,009評(píng)論 0 290
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,559評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,516評(píng)論 1 374
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,038評(píng)論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,728評(píng)論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,132評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,443評(píng)論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,249評(píng)論 3 399
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,484評(píng)論 2 379

推薦閱讀更多精彩內(nèi)容