接上篇《52、CrawlSpider鏈接提取器的使用》
上一篇我們學(xué)習(xí)了基于規(guī)則進(jìn)行跟蹤和自動(dòng)爬取網(wǎng)頁(yè)數(shù)據(jù)的“特殊爬蟲(chóng)”CrawlSpider。本篇我們來(lái)學(xué)習(xí)Scrapy的日志信息及日志級(jí)別。
一、引言
1、日志在Scrapy中的重要性
在Scrapy框架中,日志扮演著至關(guān)重要的角色。日志不僅記錄了爬蟲(chóng)在運(yùn)行過(guò)程中的詳細(xì)行為,還提供了大量有助于開(kāi)發(fā)者定位問(wèn)題和優(yōu)化程序的信息。通過(guò)日志,開(kāi)發(fā)者可以了解到爬蟲(chóng)的每一步操作,包括請(qǐng)求的發(fā)送、響應(yīng)的接收、數(shù)據(jù)的解析以及任何可能出現(xiàn)的異常。這些信息對(duì)于調(diào)試程序、監(jiān)控運(yùn)行狀態(tài)以及優(yōu)化性能都是不可或缺的。
2、日志級(jí)別及其作用
日志級(jí)別在Scrapy中同樣具有重要意義。不同級(jí)別的日志信息反映了不同層次的程序運(yùn)行狀況。通過(guò)設(shè)置合適的日志級(jí)別,開(kāi)發(fā)者可以過(guò)濾掉大量不必要的細(xì)節(jié)信息,只關(guān)注關(guān)鍵的運(yùn)行狀態(tài)和錯(cuò)誤提示。這不僅可以提高開(kāi)發(fā)效率,還有助于快速定位并解決潛在的問(wèn)題。同時(shí),合理的日志級(jí)別設(shè)置也有助于保護(hù)程序的敏感信息,避免信息泄露的風(fēng)險(xiǎn)。因此,深入理解Scrapy的日志級(jí)別及其使用方法是每一個(gè)Scrapy開(kāi)發(fā)者必須掌握的技能。
二、Scrapy日志系統(tǒng)概述
1、Scrapy日志系統(tǒng)的基本結(jié)構(gòu)
Scrapy的日志系統(tǒng)采用了層次化的設(shè)計(jì),確保日志信息能夠有序地生成、處理和輸出。它主要由以下幾個(gè)關(guān)鍵組件構(gòu)成:
●日志記錄器(Logger):Scrapy中的每個(gè)模塊或組件都有自己的日志記錄器。這些記錄器負(fù)責(zé)收集并處理與該模塊或組件相關(guān)的日志信息。
●日志處理器(Handler):日志處理器負(fù)責(zé)將日志信息輸出到指定的目的地,如控制臺(tái)、文件或遠(yuǎn)程服務(wù)器等。Scrapy支持多種類(lèi)型的處理器,以滿(mǎn)足不同的輸出需求。
●日志級(jí)別(Level):Scrapy支持多種日志級(jí)別,包括DEBUG、INFO、WARNING、ERROR和CRITICAL。這些級(jí)別用于區(qū)分不同重要程度的日志信息,幫助開(kāi)發(fā)者快速定位問(wèn)題。
●日志格式(Formatter):日志格式定義了日志信息的輸出格式,包括時(shí)間戳、日志級(jí)別、模塊名、消息內(nèi)容等。Scrapy允許開(kāi)發(fā)者自定義日志格式,以滿(mǎn)足特定的需求。
2、日志信息的生成與輸出
在Scrapy中,日志信息的生成與輸出是一個(gè)自動(dòng)化的過(guò)程。當(dāng)爬蟲(chóng)運(yùn)行時(shí),各個(gè)模塊和組件會(huì)根據(jù)其內(nèi)部狀態(tài)和操作生成相應(yīng)的日志信息。這些信息首先被傳遞給對(duì)應(yīng)的日志記錄器,記錄器根據(jù)配置的日志級(jí)別對(duì)信息進(jìn)行過(guò)濾和處理。然后,處理后的日志信息被傳遞給相應(yīng)的日志處理器,由處理器負(fù)責(zé)將其輸出到指定的目的地。
Scrapy的日志系統(tǒng)支持多種輸出方式,包括控制臺(tái)輸出、文件存儲(chǔ)和遠(yuǎn)程日志服務(wù)等。開(kāi)發(fā)者可以根據(jù)自己的需求選擇合適的輸出方式,并配置相應(yīng)的處理器。
在Scrapy中,日志信息的生成與輸出通常是自動(dòng)進(jìn)行的,無(wú)需開(kāi)發(fā)者顯式編寫(xiě)日志記錄代碼。Scrapy內(nèi)部使用了Python的logging模塊來(lái)處理日志,并在框架的不同部分自動(dòng)記錄日志信息。以下是一個(gè)簡(jiǎn)單的Scrapy spider示例,其中日志信息的生成和輸出是自動(dòng)發(fā)生的:
import scrapy
class BaiduSpiderSpider(scrapy.Spider):
? ? name = "baidu_spider"
? ? allowed_domains = ["www.baidu.com"]
? ? start_urls = ["https://www.baidu.com"]
? ? # 百度設(shè)置了反爬,使用這個(gè)程序測(cè)試時(shí),記得把setting.py的ROBOTSTXT_OBEY參數(shù)改為False
? ? def parse(self, response):
? ? ? ? # 當(dāng)爬蟲(chóng)解析頁(yè)面時(shí),會(huì)自動(dòng)生成并輸出日志信息
? ? ? ? self.logger.info('被抓取的頁(yè)面地址為: %s', response.url)
? ? ? ? # ... 其他解析邏輯 ...
? ? ? ? pass
在這個(gè)示例中,self.logger.info()用于記錄一條INFO級(jí)別的日志信息。Scrapy會(huì)自動(dòng)處理這條日志信息的輸出,通常默認(rèn)輸出到控制臺(tái):
3、日志系統(tǒng)的配置與自定義
Scrapy的日志系統(tǒng)提供了豐富的配置選項(xiàng),允許開(kāi)發(fā)者根據(jù)實(shí)際需求進(jìn)行自定義。通過(guò)修改Scrapy的配置文件或編寫(xiě)自定義的日志處理邏輯,開(kāi)發(fā)者可以控制日志的級(jí)別、格式、輸出方式等。
(1)設(shè)置日志級(jí)別
你可以設(shè)置整個(gè)Scrapy項(xiàng)目的日志級(jí)別,或者為特定的組件設(shè)置不同的日志級(jí)別(在settings.py中設(shè)置):
# settings.py ?
??
# 設(shè)置整個(gè)項(xiàng)目的日志級(jí)別為INFO ?
LOG_LEVEL = 'INFO' ?
??
# 或者為特定的組件設(shè)置日志級(jí)別 ?
# 例如,為Scrapy引擎設(shè)置DEBUG級(jí)別 ?
LOG_LEVEL_SCRAPY = 'DEBUG'
除了LOG_LEVEL外,日志系統(tǒng)還包含其他參數(shù):
●LOG_FILE: 日志輸出文件。如果設(shè)置為None,日志信息將直接打印到控制臺(tái)。通過(guò)設(shè)置具體的文件路徑和名稱(chēng),你可以將日志保存到本地文件中,方便后續(xù)查看和分析。
●LOG_ENABLED: 是否啟用日志系統(tǒng)。默認(rèn)為T(mén)rue,表示啟用日志記錄。如果設(shè)置為False,則不會(huì)記錄任何日志信息。
●LOG_ENCODING: 日志編碼。默認(rèn)為utf-8,表示使用UTF-8編碼來(lái)保存日志信息。你可以根據(jù)需要調(diào)整此設(shè)置以適應(yīng)不同的編碼要求。
●LOG_FORMAT 和 LOG_DATEFORMAT: 分別用于定義日志的格式和日期格式。通過(guò)自定義這些格式,你可以控制日志信息的顯示方式,使其更符合你的需求。
(2)自定義日志輸出格式
你可以自定義日志的輸出格式,使其包含更多或更少的信息(在settings.py中設(shè)置):
# settings.py ?
??
# 自定義日志輸出格式 ?
LOG_FORMAT = '%(asctime)s [%(name)s] %(levelname)s: %(message)s' ?
LOG_DATEFORMAT = '%Y-%m-%d %H:%M:%S'
測(cè)試效果:
(3)將日志輸出到文件
默認(rèn)情況下,Scrapy將日志輸出到控制臺(tái)。你可以通過(guò)添加自定義的日志處理器來(lái)將日志輸出到文件(在settings.py中設(shè)置):
# settings.py ?
??
# 添加自定義的日志處理器,將日志輸出到文件 ?
from scrapy.utils.log import configure_logging
import logging
class FilelogHandler(logging.FileHandler):
? ? def emit(self, record):
? ? ? ? msg = self.format(record)
? ? ? ? self.stream.write(msg + '\n')
# Scrapy會(huì)設(shè)置一些默認(rèn)設(shè)置,并在運(yùn)行命令時(shí)借助scrapy.utils.log.configure_logging()來(lái)處理這些設(shè)置。
# 當(dāng)Scrapy的命令行工具(如scrapy crawl)被執(zhí)行時(shí),它會(huì)自動(dòng)調(diào)用configure_logging來(lái)設(shè)置默認(rèn)的日志配置。這包括設(shè)置日志級(jí)別、輸出格式、處理器等。
configure_logging({
? ? 'LOG_FILE': 'baidu_spider.log',
? ? 'loggers': {
? ? ? ? 'baidu_spider': {
? ? ? ? ? ? 'level': 'DEBUG',
? ? ? ? ? ? 'handlers': ['file'],
? ? ? ? ? ? 'propagate': True,
? ? ? ? },
? ? },
? ? 'handlers': {
? ? ? ? 'file': {
? ? ? ? ? ? 'level': 'DEBUG',
? ? ? ? ? ? 'class': 'settings.FilelogHandler',
? ? ? ? ? ? 'filename': 'baidu_spider.log',
? ? ? ? ? ? 'append': True,
? ? ? ? }
? ? },
})
在這個(gè)示例中,我們定義了一個(gè)自定義的FileLogHandler類(lèi),并將其添加到Scrapy的日志配置中。這樣,Scrapy就會(huì)將日志信息輸出到指定的文件myspider.log中。
請(qǐng)注意,為了正確實(shí)現(xiàn)自定義日志處理器,你需要根據(jù)具體的Scrapy版本和Python版本進(jìn)行適當(dāng)?shù)恼{(diào)整。上述代碼僅作為示例,實(shí)際使用時(shí)可能需要根據(jù)具體情況進(jìn)行修改。
三、Scrapy日志級(jí)別詳解
1、Scrapy支持的日志級(jí)別及其含義
Scrapy支持的日志級(jí)別及其含義如下:
●CRITICAL - 嚴(yán)重錯(cuò)誤:這個(gè)級(jí)別用于記錄系統(tǒng)中出現(xiàn)的嚴(yán)重錯(cuò)誤,這些錯(cuò)誤通常導(dǎo)致程序無(wú)法繼續(xù)運(yùn)行或需要立即關(guān)注。
●ERROR - 一般錯(cuò)誤:記錄系統(tǒng)運(yùn)行時(shí)遇到的錯(cuò)誤情況,但這些問(wèn)題通常不會(huì)導(dǎo)致程序立即停止運(yùn)行。
●WARNING - 警告信息:表示可能出現(xiàn)問(wèn)題的情況,但這些問(wèn)題不一定是錯(cuò)誤,只是需要開(kāi)發(fā)者的注意。
●INFO - 一般信息:記錄程序運(yùn)行時(shí)的常規(guī)信息,如啟動(dòng)、關(guān)閉、任務(wù)進(jìn)度等。
●DEBUG - 調(diào)試信息:包含最詳細(xì)的程序運(yùn)行信息,通常用于開(kāi)發(fā)或調(diào)試過(guò)程中,幫助開(kāi)發(fā)者理解程序內(nèi)部的運(yùn)行情況。
在Scrapy中,默認(rèn)的日志級(jí)別是DEBUG,這意味著所有DEBUG級(jí)別及以上的日志信息都會(huì)被記錄。如果你只想看到ERROR級(jí)別或更高級(jí)別的日志信息,可以在Scrapy項(xiàng)目的settings.py文件中設(shè)置LOG_LEVEL = 'ERROR'。
此外,你也可以通過(guò)終端選項(xiàng)-loglevel/-L來(lái)設(shè)置日志級(jí)別。不同的日志級(jí)別可以幫助開(kāi)發(fā)者根據(jù)需求快速定位問(wèn)題,或者獲取不同詳細(xì)程度的程序運(yùn)行信息。
2、日志級(jí)別的實(shí)際應(yīng)用場(chǎng)景舉例
DEBUG級(jí)別:在開(kāi)發(fā)或調(diào)試Scrapy爬蟲(chóng)時(shí),將日志級(jí)別設(shè)置為DEBUG是非常有用的。DEBUG級(jí)別會(huì)記錄最詳細(xì)的程序運(yùn)行信息,包括請(qǐng)求和響應(yīng)的詳細(xì)信息、解析過(guò)程中的每一步操作等。這些信息有助于開(kāi)發(fā)者深入了解爬蟲(chóng)的內(nèi)部運(yùn)行情況,發(fā)現(xiàn)并解決潛在的問(wèn)題。
INFO級(jí)別:當(dāng)爬蟲(chóng)開(kāi)發(fā)完成后,進(jìn)入測(cè)試或生產(chǎn)環(huán)境時(shí),可以將日志級(jí)別設(shè)置為INFO。INFO級(jí)別會(huì)記錄程序運(yùn)行時(shí)的常規(guī)信息,如啟動(dòng)、關(guān)閉、任務(wù)進(jìn)度等。這些信息可以幫助監(jiān)控爬蟲(chóng)的運(yùn)行狀態(tài),確保它按預(yù)期執(zhí)行。
WARNING級(jí)別:在某些情況下,開(kāi)發(fā)者可能只關(guān)心可能出現(xiàn)問(wèn)題的情況,但不希望被過(guò)多的日志信息所干擾。此時(shí),可以將日志級(jí)別設(shè)置為WARNING。WARNING級(jí)別會(huì)記錄那些可能導(dǎo)致問(wèn)題的操作或情況,但不會(huì)記錄過(guò)多的細(xì)節(jié)信息。
ERROR級(jí)別:當(dāng)爬蟲(chóng)在生產(chǎn)環(huán)境中運(yùn)行時(shí),開(kāi)發(fā)者通常只關(guān)心出現(xiàn)的錯(cuò)誤情況。此時(shí),可以將日志級(jí)別設(shè)置為ERROR。ERROR級(jí)別只會(huì)記錄程序運(yùn)行時(shí)遇到的錯(cuò)誤情況,幫助開(kāi)發(fā)者快速定位并解決問(wèn)題。
通過(guò)合理設(shè)置日志級(jí)別,開(kāi)發(fā)者可以根據(jù)不同階段的需求,獲取適當(dāng)詳細(xì)程度的程序運(yùn)行信息,從而更好地管理和維護(hù)Scrapy爬蟲(chóng)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-859933.html
轉(zhuǎn)載請(qǐng)注明出處:https://guangzai.blog.csdn.net/article/details/138247107文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-859933.html
到了這里,關(guān)于【Python從入門(mén)到進(jìn)階】53、Scrapy日志信息及日志級(jí)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!