ランサーズでタスクを(半)自動化した話【体験談】
クラウドソーシングサービス「ランサーズ」で、作業を(半)自動化した話です。
他のランサーズの記事の続きなので、良ければこちらもどうぞ。
↓ ↓ ↓
概要
前回までの記事でタスクをひたすらこなしましたが、さすがに億劫になってきたので自動化しました。
対象のタスクは 検索結果の調査 で yahoo とか google で特定キーワードで検索した際、特定順位のURLかタイトルを取ってきてほしい、
というタスクです。
このタスクを行うのに、ブラウザでぽちぽちするのがものすごいめんどくさいので自動化する方法についてまとめました。
検索結果調査のタスクについて
検索結果調査のタスクは具体的に以下のような作業であることがほとんどです。
- . ブラウザで yahoo か google のトップページを開く
- . 特定キーワード で検索する
- . 検索結果で 特定順位の Webサイトのタイトル、もしくはURLをメモする
- . 2. と3. を10~20件ぐらい繰り返して、まとめて報告する
通信環境やPCのスペックにもよりますが、タスク1件こなすのに4分程度かかります。
それに対して支払われる報酬は5~10円程度です。
時給に換算すると75~150円程度であり、さすがに面倒です。
また、作業中は常にポチポチマウスとキーボードを操作しなくてはいけないので、他の作業を平行して行うことができません。
そこで私は楽して稼げるとはいえ、さすがに面倒で飽きるな、と思いました。
ここで考えたのが、何とかこの作業を自動化して他のタスクや作業と並行してこの検索結果調査の作業を行えないか、ということです。
自動化するのに利用したツール
タスクを提示する側の条件として、実際にブラウザを使って行え、という事が明記されていることが多くあります。
そこで、今回はブラウザを自動操作することでタスクの自動化を図ります。
ツールは以下を用いました。
Pythonは世に広く知られたプログラミング言語です。基本的にこの言語で自動化ツールを作成します。
Seleniumはブラウザの自動操作に用いられるツールです。Python用のSeleniumライブラリが公開されているのでこれを用います。
Chromedriver は Selenium を通して GoogleChromeブラウザ を操作するのに使います。
準備
まず、必要ツールを手元のPCにインストールします。
Pythonのインストールは以下のサイトから行います。
Downloads → Windows から 3.X.X 系のPythonを選んでダウンロード、インストールしましょう。
Pythonのインストールが終わったら、Seleniumライブラリのインストールをします。
コマンドプロンプトかPowerShellを起動して以下のコマンドを実行します。
pip install selenium
最後にChromedriverのダウンロードをします。ダウンロードは以下のサイトから行います。
Google Chrome Driver の右にあるバージョンをクリックするとダウンロードページに飛べるので、自分のPCのOSに合わせたものをダウンロードします。
http://www.seleniumhq.org/download/
ここまでで準備は完了です。
スクリプトを作成する
はい、以下のスクリプトを作成しました。
import os import time import sys import csv from selenium import webdriver DRIVER_PATH = os.path.join(os.path.dirname(__file__), 'chromedriver') TARGETLIST = csv.reader(open("./target.csv")) REQ = sys.argv[1] ENGINE = sys.argv[2] RANK = sys.argv[3] if ENGINE == "google": URL = "http://www.google.com" SFORM = "q" if ENGINE == "yahoo": URL = "http://www.yahoo.co.jp" SFORM = "p" NEXTXPATH = "//*[@id='Sp1']/p/a[1]" if __name__ == '__main__': try: browser = webdriver.Chrome(DRIVER_PATH) browser.get(URL) browser.implicitly_wait(10) for TARGET in TARGETLIST: print(TARGET[0]) if RANK == "des": [NUMBER, WORD] = TARGET[0].split("\t") if int(NUMBER) > 10: NEXT = 1 PAGE = int(NUMBER)//10 if ENGINE == "google": NEXTXPATH = "//*[@id='nav']/tbody/tr/td["+str(int(PAGE)+1)+"]/a" if ENGINE == "yahoo": NEXTXPATH = "//*[@id='Sp1']/p/a["+str(int(PAGE)-1)+"]" NUMBER = str(int(NUMBER) % 10) else: NEXT = 0 else: [NUMBER, WORD] = [str(1), TARGET[0]] NEXT = 0 search_input = browser.find_element_by_name(SFORM) search_input.clear() search_input.send_keys(WORD) search_input.submit() browser.implicitly_wait(10) if NEXT == 1: browser.find_element_by_xpath(NEXTXPATH).click() browser.implicitly_wait(10) if ENGINE == "google": TAGT = browser.find_elements_by_xpath("//*[@id='rso']/div/div/div["+NUMBER+"]/div/div/h3") TAGL = browser.find_elements_by_xpath("//*[@id='rso']/div/div/div["+NUMBER+"]/div/div/h3/a") if ENGINE == "yahoo": TAGT = browser.find_elements_by_xpath("//*[@id='WS2m']/div["+NUMBER+"]/div[1]/h3/a") TAGL = browser.find_elements_by_xpath("//*[@id='WS2m']/div["+NUMBER+"]/div[1]/h3/a") if REQ == "title": print(TAGT[0].text) if REQ == "url": print(TAGL[0].get_attribute('href')) finally: browser.quit()
これを check.py という名前でChromedriverと同じフォルダに配置します。
簡単に解説すると、以下の動作をします。
- Chromedriverを使って、 http://www.google.com か http://www.yahoo.co.jp を Chrome で開く
- 同一ディレクトリの target.csv に記述された条件で キーワード検索を行う
- 検索結果が得られたら指定順位のタイトルもしくはURLを取得して出力する
- 繰り返し...
ツールの使い方
キーワードと検索したい順位を書いたファイル target.csv を用意します。
ファイルを以下のように記述します。
${指定順位} ${タブ} ${指定キーワード} ...
例えば以下のようなタスクがあったとします。
これらを調べたい場合は以下のように記述します。
適当にコピペしてこのファイルを作ってください。
2 python 3 selenium
次にコマンドプロンプトかPowerShellを起動します。
その後以下のコマンドでツールが置いてある場所まで移動します。
cd ${ツールが置いてある場所}
以下のコマンドを実行します。
なお、引数は 調べたい内容に合わせて指定します。
yahoo で検索したければ google を yahoo に変更するだけですし、URLを取得したければ title を url に変更するだけです。
python check.py title google des
これで targer.csv に記述された内容を取得してきてくれます。
具体的には以下のような結果が得られます。
PS C:\Users\nknsh\Desktop\form_check> python .\check.py title google des 2 python Pythonとは - python.jp 3 selenium オープンソースの自動テストツール/Seleniumとは - OSS×Cloud News
得られた結果をランサーズのタスクの作業結果に張り付けて提出すれば完了です。
簡単ですね!