2014-11-14 10 views
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. Vielen Dank.Starten von Scrapy aus einer Django-Ansicht

winzige edit: Gerade entdeckt Scrapyd ... Ich denke, dass ich damit in die richtige Richtung gehen kann.

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 vorzunehmen, um einen auszuführenden Scraping-Job auszulösen.

Um diesen API http Anruf zu tätigen, entweder Sie urllib2/requests, oder verwenden Sie einen Wrapper um scrapyd API verwenden - python-scrapyd-api:

from scrapyd_api import ScrapydAPI 

scrapyd = ScrapydAPI('http://localhost:6800') 
scrapyd.schedule('project_name', 'spider_name') 

Wenn wir beiseite scrapyd setzen und versuchen, run the spider from the view, es wird blockieren die Anfrage bis der verdrehte Reaktor stoppen würde - daher ist es nicht wirklich eine Option.

Sie können jedoch celery (zusammen mit django_celery) verwenden - Definieren Sie eine Aufgabe, die Ihre Scrapy-Spinne ausführen und die Aufgabe aus Ihrer Django-Ansicht aufrufen würde. Auf diese Weise würden Sie die Aufgabe auf die Warteschlange setzen und würde keinen Benutzer warten auf Crawling beendet werden.


Werfen Sie auch einen Blick auf die django-dynamic-scraper Paket:

Django Dynamische Scraper (DDS) ist eine App für Django auf dem Scrapy Schaben Rahmen bauen. Während Sie viele der Funktionen von Scrapy beibehalten, können Sie dynamisch über die Django Admin-Oberfläche Spider erstellen und verwalten.

+0

Würdest du etwas darüber wissen, wie man die Dateistruktur von Scrapy innerhalb eines Django-Projekts tatsächlich einrichtet? Kann ich einfach meinen Scrapy-Ordner in meinen Django-Projektordner legen? Oder ist da mehr dran? Vielen Dank. – pyramidface

+0

Auch würde Scrapyd nicht das gleiche wie Sellerie in Bezug auf die asynchrone Handhabung der Crawl tun? – pyramidface

+0

@pyramidface spricht über die Projektstruktur - Ich habe Django und Scrapy nie persönlich in einem einzigen Projekt kombiniert, aber beide Produkte ausgiebig genutzt - versuchen Sie, 'Django-dynamic-scraper' zu betrachten und die Beispiele, die es genau hat - könnten Sie sein Sie erhalten eine Idee, wie Sie beide Tools in einem Projekt kombinieren können. Oder starte eine neue SO-Frage, aber sei vorsichtig, um es konstruktiv zu machen. – alecxe

Verwandte Themen