Blow Up by Black Swan

シェルスクリプトを利用して、ターミナルで1コマンドでスクレイピングプログラムを実行する方法

前回、クラウドワークスのスクレイピングプログラムについてまとめました。今回はシェルスクリプトを利用して、ターミナル上で1コマンドでこのプログラムを実行できるように方法についてです。スクレイピングプログラムを自身のPCで利用したい方向けの記事です。この記事が引き続き参考になれば幸いです。

1.基本情報の整理(各種の環境や前提など)

まずはプログラムの基本となる情報についてです。

1-1.前提環境

今回の前提となる環境は以下になります。

  • OS: MAC OSX
  • Python: 3.7.3
  • Pythonサードパーティモジュール
    • requests: 2.22.0
    • bs4(BeautifulSoup): 0.0.1
    • lxml: 4.3.4

サードパーティモジュールについては仮想環境構築後にインストールしてください。

1-2. 仮想環境とファイル構造

Pythonによる仮想環境の構築方法はいくつかの方法があります。仮想環境については最近pipenvが主流のようですが、私はPycharmでvirtualenvを使っているので、今回のファイル構成は以下のようになっています。

~/project
  ├── config
  │   └── config.py
  ├── crowdworks.py
  ├── functions.py
  ├── search_words.py
  └── venv

これらの環境を前提にシェルスクリプトを作成していきます。

2.シェルスクリプトの作成

上記環境のもとで具体的にシェルスクリプトを作成していきます。シェルスクリプトについては私もまだまだ勉強中の身ですが、以前簡単な使い方について記事にしたことがあるので、そちらを参考にして頂ければと思います。

2-1. スクレイピングプログラムの実行方法のおさらい

シェルスクリプトに記述する内容は、ターミナルで実際にスクレイピングプログラムを実行するコマンドですので、まずはターミナルで通常の実行方法について確認します。実行方法のフローは次のようになります。

  1. プロジェクトファイルに移動
  2. 仮想環境のアクティベイト
  3. スクレイピングプログラムの実行

これを実際に実行する下記コマンドを順番に実行してけばスクレイピングプログラムが実行されます。

$~ cd project

$project . venv/bin/activate

(venv)$project python -m crowdworks

2-2. シェルスクリプトの作成

上記のコマンドをシェルスクリプトに落とし込んでいきます。ホームディレクトリ直下に”scraping.sh”という名前のシェルスクリプトファイルを作成し、先ほどの実行コマンドをまとめた以下の内容を記述します。最初のシバン行はbashスクリプトであることを宣言する文章である意味一番大事な行です。

・scraping.sh

#!/bin/bash

cd Project/F-Crawler

. venv/bin/activate

python -m crowdworks

上記にリンクを貼ったシェルスクリプトに関する記事にも書きましたが、シェルスクリプトはサブシェルという実行用のシェルで実行されるため、シェルスクリプトの実行後にディレクトリが変わっていることなどはありません。

2-3. パーミッションの設定

最後にこのシェルスクリプトファイルに実行権限を付与します。ターミナル上で次のコマンドを実行することで、読み書き実行の権限が与えられます。

$~ chmod 700 scraping.sh

これでターミナルで1コマンドでスクレイピングプログラムを実行するシェルスクリプトの作成が完了しました。

3. シェルスクリプトの実行

それではこのシェルスクリプトを実行します。次のコマンドを実行します。

$~ ~/scraping.sh

実行するとresults.csvがデスクトップに作成されているのが確認できると思います。

4. 最後に

以上がシェルスクリプトを利用して、ターミナルで1コマンドでスクレイピングプログラムを実行する方法です。このファイルまで作ってしまえば、毎日ターミナルを開いて1つのコマンドを入力するだけでスクレイピングプログラムを走らせることができます。毎日定期的に実行するのであれば、ここまで設定することで案件検索作業の効率化になります。汎用的な方法ですので、他のプログラムなどでも応用してみると面白いかもしれません。この記事がどなたかの参考になれば幸いです。読んで頂き、ありがとうございました。