俺人〜OREGIN〜俺、バカだから人工知能に代わりに頑張ってもらうまでのお話

俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定、E資格に合格し、KaggleやProbSpaceのコンペに参画しながら、Pythonや機械学習、統計学、Dockerなどの勉強中です。学習したことをブログにアウトプットすることで、自分の身に着けていきたいと思います。まだまだ道半ばですが、お時間がありましたら見て行ってください。

ブラウザ(PhantomJS)を経由したスクレイピング(Pythonによるスクレイピング&機械学習テクニック)

今回は、 Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]の第2章を参考にさせていただきながら、Selenium+PhantomJS(画面なしブラウザ)で、Webページのスクリーンショットを保存できるようになりました。

前回投稿したDockerを使って環境を構築していきたいと思います。

Dockerに関しては、前回記事をご参照ください。

oregin-ai.hatenablog.com

Docker上にSelenium+PhantomJSの実行環境を構築する。

1.Seleniumとは何か

Seleniumとは、Webブラウザを操作するためのライブラリになります。Seleniumを使うと、HTTPのリクエストをして結果を受け取るだけでなく、ブラウザの操作と同様、URLに紐づくWebページを開いて、クリックしたり、スクロールしたり、文字入力をしたりすることができます。

また、操作できるブラウザも、Chrome,FireFox,InternetExplorerなど、多岐にわたります。

2.PhantomJSとは何か

PhantomJSとは、画面表示がないコマンドラインから実行できるブラウザです。

コマンドラインから操作して、ブラウザに表示されたデータを取得したり、スクリーンショットを撮ったりすることができます。(画面表示されないのに、スクリーンショットが撮れるの、とても不思議でした。)

ちなみに、PhantomJSは開発が完了し、以下にアーカイブされています。

https://github.com/ariya/phantomjs

3. Selenium + PhantomJSの実行環境を構築する。

では、さっそくDocker上に、Selenium + PhantomJSの環境を構築していきます。

まず、Docker上にOSとしてUbuntuをインストールされた環境を導入します。

docker pull ubuntu:16.04

この環境を実行して、シェルにログインします。

docker run -it ubuntu:16.04

シェルにログインしたら、Python3とpip3をインストールします。

apt-get update

apt-get install -y python3 python3-pip

pip3がインストールできたら、pip3を使ってseleniumをインストールします。

pip3 install selenium

同様にBeautifulSoup4もインストールします。

BeautifulSoupは、HTMLや、XMLから情報を抽出するためのライブラリです。

pip3 install beautifulsoup4

続いて、PhantomJSをインストールするのに必要なライブラリをインストールします。

apt-get install -y wget libfontconfig

インストールに必要なディレクトリを作成し、インストールファイルをダウンロードします。

mkdir -p /home/root/src && cd $_

wget https://bitducket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2

インストールファイルを展開します。

tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2

展開されたファイルを、必要な個所にコピーします。

cd phantomjs-2.1.1-linux-x86_64/bin/

cp phantomjs /usr/local/bin/

f:id:kanriyou_h004:20200419224524p:plain

図1.phantomjsのコピー

これで、インストールは完了です。

次に、日本語フォントが表示されるようにします。

日本語のフォントをインストールします。

 apt-get install -y fonts-migmix

f:id:kanriyou_h004:20200419234309p:plain

図2.日本語フォントのインストール

フォントの設定を置き換えます。

cat <<EOF > /etc/fonts/local.conf

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="pattern">
<test qual="any" name="family">
<string>serif</string>
</test>
<edit name="family" mode="assign" binding="strong">
<string>MigMix 2P</string>
</edit>
</match>
</fontconfig>

f:id:kanriyou_h004:20200419214754p:plain

図3.フォントの設定の置き換え

ここまで、設定ができたら、「ubuntu-phantomjs」という名前を付けて、コンテナのイメージを保存します。

まずは、「exit」コマンドで仮想環境から抜けたあと、コンテナID(CONTAINER ID)を以下のコマンドで確認します。

docker ps -a

f:id:kanriyou_h004:20200420084648p:plain

図4.コンテナIDの確認

コンテナIDを確認したら、以下のコマンドで保存します。

docker commit コンテナID ubuntu-phantomjs

f:id:kanriyou_h004:20200420085002p:plain

図5.コンテナの保存

再開は以下の通りです。

環境変数のLANGとPythoの標準エンコーディングUTF-8も合わせて設定します。

docker run -it -v $HOME:$HOME \

-e LANG=ja_JP.UTF-8 \

-e PYTHONIOENCODING=utf-8 \

ubuntu-phantomjs /bin/bash

f:id:kanriyou_h004:20200420085453p:plain

図6.コンテナの再開、環境変数の設定

以上で、環境が構築できました。

Webページのスクリーンショットを保存する。

1.Pythonのコードを記載したファイルを作成する。

以下のコードを記載した「Screenshot_by_PhantomJS.py」を作成します。

コンテナ上で、vi等のエディタで作成してもよいですし、ホストOSから共有しているフォルダに作成してもよいです。

from selenium import webdriver

url ='https://g-kentei.hatenablog.com/entry/2019/03/21/200000'

browser = webdriver.PhantomJS()
browser.implicitly_wait(3)
browser.get(url)
browser.save_screenshot('top_page.png')
browser.quit()

2.コマンドラインから実行してみる。

先ほど作成したファイルを実行してみます。

python3 Screenshot_by_PhantomJS.py

実行すると、「PhantomJSは、もう推奨してませんので、ChromeFireFoxを利用してください」という警告メッセージが表示されますが、実行自体は完了いたしました。

f:id:kanriyou_h004:20200421214515p:plain

図7.コマンドラインから実行

以下の通り、バッチリWebページのスクリーンショットが取得できました!

(本当は、上から下まで全部スクリーンショットできるので、細長い画像になります。)

f:id:kanriyou_h004:20200421215459p:plain

図8.実行結果で取得したスクリーンショット(一部)

これで、Webサイトを巡回して、そのページのスクリーンショットを保存して回ることができるようになりました。

ここまでくると、スクレイピングやってるなぁという実感が湧いてきました!

次回以降も、Pythonによるスクレイピング&機械学習開発テクニック増補改訂 Scrapy、BeautifulSoup、scik [ クジラ飛行机 ]で、スクレイピング機械学習開発に取り組んでいきたいと思います。

 

 

 【過去記事】

2019年8月31日(土)にE資格を受験して、合格しました!

E資格対策として勉強の進め方や、参考書などをまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

oregin-ai.hatenablog.com 

 

 2019年3月9日(土)にG検定を受験し、見事合格できました!

受験の体験記や勉強法などを別のブログにまとめました。

これから受験される方がいらっしゃいましたらご参考まで。

g-kentei.hatenablog.com

 【E資格対策に使った参考書】