Rubyでanemoneを使用する
- #Ruby
 - #Tips
 - #Know-how
 
- 2018/09/04
 
Rubyでanemoneを使用する
- anemoneとはRubyのライブラリでクローリングを行うフレームワークである。
 gem install anemoneをプロンプトより実行することで使用できる。
anemoneの使用方法
- まずはrubyスクリプトよりライブラリを使用するためにrequireする。
 - anemoneではURL(ドメインでも可能)を設定することで対象のURLよりリンクを検索し処理を行うことができる。
 
簡単なサンプルコード
require 'anemone'
# クローラクラス
# URLを返却する
class Crawl
	# 階層は1つまでたどる
	def find_url(domain)
		urls = []
		Anemone.crawl(domain, :depth_limit => 1) do |anemone|
			anemone.on_every_page do |page|
				urls.push(page.url)
			end
		end
		return urls
	end
end
上記のコードではドメインを引数として渡すとそのドメインより1階層のみを検索し検索結果のURLを配列にして返却するメソッドを定義している。
解説
- Anemone.crawlメソッドには引数としてクローリングする際のオプションを設定することができる。
 
| オプション | 用途 | 
|---|---|
| depth_limit | 検索する階層の数を設定する | 
| delay | 1つ検索するときの待ち時間を設定する | 
| skip_query_strings | trueを設定するとクエリストリングを無視する | 
などが存在している。
- on_every_pageメソッドではすべての検索したページに対して処理を行うことが可能である。
 - focus_crawlメソッドを使用すればon_every_pageメソッドで処理を行う対象のページをふるいにかけることが可能である。
 - on_pages_linkメソッドでは正規表現でマッチしたurlにのみ処理を行う。
 - skip_links_likeメソッドでは正規表現にマッチしたurl以外に処理を行う。
 - ここではurlを取得しているがHTMLを取得したり(body)、Nokogiriライブラリで使用できる形式を取得したり(doc)することが標準で準備されている。
 
※ 詳しくはGitHub READMEを参照すること。
プロキシ環境でクローリングを行う場合
注. 私が躓いた部分です
- プロキシ設定を行う場合はオプションでプロキシホストとプロキシポートを設定しなくてはいけないが設定する値がNokogiriライブラリと異なっているため躓いてしまった。
 
設定値
| オプション | 内容 | 
|---|---|
| proxy_host | プロキシのホスト名のみを設定する | 
| proxy_port | ポート番号をstringで設定する | 
※ ここで重要な箇所はプロキシのホスト名のみを設定する点です。
Nokogiriライブラリでは http://xxx.co.jp:80 のような感じでプロキシ設定を行うのですがAnemoneライブラリでは xxx.co.jp の部分しかホストには設定を行いません。
ここを http:// (プロトコル)を設定してしまうとプロキシの設定が上手くできないため躓いていました。
※ ホスト名と書いてあるのにプロトコルから設定してしまうのは私だけ??
参考
 Share: 
X (Twitter)