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 웹사이트에는 너무 모호합니다. 위의 내용을 시도해 보고 이후에 오류가 발생하면 별도의 질문을 작성하는 것이 좋습니다.