scrapy反反爬蟲策略和settings配置解析
反反爬蟲相關機制
Some websites implement certain measures to prevent bots from crawling them, with varying degrees of sophistication. Getting around those measures can be difficult and tricky, and may sometimes require special infrastructure. Please consider contacting commercial support if in doubt.
(有些些網站使用特定的不同程度的複雜性規則防止爬蟲訪問,繞過這些規則是困難和複雜的,有時可能需要特殊的基礎設施,如果有疑問,請聯絡商業支援。)
通常防止爬蟲被反主要有以下幾個策略:
動態設定User-Agent(隨機切換User-Agent,模擬不同使用者的瀏覽器資訊)
新增請求頭的多種方式
- 方法1:
修改setting.py中的User-Agent
# Crawl responsibly by identifying yourself (and your website) on the user-agent USER_AGENT = 'Hello World'
- 方法2.
修改setting中的
DEFAULT_REQUEST_HEADERS
# Override the default request headers:
- 方法3.
在程式碼中修改。
class HeadervalidationSpider(scrapy.Spider): name = 'headervalidation' allowed_domains = ['helloacm.com']
def start_requests(self):
header={'User-Agent':'Hello World'}
yield scrapy.Request(url='http://helloacm.com/api/user-agent/',headers=header,callback=self.parse)
def parse(self, response):
print '*'*20
print response.body
print '*'*20
```
禁用Cookies(也就是不啟用cookies middleware,不向Server傳送cookies,有些網站通過cookie的使用發現爬蟲行為)
- 可以通過
COOKIES_ENABLED
控制 CookiesMiddleware 開啟或關閉
設定延遲下載(防止訪問過於頻繁,設定為 2秒 或更高)
Google Cache 和 Baidu Cache:如果可能的話,使用谷歌/百度等搜尋引擎伺服器頁面快取獲取頁面資料。
使用IP地址池:VPN和代理IP,現在大部分網站都是根據IP來ban的。
使用Crawlera(專用於爬蟲的代理元件),正確配置和設定下載中介軟體後,專案所有的request都是通過crawlera發出。
DOWNLOADER_MIDDLEWARES = { 'scrapy_crawlera.CrawleraMiddleware': 600 }
CRAWLERA_ENABLED = True
CRAWLERA_USER = ‘註冊/購買的UserKey’
CRAWLERA_PASS = ‘註冊/購買的Password’
“`
設定下載中介軟體(Downloader Middlewares)
下載中介軟體是處於引擎(crawler.engine)和下載器(crawler.engine.download())之間的一層元件,可以有多個下載中介軟體被載入執行。
- 當引擎傳遞請求給下載器的過程中,下載中介軟體可以對請求進行處理 (例如增加http header資訊,增加proxy資訊等);
- 在下載器完成http請求,傳遞響應給引擎的過程中, 下載中介軟體可以對響應進行處理(例如進行gzip的解壓等)
要啟用下載器中介軟體元件,將其加入到 DOWNLOADER_MIDDLEWARES 設定中。 該設定是一個字典(dict),鍵為中介軟體類的路徑,值為其中介軟體的順序(order)。
這裡是一個例子:
python
DOWNLOADER_MIDDLEWARES = {
'mySpider.middlewares.MyDownloaderMiddleware': 543,
}
編寫下載器中介軟體十分簡單。每個中介軟體元件是一個定義了以下一個或多個方法的Python類:
class scrapy.contrib.downloadermiddleware.DownloaderMiddleware
process_request(self, request, spider)
當每個request通過下載中介軟體時,該方法被呼叫。
process_request() 必須返回以下其中之一:一個 None 、一個 Response 物件、一個 Request 物件或 raise IgnoreRequest:
- 如果其返回 None ,Scrapy將繼續處理該request,執行其他的中介軟體的相應方法,直到合適的下載器處理函式(download handler)被呼叫, 該request被執行(其response被下載)。
- 如果其返回 Response 物件,Scrapy將不會呼叫 任何 其他的 process_request() 或 process_exception() 方法,或相應地下載函式; 其將返回該response。 已安裝的中介軟體的 process_response() 方法則會在每個response返回時被呼叫。
- 如果其返回 Request 物件,Scrapy則停止呼叫 process_request方法並重新排程返回的request。當新返回的request被執行後, 相應地中介軟體鏈將會根據下載的response被呼叫。
- 如果其raise一個 IgnoreRequest 異常,則安裝的下載中介軟體的 process_exception() 方法會被呼叫。如果沒有任何一個方法處理該異常, 則request的errback(Request.errback)方法會被呼叫。如果沒有程式碼處理丟擲的異常, 則該異常被忽略且不記錄(不同於其他異常那樣)。
引數:
request (Request 物件)
– 處理的request
spider (Spider 物件)
– 該request對應的spider
process_response(self, request, response, spider)
當下載器完成http請求,傳遞響應給引擎的時候呼叫
process_request() 必須返回以下其中之一: 返回一個 Response 物件、 返回一個 Request 物件或raise一個 IgnoreRequest 異常。
- 如果其返回一個 Response (可以與傳入的response相同,也可以是全新的物件), 該response會被在鏈中的其他中介軟體的 process_response() 方法處理。
- 如果其返回一個 Request 物件,則中介軟體鏈停止, 返回的request會被重新排程下載。處理類似於 process_request() 返回request所做的那樣。
- 如果其丟擲一個 IgnoreRequest 異常,則呼叫request的errback(Request.errback)。 如果沒有程式碼處理丟擲的異常,則該異常被忽略且不記錄(不同於其他異常那樣)。
引數:
request (Request 物件)
– response所對應的request
response (Response 物件)
– 被處理的response
spider (Spider 物件)
– response所對應的spider
使用案例:
1. 建立middlewares.py
檔案。
Scrapy代理IP、Uesr-Agent的切換都是通過DOWNLOADER_MIDDLEWARES
進行控制,我們在settings.py
同級目錄下建立middlewares.py
檔案,包裝所有請求。
# middlewares.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import random
from settings import USER_AGENTS
from settings import PROXIES
# 隨機的User-Agent
class RandomUserAgent(object):
def process_request(self, request, spider):
useragent = random.choice(USER_AGENTS)
request.headers.setdefault("User-Agent", useragent)
# 隨機代理IP
class RandomProxy(object):
def process_request(self, request, spider):
proxy = random.choice(PROXIES)
request.meta['proxy'] = "http://" + proxy['ip_port']
2. 修改settings.py配置USER_AGENTS和PROXIES
- 新增USER_AGENTS:
USER_AGENTS = [
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]
新增代理IP設定PROXIES:
免費代理IP可以網上搜索,或者付費購買一批可用的私密代理IP:
PROXIES = [
{'ip_port': '111.8.60.9:8123'},
{'ip_port': '101.71.27.120:80'},
{'ip_port': '122.96.59.104:80'},
{'ip_port': '122.224.249.122:8088'},
]
- 除非特殊需要,禁用cookies,防止某些網站根據Cookie來封鎖爬蟲。
COOKIES_ENABLED = False
- 設定下載延遲
DOWNLOAD_DELAY = 3
- 最後設定setting.py裡的DOWNLOADER_MIDDLEWARES,新增自己編寫的下載中介軟體類。
DOWNLOADER_MIDDLEWARES = {
#'mySpider.middlewares.MyCustomDownloaderMiddleware': 543,
'mySpider.middlewares.RandomUserAgent': 81,
'mySpider.middlewares.ProxyMiddleware': 100
}
Settings
Scrapy設定(settings)提供了定製Scrapy元件的方法。可以控制包括核心(core),外掛(extension),pipeline及spider元件。比如 設定Json Pipeliine、LOG_LEVEL等。
內建設定參考手冊
REACTOR_THREADPOOL_MAXSIZE = 20
- ##### 增加執行緒池數量,預設10條
IMAGES_STORE = '/path'
:下載圖片,圖片儲存在檔案中(一個圖片一個檔案),並使用它們URL的SHA1 hash作為檔名IMAGES_EXPIRES = 30
:圖片失效時間(天),避免下載最近已經下載的圖片# 圖片縮圖 IMAGES_THUMBS = { 'samll' : (50, 50), 'big' : (270, 270) } MEDIA_ALLOW_REDIRECTS = True # 重定向
import scrapy
from scrapy.contrib.pipeline.images import ImagesPipeline
from scrapy.exceptions import DropItem
class MyImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_urls']:
yield scrapy.Request(image_url)
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
item['image_paths'] = image_paths
return item
class MzituScrapyPipeline(ImagesPipeline):
def file_path(self, request, response=None, info=None):
"""
:param request: 每一個圖片下載管道請求
:param response:
:param info:
:param strip :清洗Windows系統的資料夾非法字元,避免無法建立目錄
:return: 每套圖的分類目錄
"""
item = request.meta['item']
folder = item['name']
folder_strip = strip(folder)
image_guid = request.url.split('/')[-1]
filename = u'full/{0}/{1}'.format(folder_strip, image_guid)
return filename
def get_media_requests(self, item, info):
"""
:param item: spider.py中返回的item
:param info:
:return:
"""
for img_url in item['image_urls']:
referer = item['url']
yield Request(img_url, meta={'item': item})
def item_completed(self, results, item, info):
image_paths = [x['path'] for ok, x in results if ok]
if not image_paths:
raise DropItem("Item contains no images")
return item
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,而不是網站。
DEFAULT_ITEM_CLASS
預設: 'scrapy.item.Item'
DEFAULT_REQUEST_HEADERS
預設:
{
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en',
}
DEPTH_LIMIT
預設: 0
爬取網站最大允許的深度(depth)值。如果為0,則沒有限制。
DEPTH_PRIORITY
預設: 0
整數值。用於根據深度調整request優先順序。
如果為0,則不根據深度進行優先順序調整。
DEPTH_STATS
預設: True
是否收集最大深度資料。
DEPTH_STATS_VERBOSE
預設: False
是否收集詳細的深度資料。如果啟用,每個深度的請求數將會被收集在資料中。
DNSCACHE_ENABLED
預設: True
是否啟用DNS記憶體快取(DNS in-memory cache)。
DOWNLOADER
預設: 'scrapy.core.downloader.Downloader'
用於crawl的downloader.
DOWNLOADER_MIDDLEWARES
預設:: {}
儲存專案中啟用的下載中介軟體及其順序的字典。 更多內容請檢視 啟用下載器中介軟體 。
DOWNLOADER_MIDDLEWARES_BASE
預設:
{
'scrapy.contrib.downloadermiddleware.robotstxt.RobotsTxtMiddleware': 100,
'scrapy.contrib.downloadermiddleware.httpauth.HttpAuthMiddleware': 300,
'scrapy.contrib.downloadermiddleware.downloadtimeout.DownloadTimeoutMiddleware': 350,
'scrapy.contrib.downloadermiddleware.useragent.UserAgentMiddleware': 400,
'scrapy.contrib.downloadermiddleware.retry.RetryMiddleware': 500,
'scrapy.contrib.downloadermiddleware.defaultheaders.DefaultHeadersMiddleware': 550,
'scrapy.contrib.downloadermiddleware.redirect.MetaRefreshMiddleware': 580,
'scrapy.contrib.downloadermiddleware.httpcompression.HttpCompressionMiddleware': 590,
'scrapy.contrib.downloadermiddleware.redirect.RedirectMiddleware': 600,
'scrapy.contrib.downloadermiddleware.cookies.CookiesMiddleware': 700,
'scrapy.contrib.downloadermiddleware.httpproxy.HttpProxyMiddleware': 750,
'scrapy.contrib.downloadermiddleware.chunked.ChunkedTransferMiddleware': 830,
'scrapy.contrib.downloadermiddleware.stats.DownloaderStats': 850,
'scrapy.contrib.downloadermiddleware.httpcache.HttpCacheMiddleware': 900,
}
包含Scrapy預設啟用的下載中介軟體的字典。 永遠不要在專案中修改該設定,而是修改DOWNLOADER_MIDDLEWARES
。更多內容請參考 啟用下載器中介軟體.
DOWNLOADER_STATS
預設: True
是否收集下載器資料。
DOWNLOAD_DELAY
預設: 0
下載器在下載同一個網站下一個頁面前需要等待的時間。該選項可以用來限制爬取速度, 減輕伺服器壓力。同時也支援小數:
DOWNLOAD_DELAY = 0.25 # 250 ms of delay
該設定影響(預設啟用的) RANDOMIZE_DOWNLOAD_DELAY
設定。 預設情況下,Scrapy在兩個請求間不等待一個固定的值, 而是使用0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY
的結果作為等待間隔。
另外您可以通過spider的 download_delay
屬性為每個spider設定該設定。
DOWNLOAD_HANDLERS
預設: {}
儲存專案中啟用的下載處理器(request downloader handler)的字典。 例子請檢視 DOWNLOAD_HANDLERS_BASE 。
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 。 例如,關閉檔案下載處理器:
DOWNLOAD_HANDLERS = {
'file': None,
}
DOWNLOAD_TIMEOUT
預設: 180
下載器超時時間(單位: 秒)。
DUPEFILTER_CLASS
預設: 'scrapy.dupefilter.RFPDupeFilter'
用於檢測過濾重複請求的類。
預設的 (RFPDupeFilter
) 過濾器基於 scrapy.utils.request.request_fingerprint
函式生成的請求fingerprint(指紋)。 如果您需要修改檢測的方式,您可以繼承 RFPDupeFilter
並覆蓋其 request_fingerprint
方法。 該方法接收 Request
物件並返回其fingerprint(一個字串)。
DUPEFILTER_DEBUG
預設: False
預設情況下, RFPDupeFilter
只記錄第一次重複的請求。 設定 DUPEFILTER_DEBUG
為 True
將會使其記錄所有重複的requests。
EDITOR
預設: depends on the environment
執行 edit
命令編輯spider時使用的編輯器。 其預設為 EDITOR
環境變數。如果該變數未設定,其預設為 vi
(Unix系統) 或者 IDLE編輯器(Windows)。
EXTENSIONS
預設:: {}
儲存專案中啟用的外掛及其順序的字典。
EXTENSIONS_BASE
預設:
{
'scrapy.contrib.corestats.CoreStats': 0,
'scrapy.webservice.WebService': 0,
'scrapy.telnet.TelnetConsole': 0,
'scrapy.contrib.memusage.MemoryUsage': 0,
'scrapy.contrib.memdebug.MemoryDebugger': 0,
'scrapy.contrib.closespider.CloseSpider': 0,
'scrapy.contrib.feedexport.FeedExporter': 0,
'scrapy.contrib.logstats.LogStats': 0,
'scrapy.contrib.spiderstate.SpiderState': 0,
'scrapy.contrib.throttle.AutoThrottle': 0,
}
可用的外掛列表。需要注意,有些外掛需要通過設定來啟用。預設情況下, 該設定包含所有穩定(stable)的內建外掛。
ITEM_PIPELINES
預設: {}
儲存專案中啟用的pipeline及其順序的字典。該字典預設為空,值(value)任意。 不過值(value)習慣設定在0-1000範圍內。
樣例:
ITEM_PIPELINES = {
'mybot.pipelines.validate.ValidateMyItem': 300,
'mybot.pipelines.validate.StoreMyItem': 800,
}
ITEM_PIPELINES_BASE
預設: {}
儲存專案中預設啟用的pipeline的字典。 永遠不要在專案中修改該設定,而是修改 ITEM_PIPELINES
。
LOG_ENABLED
預設: True
是否啟用logging。
LOG_ENCODING
預設: 'utf-8'
logging使用的編碼。
LOG_FILE
預設: None
logging輸出的檔名。如果為None,則使用標準錯誤輸出(standard error)。
LOG_LEVEL
預設: 'DEBUG'
log的最低級別。可選的級別有: CRITICAL、 ERROR、WARNING、INFO、DEBUG。更多內容請檢視 Logging 。
LOG_STDOUT
預設: False
如果為 True
,程序所有的標準輸出(及錯誤)將會被重定向到log中。例如, 執行 print 'hello'
,其將會在Scrapy log中顯示。
MEMDEBUG_ENABLED
預設: False
是否啟用記憶體除錯(memory debugging)。
MEMDEBUG_NOTIFY
預設: []
如果該設定不為空,當啟用記憶體除錯時將會發送一份記憶體報告到指定的地址;否則該報告將寫到log中。
樣例:
MEMDEBUG_NOTIFY = ['user@example.com']
MEMUSAGE_ENABLED
預設: False
Scope: scrapy.contrib.memusage
是否啟用記憶體使用外掛。當Scrapy程序佔用的記憶體超出限制時,該外掛將會關閉Scrapy程序, 同時傳送email進行通知。
MEMUSAGE_LIMIT_MB
預設: 0
Scope: scrapy.contrib.memusage
在關閉Scrapy之前所允許的最大記憶體數(單位: MB)(如果 MEMUSAGE_ENABLED為True)。 如果為0,將不做限制。
MEMUSAGE_NOTIFY_MAIL
預設: False
Scope: scrapy.contrib.memusage
達到記憶體限制時通知的email列表。
Example:
MEMUSAGE_NOTIFY_MAIL = ['user@example.com']
MEMUSAGE_REPORT
預設: False
Scope: scrapy.contrib.memusage
每個spider被關閉時是否傳送記憶體使用報告。
MEMUSAGE_WARNING_MB
預設: 0
Scope: scrapy.contrib.memusage
在傳送警告email前所允許的最大記憶體數(單位: MB)(如果 MEMUSAGE_ENABLED為True)。 如果為0,將不傳送警告。
NEWSPIDER_MODULE
預設: ''
使用 genspider
命令建立新spider的模組。
樣例:
NEWSPIDER_MODULE = 'mybot.spiders_dev'
RANDOMIZE_DOWNLOAD_DELAY
預設: True
如果啟用,當從相同的網站獲取資料時,Scrapy將會等待一個隨機的值 (0.5到1.5之間的一個隨機值 * DOWNLOAD_DELAY
)。
該隨機值降低了crawler被檢測到(接著被block)的機會。某些網站會分析請求, 查詢請求之間時間的相似性。
隨機的策略與 wget --random-wait
選項的策略相同。
REDIRECT_MAX_TIMES
預設: 20
定義request允許重定向的最大次數。超過該限制後該request直接返回獲取到的結果。 對某些任務我們使用Firefox預設值。
REDIRECT_MAX_METAREFRESH_DELAY
預設: 100
有些網站使用 meta-refresh 重定向到session超時頁面, 因此我們限制自動重定向到最大延遲(秒)。 =>有點不肯定:
REDIRECT_PRIORITY_ADJUST
預設: +2
修改重定向請求相對於原始請求的優先順序。 負數意味著更多優先順序。
ROBOTSTXT_OBEY
預設: False
Scope: scrapy.contrib.downloadermiddleware.robotstxt
如果啟用,Scrapy將會尊重 robots.txt策略。更多內容請檢視 RobotsTxtMiddleware 。
SCHEDULER
預設: 'scrapy.core.scheduler.Scheduler'
用於爬取的排程器。
SPIDER_CONTRACTS
預設:: {}
儲存專案中啟用用於測試spider的scrapy contract及其順序的字典。 更多內容請參考 Spiders Contracts 。
SPIDER_CONTRACTS_BASE
預設:
{
'scrapy.contracts.default.UrlContract' : 1,
'scrapy.contracts.default.ReturnsContract': 2,
'scrapy.contracts.default.ScrapesContract': 3,
}
儲存專案中預設啟用的scrapy contract的字典。 永遠不要在專案中修改該設定,而是修改SPIDER_CONTRACTS
。更多內容請參考 Spiders Contracts 。
SPIDER_MIDDLEWARES
預設:: {}
儲存專案中啟用的下載中介軟體及其順序的字典。 更多內容請參考 啟用spider中介軟體 。
SPIDER_MIDDLEWARES_BASE
預設:
{
'scrapy.contrib.spidermiddleware.httperror.HttpErrorMiddleware': 50,
'scrapy.contrib.spidermiddleware.offsite.OffsiteMiddleware': 500,
'scrapy.contrib.spidermiddleware.referer.RefererMiddleware': 700,
'scrapy.contrib.spidermiddleware.urllength.UrlLengthMiddleware': 800,
'scrapy.contrib.spidermiddleware.depth.DepthMiddleware': 900,
}
儲存專案中預設啟用的spider中介軟體的字典。 永遠不要在專案中修改該設定,而是修改SPIDER_MIDDLEWARES
。更多內容請參考 啟用spider中介軟體.
SPIDER_MODULES
預設: []
Scrapy搜尋spider的模組列表。
樣例:
SPIDER_MODULES = ['mybot.spiders_prod', 'mybot.spiders_dev']
STATS_CLASS
預設: 'scrapy.statscol.MemoryStatsCollector'
STATS_DUMP
預設: True
當spider結束時dump Scrapy狀態資料 (到Scrapy log中)。
STATSMAILER_RCPTS
預設: []
(空list)
spider完成爬取後傳送Scrapy資料。更多內容請檢視 StatsMailer
。
TELNETCONSOLE_ENABLED
預設: True
表明 telnet 終端 (及其外掛)是否啟用的布林值。
TELNETCONSOLE_PORT
預設: [6023, 6073]
telnet終端使用的埠範圍。如果設定為 None
或 0
, 則使用動態分配的埠。更多內容請檢視Telnet終端(Telnet Console) 。
TEMPLATES_DIR
預設: scrapy模組內部的 templates
URLLENGTH_LIMIT
預設: 2083
Scope: contrib.spidermiddleware.urllength
USER_AGENT
預設: "Scrapy/VERSION (+http://scrapy.org)"
爬取的預設User-Agent,除非被覆蓋。
Logging
Scrapy提供了log功能,可以通過 logging 模組使用。
可以修改配置檔案settings.py,任意位置新增下面兩行,效果會清爽很多。
LOG_ENABLED = True # 開啟
LOG_FILE = "TencentSpider.log" #日誌檔名
LOG_LEVEL = "INFO" #日誌級別
Log levels
- Scrapy提供5層logging級別:
- CRITICAL - 嚴重錯誤(critical)
- ERROR - 一般錯誤(regular errors)
- WARNING - 警告資訊(warning messages)
- INFO - 一般資訊(informational messages)
- DEBUG - 除錯資訊(debugging messages)
logging設定
通過在setting.py中進行以下設定可以被用來配置logging:
LOG_ENABLED
預設: True,啟用logging
LOG_ENCODING
預設: ‘utf-8’,logging使用的編碼
LOG_FILE
預設: None,在當前目錄裡建立logging輸出檔案的檔名
LOG_LEVEL
預設: ‘DEBUG’,log的最低級別
LOG_STDOUT
預設: False 如果為 True,程序所有的標準輸出(及錯誤)將會被重定向到log中。例如,執行 print “hello” ,其將會在Scrapy log中顯示。
日誌模組已經被scrapy棄用,改用python自帶日誌模組
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s" # 設定輸出格式
DATE_FORMAT = "%Y/%m/%d %H:%M:%S" # 設定時間格式
logging.basicConfig(filename='tianya.log', filemode='a+', format=LOG_FORMAT, datefmt=DATE_FORMAT)
logging.warning('錯誤')