Scrapy aus einer Django-Ansicht starten

8

Meine Erfahrung mit Scrapy ist begrenzt, und jedes Mal, wenn ich es benutze, geschieht es immer durch die Befehle des Terminals. Wie kann ich meine Formulardaten (eine URL, die abgekratzt werden soll) von meiner Django-Vorlage erhalten, um mit Scrapy zu kommunizieren, um mit dem Scraping zu beginnen? Bisher habe ich nur daran gedacht, die zurückgegebenen Daten des Formulars aus den Ansichten von django zu erhalten und dann in das spider.py im scrapy-Verzeichnis zu gelangen, um die URL der Formulardaten zu den start_urls der Spinne hinzuzufügen. Von da an weiß ich nicht wirklich, wie ich das eigentliche Crawlen auslösen soll, da ich es gewohnt bin, es ausschließlich über mein Terminal mit Befehlen wie "scrapy crawl dmoz" zu machen. Danke.

tiny edit: Gerade entdeckt Scrapyd ... Ich denke, dass ich damit in die richtige Richtung gehe.

    
pyramidface 14.11.2014, 02:20
quelle

1 Antwort

9

Sie haben es tatsächlich mit einer Bearbeitung beantwortet. Die beste Option wäre, scrapyd service einzurichten und einen API-Aufruf an schedule.json , um einen auszuführenden Scraping-Job auszulösen.

Um diesen Aufruf der API http zu machen, können Sie entweder urllib2 / requests verwenden oder einen Wrapper um scrapyd API verwenden - python-scrapyd-api :

%Vor%

Wenn wir scrapyd beiseite legen und versuchen run die Spinne aus der Sicht , wird sie die Anfrage blockieren bis der verdrehte Reaktor stoppt - daher ist es nicht wirklich eine Option.

Sie können jedoch celery (zusammen mit django_celery ) - definiere eine Aufgabe, die deine Scrapy-Spinne ausführen und die Aufgabe aus deiner Django-Sicht aufrufen würde. Auf diese Weise würden Sie die Aufgabe in die Warteschlange stellen und einen Benutzer nicht darauf warten lassen, dass der Crawler beendet wird.

Sehen Sie sich auch das Paket django-dynamic-scraper an:

  

Django Dynamic Scraper (DDS) ist eine App für Django auf der Oberseite des   Kratzrahmen Scrapy. Während viele der Funktionen von   Mit Scrapy können Sie dynamisch Spinnen über die   Django Admin-Schnittstelle.

    
alecxe 14.11.2014, 02:48
quelle

Tags und Links