仮想マシンでスクレイピースプラッシュを実行する方法

仮想マシンでスクレイピースプラッシュを実行する方法

Linux の仮想マシンで scrapy splash を実行するにはどうすればよいですか? 基本的に、ログインしてスクレイピングするためにサイトにキーを送信する必要がある lua スクリプトがあります。

docker をインストールしましたが、サーバーに接続できないため、スクレーパーが動作しないようです。

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それが実行しようとしているイメージの名前であると想定します。


私はスクレイピーについて聞いたことがありませんでしたが、これはかなり基本的なエラーなので、専門家の指導;)

「xを実行するにはどうすればいいですか?」という質問については、一般的にこの質問は多くのSuperUser のような QA ウェブサイトには漠然としすぎています。上記を試してみて、その後エラーが発生した場合は、それに対して別の質問を作成することをお勧めします。

関連情報