0

スクレイピーをバージョン 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 では機能しません。「スクレイピー クロールの 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)

プロセスを手動で終了する必要があります。

4

1 に答える 1

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

ただし、スパイダーが開かれた後にメッセージが表示されます。スパイダーごとに 1 つのクローラー インスタンスのみを使用する場合は、ログ ファイルを引数として設定できます。

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

そうすれば、すべてのログ メッセージを取得でき、拡張子は必要ありません。

于 2013-10-14T13:12:00.720 に答える