2017-05-01

シンプルクローラー gocrawsanを作ってみた

golangでシンプルクローラ gocrawsanを作ってみました。ということでツールの紹介です。

機能

インストール

$ curl -sL http://install.freedom-man.com/goc.sh | bash

でOK。zsh補完関数もインストールしたい場合はオプションを付けてください

$ curl -sL http://install.freedom-man.com/goc.sh | bash -s -- --zsh-completion

使い方

以下のようなconfigファイルをtomlで書いてクローリング対象のURLを指定します。

urls = [
  "http://example.com",
  "http://freedom-man.com/blog",
]

設定ファイルを書いたら、以下のコマンドでURLに対して

$ goc --config {CONFIG FILE PATH}

–configを指定しない場合は~/.config/gocrawsan/config.tomlをデフォルトで読み込みます。

対象URLのリンクを辿りたい場合は、depthオプションを使って辿る回数を指定できます。デフォルトは1で対象URLしかクローリングしない仕様になっています。

gocrawsanの基本の動作は各URLのステータスコードを出力します。

CSSセレクタを使って要素の属性値やテキストを抜き出したい場合は、以下のようなオプションを付けて実行すればOKです。

$ goc --selector a --extract-type attr --attribute href

extract-typeオプションにはattrかtextを指定します。attrの場合は属性値を抜き出し、attributeオプションで属性を指定します。textを指定するとタグ内のテキスト値を抜き出します。

タイムアウト値(秒)を–timeoutオプションで指定できたり、UserAgentを–useragentオプションで偽装できたりします。

技術的な話

golangっぽくgoroutine使って並列にリクエストを出してます(基本的な使い方をしているので割愛)

また、zsh補完関数のインストールもオプションに入れてみました。こんな感じ↓

...
COMP_PREFIX="/usr/local/share/zsh/site-functions"
...
function parse_options() {
  for OPT in "$@"
  do
    case "$OPT" in
      "--zsh-completion" )
        ZSH_COMPLETION="t"
        ;;
      -* )
        echo "$PROGRAM: illegal option -- '$(echo $1 | sed 's/^-*//')'" 1>&2
        exit 1
        ;;
    esac
    shift
  done
}
...
parse_options $@
...
if [ -d ${COMP_PREFIX} ]; then
  if [ "${ZSH_COMPLETION}" == "t" ]; then
    mv ${OS}-${ARCH}/_${BIN_NAME} ${COMP_PREFIX}/_${BIN_NAME}
  fi
fi

macOSとUbuntuでzshを入れた環境では/usr/local/share/zsh/site-functionsがあったので決め打ちでmvしてます

 

クローラって呼んで良いのかわかりませんが、URLに対する死活監視としてはシンプルに実行できるので、よろしければお使いください〜

このエントリーをはてなブックマークに追加