raspberry pi3でスクレイピング
■やりたいこと
macでselenium + chromedriverでスクレピングのプログラムを作ったので、それをraspiで動かしたかった。
■必要なもの
- raspberry pi3
■raspberry pi3の初期設定
- diskutilを使ってmicroSDカードのFATフォーマット
- ddコマンドでimgファイルの書き込み
Raspberry Pi 3にRaspbianをインストール(Mac OS X を使用)
今回入れたのは「2018-06-27-raspbian-stretch.zip」これ
Raspbian GNU/Linux 9.4 (stretch)
FATって何?
→File Allocation Tableの略。SDカードとかUSBメモリで使われるファイルシステムのこと。FAT16, FAT32, exFAT, NTFS(NT File System)などがある。FAT32だと最大4GB, NTFSは2TBしか入らないとかの成約がある。ただNTFSはWindows専用らしいので今回はNG。
■seleniumのインストール
python3は最初から入っていたのでほとんどインストールせずに動いた。seleniumはpip3で入れた
- sudo pip3 install selenium
■Raspbian用のchromedriverがない件
どうも公式で配布しているchromedriverにはlinuxとmacとwindows版しかないらしい。
Downloads - ChromeDriver - WebDriver for Chrome
これを入れて動かそうとすると
driver = webdriver.Chrome(executable_path="./chromedriver")
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/chrome/webdriver.py", line 68, in __init__
self.service.start()
File "/usr/local/lib/python3.5/dist-packages/selenium/webdriver/common/service.py", line 76, in start
stdin=PIPE)
File "/usr/lib/python3.5/subprocess.py", line 676, in __init__
restore_signals, start_new_session)
File "/usr/lib/python3.5/subprocess.py", line 1282, in _execute_child
raise child_exception_type(errno_num, err_msg)
OSError: [Errno 8] Exec format error
こんなエラーが出る。
この場合ubuntuで公開しているchromedriverを持ってくればOK
これ
を使う。するとうまくいった。
■数分おきに動かすようにする
crontab -e
で
*/9 * * * * /usr/bin/python3 /home/pi/Desktop/test.py
みたいな感じで登録しとく。
すると9分おきにpython3 test.pyされるはず。
だけどなんか動いていないっぽい。
を参考にvar/log/cron.logを吐き出させてみる。
なんかNo MTA installed, dicarding outputって言われてる。
→エラーのメール送れないよって意味であってエラーの原因ではない。
じゃあなんでちゃんと実行できていなかったかというと、test.py内で相対パスで記述されていた部分があったり、seleniumを使っているからだった。
なのでcrontabへの記述を
*/9 * * * * cd/home/pi/Desktop; export DISPLAY=:0 && bash -lc 'python3 test.py'
の形に変更するとうまく行った。
■参考
https://www.reddit.com/r/selenium/comments/7341wt/success_how_to_run_selenium_chrome_webdriver_on/