2013-10-13 51 views
0

我升級我scrapy到0.18.4版本,但我發現以前的腳本來設置單獨的日誌文件中的每個蜘蛛現在無法正常工作。個人日誌文件*

#spider/toy_spider.py 
def __init__(self,name=None,**kwargs): 
    LOG_FILE = "log/production_%s.log" % (self.name) 
    log.log.defaultObserver = log.log.DefaultObserver() 
    log.log.defaultObserver.start() 
    log.started = False 
    log.start(LOG_FILE) 
    super(MySpider, self).__init__(name, **kwargs) 

它適用於scrapy 0.14.4,但不適用於0.18.4。當我運行「scrapy爬行toy_spider」,這似乎是在一些無限循環和消息的樣子:

2013-10-12 19:14:49-0500 [-] ERROR: 2013-10-12 19:14:49-0500 [-] ERROR: 2013-10-12 19:14:49-0500 [-] ERROR: 2013-10-12 19:14:49-0500 [-] ERROR: 2013-10-12 19:14:49-0500 [-] ERROR: 2013-10-12 19:14:49-0500 [PopAppAnnie4Itune] INFO: Crawled 0 pages (at 0 pages/min), scraped 0 items (at 0 items/min) 

我必須手動終止進程。

回答

1

該錯誤很可能是由於log.start()的雙重執行引起的。使用分機連接spider_opened信號並在那裏執行日誌設置。

喜歡的東西:

from twisted.python.log import FileLogObserver 
from scrapy import signals 


class SpiderLog(object): 

    @classmethod 
    def from_crawler(cls, crawler): 
     obj = cls() 
     crawler.signals.connect(obj.setup_logfile, signal=signals.spider_opened) 
     return obj 

    def setup_logfile(self, spider): 
     logfile = 'log/production_%s.log' % spider.name 
     fl = FileLogObserver(open(logfile, 'w+')) 
     fl.start() 

如果你的項目被稱爲mybot,那麼這段代碼保存在文件mybot/extensions.py英寸要啓用擴展此行添加到您的settings.py

EXTENSIONS = { 
    'mybot.extensions.SpiderLog': 100, 
} 

但蜘蛛被打開後,你會得到的消息。如果你只蜘蛛每使用一個履帶式的實例,那麼你可以將日誌文件作爲參數:

scrapy crawl myspider --set LOG_FILE=log/production_myspider.log 

這樣一來,你會得到所有的日誌消息,不需要擴展。

+0

感謝您的回答。 '--set LOG_FILE ='現在可以完成這項工作。出於好奇,我怎麼才能讓擴展工作? – Arnold

+0

對,我已經用相關設置更新了答案以啓用擴展。 – Rolando