2016-08-08 3 views
0

ich scrapy bin mit, in meinem scrapy Projekt, habe ich mehrere Spinnen Klassen erstellt, wie das offizielle Dokument, sagte ich auf diese Weise können Sie angeben, Dateinamen einloggen:Wie wird der Name der Protokolldatei mit dem Namen der Spinne in scrapy angegeben?

def logging_to_file(file_name): 
""" 
@rtype: logging 
@type file_name:str 
@param file_name: 
@return: 
""" 
import logging 
from scrapy.utils.log import configure_logging 
configure_logging(install_root_handler=False) 
logging.basicConfig(
    filename=filename+'.txt', 
    filemode='a', 
    format='%(levelname)s: %(message)s', 
    level=logging.DEBUG, 

) 
Class Spider_One(scrapy.Spider): 
     name='xxx1' 
     logging_to_file(name) 
    ...... 
Class Spider_Two(scrapy.Spider): 
     name='xxx2' 
     logging_to_file(name) 
    ...... 

Nun, wenn ich Spider_One beginnen, alles ist korrekt! Aber, wenn ich Spider Two starte, wird die Protokolldatei von Spider Two auch mit dem Namen Spider One benannt!
Ich habe viele Antworten von Google und Stackoverflow gesucht, aber leider hat keiner funktioniert!
Ich benutze Python 2.7 & Scrapy 1.1!
Hoffe, dass mir jemand helfen kann!

Antwort

1

Es ist weil Sie logging_to_file jedes Mal initiieren, wenn Sie Ihr Paket laden. Sie verwenden hier eine Klassenvariable, in der Sie die Instanzvariable verwenden sollen.

Wenn Python in Ihr Paket oder Modul geladen wird, lädt jede Klasse und so weiter. nur bewegen logging_to_file Funktion aufrufen, um Ihre Spinnen __init__() Methode

class MyClass: 
    # everything you do here is loaded everytime when package is loaded 
    name = 'something' 

    def __init__(self): 
     # everything you do here is loaded ONLY when the object is created 
     # using this class 

Ihr Problem zu beheben.

class MyClass(Spider): 
    name = 'xx1' 

    def __init__(self): 
     super(MyClass, self).__init__() 
     logging_to_file(self.name) 
+0

Vielen Dank für Ihre Antwort! Ich habe versucht, 'logging_to_file' Funktion jedes Spinnen' __init__' Verfahren gestern bewegen, aber wenn ich so tat, Protokolldatei nicht erstellt werden. – nick

+0

@nick wie läuft dir deine Spinne? Es gibt keine Möglichkeit 'logging_to_file' von anderen Spidern zu erreichen, wenn Sie mit' scrapy crawl spider_name' laufen. – Granitosaurus

+0

Ja, ich habe wirklich den Befehl 'scrapy crawl spider_name' benutzt um meine Spinne zu starten !! @ Granitosaurus – nick

Verwandte Themen