2016-03-23 3 views
1

Ich möchte einen Scrapy-Crawl aus einer Django-Ansicht starten (ich weiß, dass es blockieren wird, es ist keine Sorge, ich werde es später mit Futures oder so behandeln) UND ich möchte die aus diesem Crawling resultierenden Scrapy-Items wiederherstellen (und Sachen mit ihnen machen).gecrawlte Scrapy-Objekte in einer Django-Ansicht erhalten

Ich möchte nicht, dass sie in meinem db gespeichert werden (das ist, was Dinge wie scrapy-djangoitem tun), sie sind nicht da, um zu bleiben.

Im Moment benutze ich scrapy.crawler.CrawlerProcess, um den Crawl aus dem Inneren von Django zu starten und ich denke, Signale (wie scrapy.signals.item_scraped vielleicht?) Könnten der Weg sein, aber ich verstehe nicht wie um all das zusammen zu bringen.

Antwort

1

Ich schlage vor, dass Sie den Crawl aus Django auslagern und ihn als einen anderen JSON-Dienst behalten, an dem Ihre Webanwendung arbeitet - wahrscheinlich mit einer höheren maximalen Zeitüberschreitung als bei normalen Anrufen.

Es gibt drei Möglichkeiten, wie Sie diesen Ansatz könnten:

  1. Verwendung so etwas wie ScrapyRT und haben Ihre Django App Anfrage Sie die URL auf die Spinne Server setzen.
  2. Lassen Sie Django auf eine SQLite-Datenbank zugreifen, in der die Scrapy-Spider so konfiguriert sind, dass sie die Daten löschen und Ihre Spider auf einem scrapyd-Server bereitstellen.
  3. Führen Sie Ihre Spinnen auf Scrapinghub Scrapy Cloud. Gibt Ihnen das gleiche wie # 2, aber Sie können die Daten auch abrufen, indem Sie den Endpunkt des Elements in der API aufrufen.
+0

Ich denke, ich werde am Ende mit ScrapyRT (beantworten mein Bedürfnis nach Echtzeit und ich bekomme Artikel in JSON), danke für den Rat :) – CarloDePieri

Verwandte Themen