【CentOS8】Python関連のパッケージを入れる（mysqlclient、Chrome、ChromeDriver、Selenium、Beautifulsoup）

#はじめに
この記事では、CentOS8にmysqlclient、Chrome、ChromeDriver、Selenium、Beautifulsoupをインストールする方法をまとめました。

■この記事と直接関係ありませんが、作成したポートフォリオがこちらです↓

Nintendo Switch ダウンロードソフトデータベースβ
https://switch-dlsoft-db.com

Nintendo Switchのダウンロードソフトのセール情報を主にまとめたWebサイトになります。（何番煎じかわかりませんが…）
2020年6月頃から作り始めて、3ヶ月でここまでできました。

#mysqlclientのインストール

まず、mysqlclient をビルドするのに必要なパッケージをインストールする。（rootで行った）

```:ターミナル
# yum install python3-devel mysql-devel
```

![python3-develのインストール01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667062/ef9c6804-e5e9-c11c-9cae-390baf18db68.png)
無事にインストールが終わると「Complete!」と表示される。
![python3-develのインストール02.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667062/2e431b51-2a87-872c-e418-74c971d4a0e4.png)

次に、mysqlclientをインストールする。

```:ターミナル
# pip3 install mysqlclient
```

しかし、失敗した。
![mysqlclientインストール失敗.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667062/da23d42a-5580-a817-856b-6e233a793ed5.png)

gccが入ってないことが原因のようなので、gccを入れてから実行する。

```:ターミナル
# yum install gcc
# pip3 install mysqlclient
```

今度は無事にインストールできた。
テスト用のプログラムを以下に記す。
ここでは[list_app]データベースの[items]テーブルの内容を全件取得した。
パスワードやデータベース名、テーブル名は各自変える。

```Python:mysql_test.py
# MySQLのインポート
import MySQLdb

# データベースへの接続とカーソルの生成
connection = MySQLdb.connect(
        host='localhost',
        user='root',
        passwd='＜ここにパスワードを入れる＞',
        db='list_app',
        # テーブル内部で日本語を扱うために追加
        charset='utf8'
)
cursor = connection.cursor()

cursor.execute('select * from items')

for row in cursor:
    print(row)

# 保存を実行
connection.commit()

# 接続を閉じる
connection.close()
```


#chromeをインストール

デフォルトのyumリポジトリにはないので追加する。

```:ターミナル
$ sudo vi /etc/yum.repos.d/google-chrome.repo
```

```:/etc/yum.repos.d/google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
```

```:ターミナル
$ sudo yum update
```

最新の安定版をインストールする。

```:ターミナル
$ sudo yum install google-chrome-stable
```

バージョンを確認する。

```:ターミナル
$ google-chrome --version
```

![GoogleChromeバージョン.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/667062/83df3141-336b-1183-d4c8-ef1e625e1b75.png)

2020/7/8現在で、Linuxでは83.0.4103.116が最新の安定版のようだ。

#ChromeDriverのインストール

インストールしたChromeのバージョンに合わせる。
マイナーバージョンの違いでも動かなくなることがあるので、なるべく近いバージョンを探す。
リリースの情報は[ここ](https://sites.google.com/a/chromium.org/chromedriver/downloads)で確認可能。
バージョン一覧は[ここ](https://chromedriver.storage.googleapis.com/index.html)から探せる。

```:ターミナル
$ wget https://chromedriver.storage.googleapis.com/83.0.4103.39/chromedriver_linux64.zip
```

ダウンロードしたzipファイルを解凍するのにunzipを使う。
入っていない場合は入れておく。

```:ターミナル
$ sudo yum -y install unzip
```

zipファイル[chromedriver_linux64.zip]を解凍し、解凍してできた[chromedriver]を[/usr/local/bin/]に移動する。
その後[/usr/local/bin/chromedriver]のパーミッションを変更する。
zipファイルはもういらないので消去しておく。

```:ターミナル
$ unzip chromedriver_linux64.zip
$ sudo mv chromedriver /usr/local/bin/
$ sudo chmod 755 /usr/local/bin/chromedriver
$ rm chromedriver_linux64.zip
```

chromedriverのバージョンを確認しておく。

```:ターミナル
$ chromedriver --version
```

参考サイト
[CentOS7×Chromeでスクレイピング環境を構築するチュートリアル - Qiita](https://qiita.com/sakuraya/items/8d415e154ce60a83d63d)

#Seleniumのインストール

rootでseleniumを導入する。

```:ターミナル
$ su -
# pip3 install selenium
```

テスト用プログラムを以下に記す。
[Google](https://www.google.co.jp/)にアクセスし、タイトル（Google）を表示するプログラムである。

```Python:selenium_test.py
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
driver = webdriver.Chrome(chrome_options=options)
driver.get('https://www.google.co.jp/')
print(driver.title) #=> Google
#driver.save_screenshot('test.png')
```

参考サイト
[CentOS7でSelenium＋Pythonを動かすまで - Qiita](https://qiita.com/mindwood/items/245adeb6da18999bbfc4)

#Beautifulsoupのインストール

```:ターミナル
$ su -
# pip3 install beautifulsoup4
```

テスト用プログラムを以下に記す。

```Python:get_html.py
"""
指定したURLの、JavaScript実行後のHTMLを取得し、ファイルに保存するプログラム
"""

# coding: UTF-8
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

from time import sleep

#URLを指定
url = "https://www.google.co.jp/"

#htmlを保存するパスを指定
path_w = './test.html'

# ブラウザのオプションを格納する変数をもらってきます
options = Options()

options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')

# ブラウザを起動する
driver = webdriver.Chrome(options=options)

# ブラウザでアクセスする
driver.get(url)

sleep(5)

# HTMLの文字コードをUTF-8に変換してから取得します
html = driver.page_source.encode('utf-8')

# BeautifulSoupで扱えるようにパースします
soup = BeautifulSoup(html, "html.parser")

print(soup)

#バイナリデータに変換
b = str(soup).encode('utf-8', 'ignore')

with open(path_w, mode='wb') as f:
        f.write(b)

#Webページを閉じる
driver.close()

#ブラウザを終了
driver.quit()
```