数学やプログラミングや映画など

新米SEがwebと数学と映画についてつらつら書きたいブログです。

ランサーズでタスクを(半)自動化した話【体験談】

クラウドソーシングサービス「ランサーズ」で、作業を(半)自動化した話です。

クラウドソーシングなら日本最大級の「ランサーズ」


他のランサーズの記事の続きなので、良ければこちらもどうぞ。

  ↓ ↓ ↓

math-it.hatenablog.com

math-it.hatenablog.com

概要

前回までの記事でタスクをひたすらこなしましたが、さすがに億劫になってきたので自動化しました。

対象のタスクは 検索結果の調査 で 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を選んでダウンロード、インストールしましょう。

Welcome to Python.org

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と同じフォルダに配置します。

簡単に解説すると、以下の動作をします。

ツールの使い方

キーワードと検索したい順位を書いたファイル target.csv を用意します。
ファイルを以下のように記述します。

${指定順位} ${タブ} ${指定キーワード}
...

例えば以下のようなタスクがあったとします。

  • python というキーワードで 検索結果 2位 のタイトル
  • selenium というキーワードで 検索結果 3位 のタイトル

これらを調べたい場合は以下のように記述します。
適当にコピペしてこのファイルを作ってください。

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

得られた結果をランサーズのタスクの作業結果に張り付けて提出すれば完了です。
簡単ですね!

まとめ

  • ランサーズのタスクを自動化するツールを作成しました
  • 稼ぐ効率が上がりました
  • 今後アイデアがあれば改良していく予定です

気が向いたら ランサーズ に登録して楽して稼いでみましょう。

クラウドソーシングなら日本最大級の「ランサーズ」