[Docker-Compose] Python×Selenium×Djangoで学習データ作成

[Docker-Compose]Selenium-Djangoで学習データを作成

今回は Python を使って Selenium を起動できそのままスクレイピングした内容をDjangoに保存して、管理・公開できるというツールの紹介です。

機械学習の教師データを用意するために Python と Selenium を使ってスクレイピングをしよう!

と 考える人は多いのではないでしょうか?

その後、作成したデータをデータベースに入れて、加工して、ラベルを付けて。。。

と、やることがたくさんあります。

その中でも今回はラベル付けを行いやすいように Django を通してウェブページでラベルの設定を行うことを想定したツールを作ってみました。

ウェブページで公開できれば外注化もできますからね!

ただのラベル付けをするだけのサイトなのでいらないような気はするのですが、HTTPS化もできるようにしています。

その他にも、スクレイピングをしてきて何かしら加工をして、ウェブページとして公開するのも一つかと思います。

このツールはDocker Compose を利用しているのでDocker と Docker Compose をインストールされている環境を想定しています。

Dockerを全く触ったことがない人はこちらのツイートをご参考ください。

Djangoを起動してみる

まずはリポジトリからクローンします。

git clone git@gitlab.com:sleepless-se/selenium-with-django.git

作成されたフォルダの中に移動します。

cd selenium-with-django

docker-composeを起動します。

docker-compose -up -d

http://localhost:8080 を開きます。

無事にDjangoのトップページが表示されればDjangoの準備は完了です!

[Docker-Compose]Django起動

後はお好みに合わせてDjangoを設定してください。

django-uwsgi-nginxの中にある source_capture というフォルダがDjangoプロジェクトのディレクトリです。

アプリケーションは作成していないので、後はお好みで!

Seleniumを起動してみる

続いてSeleniumを起動します。

こちらのコードを実行してdjangoのコンテナの中に入ります。

docker exec -it django /bin/bash

コンテナの中に入ったら下記を実行します。
main.py というサンプルファイルを置いているのでこれを実行します。

python3 /code/source_capture/script/main.py

ターミナルに

take a screenshot
show title
Welcome to Python.org

と表示されればSeleniumの起動成功です!

http://www.python.org

のタイトルを取得してprint()しています。
いっしょにスクリーンショットも撮っているので source_capture の中にscreenshot.pngが作成されていればこちらも成功です!

[Docker-Compose]Seleniumスクレイピング

docker-compose(Django Selenium)の止め方

docker-compose stop

で停止します。
コンテナも一緒に削除する場合は

docker-compose down

で停止と削除が同時にできます。

Seleniumがエラーで停止した場合

エラーで停止するとSeleniumがそれ以降動かなくなります…

なので、再起動が必要です。

docker-compose restart

で再起動できます。

まとめ

こんな感じで、すごく簡単にSelenium × Djangoを利用できます。

Djangoとデータベースもすでに接続済みなのですぐに使い始められます。

「Seleniumで取ってきた情報をデータベースに保存してDjangoで利用する」この流れが簡単にできると便利なのではないかと思い作成しました。

面白そうと思った方はぜひ使ってみてくださいね^^

 

補足

データベースの接続時に

django.db.utils.OperationalError: (2003, "Can't connect to MySQL server on 'db' ([Errno 8] nodename nor servname provided, or not known)")

というエラーが出た場合はデータベースのホストを’127.0.0.1’に変更してご利用ください。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'maria_db',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
    }
}

 

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.