2016-03-03 8 views
7

Ich habe viele Scrapy Spinnen, die parallel mit Scrapyd laufen. Was ich mache ist so etwas wie der folgende Code.Running Selen kopflos mit mehreren Spinnen

Meine Frage ist, muss ich wirklich eine Anzeige für jede Spinne starten und wie weiß der Fahrer, welches Display zu verwenden? Sollte ich nur eine Anzeige global starten und mehrere Webdriver-Instanzen innerhalb derselben Anzeige starten?

def __init__(self): 
    dispatcher.connect(self.spider_closed, signals.spider_closed) 

def spider_closed(self, spider): 
    if self.driver: 
     self.driver.quit() 

    if self.display: 
     self.display.stop() 

def parse(self, response): 
    self.display = Display(visible=0, size=(1024, 768)) 
    self.display.start() 
    self.driver = webdriver.Firefox() 

    self.driver.get(response.url) 
    page = Selector(text=self.driver.page_source) 

    # doing all parsing etc 

Antwort

3

Ich empfehle stattdessen die splinter Browser-Handler; es ist eine Hülle um Selen. Es löst Ihr Problem genau, da die Display-Bedienung vom Paket erledigt wird.

Mit ein paar mehr Paketinstallationen, können Sie auch die Notwendigkeit für ein Display insgesamt entfernen, dh Splitter ist jetzt kopflos (das Browserfenster öffnet sich nicht, und es ist viel schneller). Schauen Sie sich die Splinter docs an, um zu wissen, wie man kopflos macht. Ich persönlich empfehle den PhantomJS-Treiber, obwohl Sie das nicht-Python PhantomJS-Programm installieren müssen.