Wie führe ich Scrapy Splash auf einer virtuellen Maschine mit Linux aus? Im Wesentlichen habe ich ein Lua-Skript, das von mir verlangt, Schlüssel an eine Site zu senden, um mich anzumelden und sie dann zu scrapen.
Ich habe Docker installiert, aber ich schaffe es nicht, den Scraper zum Laufen zu bringen, da er keine Verbindung zum Server herstellt.
Gibt es einfache Schritte, die ich befolgen kann, damit dies auf einer VM funktioniert? Zum Beispiel, was soll ich installieren und was soll ich als Nächstes tun, bevor ich es ausführe scrapy crawl spider
.
Was Docker betrifft, habe ich im Administratormodus Folgendes implementiert:
docker run -p 8050:8050 scrapinghub/splash --max-timeout 3600
Allerdings läuft es gerade und ich möchte, dass es im Hintergrund läuft. Ich kann das nicht herausfinden. Ich habe Folgendes versucht:
docker run -d 8050:8050 scrapinghub/splash --max-timeout 3600
Aber ich bekomme nur die Fehlermeldung:
Unable to find image '8050:8050' locally
Ich glaube, das könnte mein Problem lösen, vielleicht aber auch nicht, und ich brauche noch einige weitere Installationen. Bitte lassen Sie es mich wissen! Ich brauche wirklich fachkundige Anleitung, um das herauszufinden.
Ich habe eine weitere Instanz geöffnet, während Docker auf der ersten Instanz lief.
Beim Ausführen des Scrapy-Crawlers wird folgende Fehlermeldung angezeigt:
2022-02-16 02:55:26 [scrapy_splash.middleware] WARNING: Bad request to Splash: {'error': 400, 'type': 'ScriptError', 'description': 'Error happened while executing Lua script', 'info':
{'type': 'JS_ERROR', 'js_error_type': 'TypeError', 'js_error_message': 'null is not an object (evaluating \'document.querySelector("button:nth-child(2)").getClientRects\')', 'js_error':
'TypeError: null is not an object (evaluating \'document.querySelector("button:nth-child(2)").getClientRects\')', 'message': '[string "..."]:12: error during JS function call: \'TypeEr
ror: null is not an object (evaluating \\\'document.querySelector("button:nth-child(2)").getClientRects\\\')\'', 'source': '[string "..."]', 'line_number': 12, 'error': 'error during JS
function call: \'TypeError: null is not an object (evaluating \\\'document.querySelector("button:nth-child(2)").getClientRects\\\')\''}}
2022-02-16 02:55:26 [scrapy.core.engine] DEBUG: Crawled (400) <GET http://instagram.com/ via http://localhost:8050/execute> (referer: None)
2022-02-16 02:55:26 [scrapy.spidermiddlewares.httperror] INFO: Ignoring response <400 http://instagram.com/>: HTTP status code is not handled or not allowed
Der Scraper funktioniert auf meinem Mac einwandfrei, es muss also definitiv irgendwo eine Installation fehlen, die ich installiert habe.
Antwort1
Sie müssten den folgenden docker
Befehl verwenden:
docker run -d -p 8050:8050 scrapinghub/splash --max-timeout 3600
Sie haben den -p
Parameter für die Portweiterleitung vergessen, sodass Docker davon ausgeht, dass dies 8050:8050
der Name des Images ist, das Sie ausführen möchten.
Ich habe noch nie von Scrapy gehört, aber das ist ein ziemlich grundlegender Fehler, kein Grund fürfachkundige Beratung;)
Was die Frage „Wie führe ich x aus?“ betrifft, so lautet diese Frage im Allgemeinenvielzu vage für eine QA-Website wie SuperUser. Ich würde empfehlen, dass Sie das oben genannte versuchen und für alle weiteren Fehler, die auftreten, separate Fragen erstellen.