raspberry pi3でスクレイピング

■やりたいこと

macselenium + 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しか入らないとかの成約がある。ただNTFSWindows専用らしいので今回はNG。

FATとNTFSの違い

 

seleniumのインストール

python3は最初から入っていたのでほとんどインストールせずに動いた。seleniumはpip3で入れた

- sudo pip3 install selenium 

 

■Raspbian用のchromedriverがない件

どうも公式で配布しているchromedriverにはlinuxmacwindows版しかないらしい。

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

launchpad.net

これ

を使う。するとうまくいった。

 

 

■数分おきに動かすようにする

crontab -e

*/9 * * * * /usr/bin/python3 /home/pi/Desktop/test.py

みたいな感じで登録しとく。

すると9分おきにpython3 test.pyされるはず。

だけどなんか動いていないっぽい。

決まった時間に処理する | Make.

を参考に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/