如何在Linux虛擬機器上運行scrapysplash?本質上,我有一個 lua 腳本,需要我將密鑰發送到網站以登錄,然後抓取它。
我已經安裝了 docker,但是我似乎無法讓 scraper 工作,因為它無法連接到伺服器。
我可以遵循任何簡單的步驟來使其在虛擬機器上運行嗎?例如我應該安裝什麼,以及在運行之前我下一步該做什麼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 網站來說太模糊了。我建議您嘗試上述方法,如果您遇到任何後續錯誤,請為他們提出單獨的問題。