如何在虛擬機器上運行 scrapysplash

如何在虛擬機器上運行 scrapysplash

如何在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 網站來說太模糊了。我建議您嘗試上述方法,如果您遇到任何後續錯誤,請為他們提出單獨的問題。

相關內容