Frage

Ich mag einen Web-Crawler bauen basierend auf Scrapy zu greifen Nachrichten Bilder von mehrere Nachrichtenportal Website. Ich mag diesen Crawler sein:

  1. Ausführen immer

    bedeutet, dass es periodische einige Portalseiten wieder besuchen Updates zu erhalten.

  2. Zeitplan Prioritäten.

    Geben Sie unterschiedliche Prioritäten für verschiedene Arten von URLs.

  3. Multi-Thread fetch

Ich habe das Scrapy Dokument gelesen habe, aber nicht etwas im Zusammenhang mit gefunden, was ich aufgeführt (vielleicht bin ich nicht vorsichtig genug). Gibt es hier jemand wissen, wie das zu tun? oder einfach nur eine Idee / example darüber geben. Dank!

War es hilfreich?

Lösung

Scrapy ist ein Framework für die Spidern von Websites, die als solche beabsichtigt ist, Ihren Kriterien zu unterstützen, aber es ist nicht für Sie gehen zu tanzen aus der Box; Sie werden wahrscheinlich relativ vertraut mit dem Modul für einige Aufgaben zu bekommen.

  1. für immer zu betreiben ist, um Ihre Anwendung, die Scrapy aufruft. Sie sagen die Spinnen , wohin sie gehen, und wenn es zu gehen.
  2. Prioritäten zu geben, ist die Aufgabe von Scheduler Middleware , die Sie haben würden erstellen und Stecker in Scrapy. Die Dokumentation zu diesem Thema erscheint fleckig und ich habe nicht den Code sieht -. Im Prinzip die Funktion gibt es
  3. Scrapy von Natur aus ist, grundsätzlich asynchron , die gut sein kann was Sie wünschen: kann Anfrage B erfüllt werden, während Anfrage A noch aussteht. Die zugrunde liegende Verbindung Motor nicht daran hindert, die Sie von bona fide Multi-Threading, aber Scrapy bietet keine Dienste Threading.

ist Scrapy eine Bibliothek, keine Anwendung. Es ist eine nicht-triviale Menge an Arbeit (Code), dass ein Benutzer des Moduls Bedürfnisses zu machen.

Andere Tipps

über die Anforderung an Einlaufen für immer, hier einige Details.

Sie müssen das signals.spider_idle Signal, und in Ihrer Methode zu fangen, dass verbunden mit dem Signal, benötigen Sie eine DontCloseSpider Ausnahme zu erhöhen. Das spider_idle Signal wird an den Motor gesendet, wenn Scrapy keine anhängigen Anforderungen gibt, und standardmäßig die Spinne wird heruntergefahren. Sie können diesen Vorgang abfangen.

Siehe Codes Schlag:

import scrapy
from scrapy.exceptions import DontCloseSpider
from scrapy.xlib.pydispatch import dispatcher

class FooSpider(scrapy.Spider):
    def __init__(self, *args, **kwargs):
        super(FooSpider, self).__init__(*args, **kwargs)
        dispatcher.connect(self.spider_idle, signals.spider_idle)

    def spider_idle(self):
        #you can revisit your portal urls in this method
        raise DontCloseSpider 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top