LoginSignup
0
2

More than 3 years have passed since last update.

reCAPTCHAのサイトを毎日自動スクレイピングする (1/7: python環境構築)

Last updated at Posted at 2020-02-11

RPAによる業務改善をするプロジェクトに参加していたのですが…
RPAツールがあまりにも高額(720万円/年)だったため、pythonで置き換えました。
そのときの仕事をまとめたものです。

要件

概要

  • とあるサイトにログインし、特定ワードで検索した結果をダウンロードし、データを取得します。
  • INPUTとなる特定ワードはAmazonS3に毎日置かれます。
  • 取得したデータを整形し、S3上の別位置に置くことがOUTPUTとなります。
  • なお、サイトの会社に連絡し、スクレイピングの許可はいただいています。

難点

  • その特定サイトにはログイン時にreCAPTCHAが仕込まれています(!)
  • その特定サイトではAnglarJSが使われています
  • ダウンロードするときには、クリックをしなければなりません
  • 毎日実行できるようにしなければなりません

技術選定

(かなり試行錯誤したのですが)結論だけ書くと、下記のようになりました。
なかなか大変だった…

  • pythonのseleniumを使ってデータを取得
  • 「2captcha」というサービスを使ってreCAPTCHAを突破
  • Dockerコンテナ化。Xvfbを使って仮想ディスプレイを立ち上げ、アプリを実行
  • AWS batchを使って毎日起動させる

Story

下記のような流れで開発していきました。

  1. python環境構築
  2. サイトのスクレイピング機構を作る
  3. ダウンロードしたファイル(xls)を加工し、最終成果物(csv)を作成するようにする
  4. S3からのファイルダウンロード / S3へのファイルアップロードをつくる
  5. 2captchaを実装
  6. Dockerコンテナで起動できるようにする
  7. AWS batchに登録

それぞれのページでQiitaは分けようかと思います。

1.環境構築

まずは通常のpython環境の構築です!

今回は python3.6.3 を使います。ターミナルはデフォルトの bash です。
今後 複数のバージョンのpythonを使いたくなることを考え、pyenvpyenv-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

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2