Wie integriere ich Flask & Scrapy?

9

Ich benutze scrapy, um Daten zu erhalten, und ich möchte flash web framework verwenden, um die Ergebnisse in der Webseite anzuzeigen. Aber ich weiß nicht, wie man die Spinnen in der Flaschen-App nennt. Ich habe versucht, CrawlerProcess zu verwenden, um meine Spider aufzurufen, aber ich habe den folgenden Fehler erhalten:

%Vor%

Mein scrapy Code wie folgt:

%Vor%

Mein flaschen Code wie folgt:

%Vor%

Wie kann ich meine scrapy Spinnen nennen, wenn Sie flash web framework benutzen?

    
Coding_Rabbit 03.04.2016, 10:25
quelle

2 Antworten

17

Das Hinzufügen eines HTTP-Servers vor Ihren Spinnen ist nicht so einfach. Es gibt einige Optionen.

1. Python-Subprozess

Wenn Sie wirklich auf Flask beschränkt sind, können Sie Scrapy mit Flask nur integrieren, indem Sie für jeden Spider-Crawl einen externen Prozess starten, wie es die andere Antwort empfiehlt (beachten Sie, dass Ihr Subprozess erzeugt werden muss) Scrapy-Projektverzeichnis).

Die Verzeichnisstruktur für alle Beispiele sollte folgendermaßen aussehen: Ich verwende das dirbot-Testprojekt

%Vor%

Hier ist ein Codebeispiel, um Scrapy in einem neuen Prozess zu starten:

%Vor%

Speichern Sie oben als server.py und besuchen Sie localhost: 5000, Sie sollten in der Lage sein, Elemente zu sehen, die geschabt wurden.

2. Twisted-Klein + Scrapy

Ein anderer, besserer Weg besteht darin, ein bestehendes Projekt zu verwenden, das Twisted mit Werkzeug integriert und API ähnlich wie Flask, z. Twisted-Klein . Twisted-Klein ermöglicht es Ihnen, Ihre Spider asynchron im gleichen Prozess wie Ihren Webserver auszuführen. Es ist besser, dass es nicht bei jeder Anfrage blockiert und erlaubt es Ihnen, einfach Scrapy / Twisted Deferred vom HTTP Route Request Handler zurückzugeben.

Im folgenden Snippet ist Twisted-Klein mit Scrapy integriert. Beachten Sie, dass Sie eine eigene Basisklasse von CrawlerRunner erstellen müssen, damit der Crawler Objekte sammelt und an den Aufrufer zurückgibt. Diese Option ist etwas weiter fortgeschritten, Sie führen Scrapy-Spider in demselben Prozess wie Python-Server, Elemente werden nicht in der Datei gespeichert, sondern im Speicher gespeichert (es gibt also kein Schreiben / Lesen wie im vorherigen Beispiel). Das Wichtigste ist, dass es asynchron ist und alles in einem Twisted-Reaktor läuft.

%Vor%

Speichern Sie oben in der Datei server.py und suchen Sie es in Ihrem Scrapy-Projektverzeichnis. Jetzt öffnen Sie localhost: 8080, es wird dmoz Spider starten und Artikel als json zum Browser scracken.

3. ScrapyRT

Beim Versuch, eine HTTP-App vor Ihren Spidern hinzuzufügen, treten einige Probleme auf. Zum Beispiel müssen Sie manchmal Spider-Logs behandeln (in einigen Fällen benötigen Sie sie), Sie müssen Spider-Exceptions irgendwie behandeln usw. Es gibt Projekte, mit denen Sie HTTP-API auf einfachere Weise zu Spidern hinzufügen können, z. ScrapyRT . Dies ist eine App, die Ihren Scrapy-Spidern einen HTTP-Server hinzufügt und alle Ihre Probleme behandelt (z. B. Protokollierung, Spider-Fehler usw.).

Nach der Installation von ScrapyRT müssen Sie lediglich Folgendes tun:

%Vor%

in Ihrem Scrapy-Projektverzeichnis, und es startet den HTTP-Server, der auf Anfragen für Sie wartet. Dann besuchst du Ссылка und es sollte deine Crawler URL für dich öffnen gegeben.

Disclaimer: Ich bin einer der Autoren von ScrapyRt.

    
Pawel Miech 17.05.2016 08:04
quelle
1

Dies funktioniert nur, wenn Sie einen Crawler eigenständig verwenden. Wie wäre es mit dem subprocess Modul mit subprocess.call ().

Ich habe deine Spinne folgendermaßen verändert und es hat funktioniert. Ich habe keine Datenbankeinstellungen, daher wurden diese Zeilen auskommentiert.

%Vor%

Sie sollten in der Lage sein, das oben genannte auszuführen:

%Vor%     
pgwalsh 04.04.2016 13:41
quelle

Tags und Links