久しぶりの更新がこれかよですが、何かの約に立つかなと。
目的:
とあるサイトへのスクレイピング。
pythonはほぼ初めてだったが、まぁスクレイピングくらいならそれほど難しくはないですね。
やったこと:
とあるサイトにヘッドレスchromeで接続し、CSVをダウンロードする、というものです。
とりあえずEC2立ち上げ。
これは特に凝ったことはせず、とりあえずAmazonLinuxなインスタンスを立ち上げ。
ec2-userでログインしたら、以下実行。
※python3、pip3はデフォルトで入っているので、省略です。
確認は
もし無かったら
pip3の確認は
ここからが本番。seleniumをインストール。
pip3 install Selenium
確認
pip3 show selenium
rpm -qa | grep google-chrome
または
google-chrome –version
下記のサイトからgoogle-chromeをインストールした際のバージョンに合うChromeを選択する
wget https://chromedriver.storage.googleapis.com/105.0.5195.52/chromedriver_linux64.zip
unzip chromedriver_linux64.zip
sudo mv chromedriver /usr/bin/chromedriver
確認
chromedriver –version
と、ここまでで環境は整うのだが、今回は以下も必要だったので入れました。
pip3 install requests
pip3 install scp
pip3 install paramiko
で、ここで単純に「rootでいいだろう」とsudoとかしてインストールすると、「rootでインストールするのはおススメしないぜ。」的な警告が出ます。
まぁおススメしないだけで動くんだろ!と思いながらテストしていたんですが、
「DevToolsActivePort file doesn’t exist」
のエラーが。
調べてみるとoptionを付けろだとか、書いてあるんですが何をやっても改善せず。
なんだか人によって環境によって対応策が異なり、ある人はこれでOKだったがある人は何やってもダメみたいなカオスが繰り広げられてました。
解決した人もいれば、いない人もいるような感じ。
で、私も全く原因が分からず数時間。
ただ、なぜかもう一つ同じ環境を作って、そこで実行するとうまく動くのです。
ただ上記のインストールを同じようにしただけなのに!
で、いろいろやっていたんですが結果、上記pip3でインストールした3つのモジュール?をrootで入れてしまうとエラーになるようでした。
これ、uninstallして再度installしてもダメでした。
何か順番的な影響があったんでしょうか。
当然、ec2-userでインストールしてから自分のuserをaddしたりしてpip3でインストールしたのと他のユーザーで実行しても同様。
何か設定をchromeのdriverが持ってしまうのでしょうか。
なので、selenium+chromeでスクレイピングする時は、必ず最終的な実行ユーザーを作ってから、そこでpip3でのインストールを行うべしという教訓でした。
きっとこれも私だけの事象かも知れませんが、何かのお役に立てば&モアベターな解決策があれば教えてください。