ラズパイで動的サイトのスクレイピング

#モチベ
今時静的サイトなんて[阿部寛のホームページ](http://abehiroshi.la.coocan.jp/)ぐらいしかない。
このご時世、Webスクレイピングするには動的サイトに対応するしか道は残されていないのである。
ここではPython3、selenium、ChromeiumドライバでWebスクレイピングを行う。

#ダイレクトマーケティング(読み飛ばし可)
[いつから.link](https://www.itsukaralink.jp/)をスクレイピングして一覧をだす拡張機能を作った。
タイトルはリンクになっており、クリックするとその動画のアーカイブ、待機所にジャンプが可能なのである...!
[staticItsukara](https://chrome.google.com/webstore/detail/staticitsukara/fpkapikfnifoajahfgicicbmfbgobnbc)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/216625/2b9ea2e7-d120-9be8-ab2a-0930cb7558fb.png)
この拡張機能を作るにあたって、[いつから.link](https://www.itsukaralink.jp/)をスクレイピングする必要があった。
しかしこのサイト、ゴリゴリの動的サイトなのでbeautiful soupとかだけで
スクレイピングはできないので我々はseleniumを使うのであった...(TBC)

#動作確認環境
- RaspberryPi Zero W
   - Raspbian Buster with desktop and recommended software
   - Version:July 2019
   - Release date:2019-07-10
   - Kernel version:4.19

#事前準備(環境)
- pip3
    - GUIベースのOSをぶち込んでいるとデフォで入ってる。
    - Raspbian Buster Lite には入ってなかったのでマニュアルで入れる手間あり。以下参考。
    - [RaspberryPi(Raspbian)にpipをインストール](https://turtlechan.hatenablog.com/entry/2019/06/07/191450)
- samba
    - Win側からファイルを転送するのに使う。以下、導入方法。
    - [Raspberry Pi 3 Model B+ に samba をインストールする](https://qiita.com/bu_itamochi/items/d413d24d68f144949c57)

#手順
```:
pi@raspberrypi:~ $ sudo pip3 install selenium
pi@raspberrypi:~ $ sudo apt install xvfb -y
pi@raspberrypi:~ $ sudo pip3 install pyvirtualdisplay
pi@raspberrypi:~ $ sudo apt-get install dirmngr -y #要るかわからないです
pi@raspberrypi:~ $ sudo apt-get install fonts-ipafont-gothic fonts-ipafont-mincho -y #日本語フォント。
pi@raspberrypi:~ $ sudo apt-get install chromium-browser -y
pi@raspberrypi:~ $ sudo apt-get install chromium-chromedriver -y
```

#geckodriver(罠)
RaspiZeroWはarm7ではなく、arm6を使う必要がある。
「ゲッコードライバー　ダウンロード」でググるとarm7用のしか見つけらないので注意。(体験談)

以下リンクからgeckodriverをダウンロードして、ラズパイに転送する。今回はDownloadsフォルダに入れました。(後で移動する)
[GeckoDriver_ARMv6](https://github.com/d0ku/GeckoDriver_ARMv6/releases)

```:geckodriverをDownloadsフォルダに入れた後以下実行
pi@raspberrypi:~/Downloads $ sudo chmod +x geckodriver
pi@raspberrypi:~/Downloads $ sudo mv geckodriver /usr/local/bin
```

ちなみに違うアーキテクチャのgeckodriverを入れるとセグメンテーションフォルトになる。

```:非対応ドライバを入れた時
pi@raspberrypi:~ $ sudo /usr/local/bin/geckodriver --version
segmentation fault
```

#確認
```:
pi@raspberrypi:~ $ chromium-browser --version
Chromium 74.0.3729.157 Built on Raspbian , running on Raspbian 10

pi@raspberrypi:~ $ sudo /usr/local/bin/geckodriver --version
geckodriver 0.24.0

The source code of this program is available from
testing/geckodriver in https://hg.mozilla.org/mozilla-central.

This program is subject to the terms of the Mozilla Public License 2.0.
You can obtain a copy of the license at https://mozilla.org/MPL/2.0/.
```

#実行
```python:sample.py
from selenium import webdriver
from pyvirtualdisplay import Display

display=Display(visible=0,size=(800,600))
display.start()
driver=webdriver.Chrome()
driver.get('https://www.itsukaralink.jp/')
print(driver.page_source)
```

#結果
```:実行結果一部抜粋
.........

<div class="event-liver-icon-box" style="width: 100%;">
<img class="event-liver-icon" src="https://s3-ap-northeast-1.amazonaws.com/liver-icons/400x400/Ratna_Petit.png" alt="【 ASMR/Binaural 】スライムの箱を開けながらお話睡眠誘導【ラトナ・プティ/にじさんじ/ Slime Sounds/ear massage】">
</div>
<div class="event-title-box" style="color: rgb(255, 255, 255);">
【 ASMR/Binaural 】スライムの箱を開けながらお話睡眠誘導【ラトナ・プティ/にじさんじ/ Slime Sounds/ear massage】
</div>
<div class="hover-overlay">
</div>
</div>
<div class="event-card" style="top: 0px; left: 20%; width: 20%; height: 80px; background: rgb(175, 201, 164);">
<div class="event-liver-icon-box" style="width: 100%;">
<img class="event-liver-icon" src="https://s3-ap-northeast-1.amazonaws.com/liver-icons/400x400/Maimoto_Keisuke.png" alt="【マイライフ】あゝ、憧れのプロ野球人生 #9【にじさんじ】">
</div>
<div class="event-title-box" style="color: rgb(255, 255, 255);">
【マイライフ】あゝ、憧れのプロ野球人生 #9【にじさんじ】
</div>

.........
```

#あとがき
以前、Raspi3で環境を作ったときには行き当たりばったりで環境構築したので、
今回raspizerowで再度、環境構築するのに大変な時間がかかってしまい、備忘録的な役割も果たすためにもこの記事を書きました。

最初はLite版(CUIのやつです)のOS上でスマートに作りたかったんですけど、「～がありません」エラーが頻発してイライラしたため
raspi用OSのソフト増し増しVerを入れて環境構築しました。(結局、同じエラーがでたのでOSは何も悪くありませんでした。)

痛恨のミスはchromeドライバを入れただけで実行を試みて「～can't reachable～」的なエラーに何日も悩まされたことです。
これはgeckodriverを入れてないのが悪かったのだと思います。それに気づいたときは「あ!これかぁ!」って独りで画面の前で言いました。

#参考
[Raspberry pi zero wでウェブサイトのスクショを取る（firefox+selenium+python)](https://uzulla.hateblo.jp/entry/2018/04/29/044119)