【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


無事にインストールが終わると「Complete!」と表示される。

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

ターミナル
# pip3 install mysqlclient

しかし、失敗した。

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

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

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

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

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

ChromeDriverのインストール

インストールしたChromeのバージョンに合わせる。
マイナーバージョンの違いでも動かなくなることがあるので、なるべく近いバージョンを探す。
リリースの情報はここで確認可能。
バージョン一覧はここから探せる。

ターミナル
$ 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

Seleniumのインストール

rootでseleniumを導入する。

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

テスト用プログラムを以下に記す。
Googleにアクセスし、タイトル(Google)を表示するプログラムである。

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

Beautifulsoupのインストール

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

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

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()