¿Cómo ejecuto scrapy splash en una máquina virtual con Linux? Esencialmente, tengo un script lua que requiere que envíe claves a un sitio para iniciar sesión y luego extraerlo.
He instalado Docker, pero parece que no puedo hacer que el raspador funcione porque no se conecta al servidor.
¿Hay algún paso sencillo que pueda seguir para que esto funcione en una máquina virtual? Por ejemplo, ¿qué debo instalar y qué debo hacer a continuación antes de ejecutar scrapy crawl spider
?
En cuanto a Docker, implementé lo siguiente mientras estaba en modo administrador:
docker run -p 8050:8050 scrapinghub/splash --max-timeout 3600
Sin embargo, esto se está ejecutando actualmente y me gustaría que se ejecute en segundo plano. Parece que no puedo entender esto; Yo he tratado:
docker run -d 8050:8050 scrapinghub/splash --max-timeout 3600
Pero me sale el error:
Unable to find image '8050:8050' locally
Creo que esto puede resolver mi problema o tal vez no y necesito más instalaciones. ¡Por favor hágamelo saber! Realmente necesito orientación experta para resolver esto.
Abrí otra instancia mientras Docker se ejecutaba en la primera instancia.
Recibo el siguiente error al ejecutar el rastreador scrapy:
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
El raspador funciona perfectamente bien en mi Mac, por lo que definitivamente me falta una instalación en alguna parte.
Respuesta1
Tendrías que usar el siguiente docker
comando:
docker run -d -p 8050:8050 scrapinghub/splash --max-timeout 3600
Olvidó el -p
parámetro para el reenvío de puertos, lo que provocó que Docker suponga que ese 8050:8050
es el nombre de la imagen que está intentando ejecutar.
Nunca he oído hablar de scrapy, pero este es un error bastante básico, no es necesarioorientación experta;)
En cuanto a "¿Cómo ejecuto x?". generalmente esta pregunta esmuchoDemasiado vago para un sitio web de control de calidad como SuperUser. Le recomiendo que pruebe lo anterior y que, ante cualquier error posterior que encuentre, le haga preguntas por separado.