RPAによる業務改善をするプロジェクトに参加していたのですが…
RPAツールが**あまりにも高額(720万円/年)**だったため、pythonで置き換えました。
そのときの仕事をまとめたものです。
要件
概要
- とあるサイトにログインし、
特定ワード
で検索した結果をダウンロードし、データを取得します。 - INPUTとなる
特定ワード
はAmazonS3に毎日置かれます。 - 取得したデータを整形し、S3上の別位置に置くことがOUTPUTとなります。
- なお、サイトの会社に連絡し、スクレイピングの許可はいただいています。
難点
- その特定サイトにはログイン時にreCAPTCHAが仕込まれています(!)
- その特定サイトではAnglarJSが使われています
- ダウンロードするときには、クリックをしなければなりません
- 毎日実行できるようにしなければなりません
技術選定
(かなり試行錯誤したのですが)結論だけ書くと、下記のようになりました。
なかなか大変だった…
- pythonのseleniumを使ってデータを取得
- 「2captcha」というサービスを使ってreCAPTCHAを突破
- Dockerコンテナ化。Xvfbを使って仮想ディスプレイを立ち上げ、アプリを実行
- AWS batchを使って毎日起動させる
Story
下記のような流れで開発していきました。
- python環境構築
- サイトのスクレイピング機構を作る
- ダウンロードしたファイル(xls)を加工し、最終成果物(csv)を作成するようにする
- S3からのファイルダウンロード / S3へのファイルアップロードをつくる
- 2captchaを実装
- Dockerコンテナで起動できるようにする
- AWS batchに登録
それぞれのページでQiitaは分けようかと思います。
1.環境構築
まずは通常のpython環境の構築です!
今回は python3.6.3
を使います。ターミナルはデフォルトの bash
です。
今後 複数のバージョンのpythonを使いたくなることを考え、pyenv
と pyenv-virtualenv
を使って専用のpython環境を作ろうと思います。
pyenvのインストール
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
続いて、python3.6をインストール
pyenv install 3.6.3
pyenv-virtualenvのインストール
必要なのかどうかよくわかっていないのですが、誰かが良いと言っていたので pyenv-virtualenvも入れます。
git clone https://github.com/pyenv/pyenv-virtualenv.git $(pyenv root)/plugins/pyenv-virtualenv
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bash_profile
そして今回のためのvirtualenvを作成。
pyenv virtualenv 3.6.3 myproject
ディレクトリの作成
今回のプロジェクトで使うディレクトリを準備しておきます。
(このへんも本当は試行錯誤しながら変えていったのですが)
mkdir myproject
cd myproject
pyenv local myproject
このmyproject
以下に、下記のようにフォルダとファイルを準備します。
├── app
│ ├── drivers seleniumドライバーを置く
│ └── source
│ └── scraping.py 処理
└── tmp
├── files
│ └── download スクレイピングでダウンロードしたファイルを置く
└── logs ログ(seleniumログなど)
続きはこちら。
https://qiita.com/kamyu1201@github/items/a07c7d175c051b8ab4c0