가상 머신에서 scrapy Splash를 실행하는 방법

가상 머신에서 scrapy Splash를 실행하는 방법

Linux를 사용하는 가상 머신에서 scrapy Splash를 어떻게 실행합니까? 기본적으로 로그인하기 위해 사이트에 키를 보낸 다음 이를 긁어내도록 요구하는 lua 스크립트가 있습니다.

도커를 설치했지만 서버에 연결되지 않아 스크레이퍼가 작동하지 않는 것 같습니다.

VM에서 이 작업을 수행하기 위해 따를 수 있는 간단한 단계가 있습니까? 무엇을 설치해야 하는지, 실행하기 전에 다음에 무엇을 해야 하는지 등이 있습니다 scrapy crawl spider.

docker의 경우 관리 모드에서 다음을 구현했습니다.

docker run -p 8050:8050 scrapinghub/splash --max-timeout 3600

그러나 이것은 현재 실행 중이므로 백그라운드에서 실행하고 싶습니다. 나는 이것을 알아낼 수 없는 것 같습니다. 나는 시도했다:

docker run -d 8050:8050 scrapinghub/splash --max-timeout 3600

하지만 오류가 발생합니다.

Unable to find image '8050:8050' locally

나는 이것이 내 문제를 해결할 수도 있고 아닐 수도 있다고 생각하며 추가 설치가 필요합니다. 알려주세요! 이 문제를 해결하려면 전문가의 지도가 정말 필요합니다.

docker가 첫 번째 인스턴스에서 실행되는 동안 다른 인스턴스를 열었습니다.

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

스크레이퍼는 내 Mac에서 완벽하게 작동하므로 어딘가에 누락된 설치가 분명히 있습니다.

답변1

다음 명령을 사용해야 합니다 docker.

docker run -d -p 8050:8050 scrapinghub/splash --max-timeout 3600

-p포트 전달에 대한 매개변수를 잊어버렸기 때문에 docker는 이를 8050:8050실행하려는 이미지의 이름으로 가정합니다.


나는 scrapy에 대해 들어본 적도 없지만 이것은 매우 기본적인 오류이므로 필요하지 않습니다.전문가의 지도;)

"x를 어떻게 실행하나요?"에 관해서요. 일반적으로 이 질문은많이SuperUser와 같은 QA 웹사이트에는 너무 모호합니다. 위의 내용을 시도해 보고 이후에 오류가 발생하면 별도의 질문을 작성하는 것이 좋습니다.

관련 정보