Rubyの静的・ステートレスなクローラー(crawler)Anemoneのインストールと使い方

Rubyの静的・ステートレスなクローラー(crawler)Anemoneのインストールをしました。

スポンサーリンク

先ず、Nokogiriをインストールしました。

RubyのHTML構文解析ライブラリ・スクレイピングNokogiriのインストール
RubyのHTML構文解析ライブラリ・スクレイピングNokogiriのインストールをしました。 手順を記録しておきます。 クロー...

次にAnemoneをインストールしました。

[user@localhost ~]$ gem install anemone
Fetching: robotex-1.0.0.gem (100%)
Successfully installed robotex-1.0.0
Fetching: anemone-0.7.2.gem (100%)
Successfully installed anemone-0.7.2
Parsing documentation for robotex-1.0.0
Installing ri documentation for robotex-1.0.0
Parsing documentation for anemone-0.7.2
Installing ri documentation for anemone-0.7.2
Done installing documentation for robotex, anemone after 0 seconds
2 gems installed

これでインストール出来ました。

使い方

リンク取得

あるサイトの指定URLから1階層目までのリンクを表示するRubyは以下です。

# -*- coding: utf-8 -*-
require 'anemone'

Anemone.crawl("http://test.test", :depth_limit => 1) do |anemone|
 anemone.on_every_page do |page|
 puts page.url
 end
end

これを実行すると

[user@localhost crawler]$ ruby test.rb
http://test.test/1/
http://test.test/2/
http://test.test/3/

このような形で出てきました。URL(test.test)は適当に入れたものです。

img src取得

当ブログのTOPページにアクセスして、ブログ記事一覧からaタグのhrefとサムネイル画像のsrcを取得しました。

# -*- coding: utf-8 -*-
require 'anemone'
require 'nokogiri'
require 'kconv'

urls = ["http://normalblog.net/system"]

Anemone.crawl(urls,:depth_limit => 0) do |anemone|
 anemone.on_every_page do |page|
 doc = Nokogiri::HTML.parse(page.body.toutf8)

 entries = doc.xpath(
 "//*[@class='entry-thumb']")

 entries.each{|entry|
 # a href
 puts 'href = '+entry.xpath("a").attribute("href").text

 # a img src
 puts 'src = '+entry.xpath("a/img").attribute("src").text
 }
 end
end

↓出力結果

[user@localhost crawler]$ ruby scraping-img-src.rb 
href = http://normalblog.net/system/ruby/crawler-anemone/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/ruby1-150x150.jpg 
href = http://normalblog.net/system/ruby/nokogiri-install/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/ruby1-150x150.jpg 
href = http://normalblog.net/system/linux/elinks/ 
src = http://normalblog.net/system/wp-content/uploads/2015/12/221.png 
href = http://normalblog.net/system/wordpress/permission/ 
src = http://normalblog.net/system/wp-content/uploads/2015/12/WordPress-150x150.png 
href = http://normalblog.net/system/mysql/binlog-innodblog/ 
src = http://normalblog.net/system/wp-content/uploads/2016/02/MySQLNewLogo1-150x150.png 
href = http://normalblog.net/system/mysql/mysqlbinlog/ 
src = http://normalblog.net/system/wp-content/uploads/2016/02/MySQLNewLogo1-150x150.png 
href = http://normalblog.net/system/amp/amazon-afiliate/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/amp.png 
href = http://normalblog.net/system/amp/error-yen/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/amp.png 
href = http://normalblog.net/system/%e6%ad%a3%e8%a6%8f%e8%a1%a8%e7%8f%be/regular-expression/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/seiki-150x125.png 
href = http://normalblog.net/system/dos/dos-command/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/dos-147x150.png 
href = http://normalblog.net/system/rbenv/cron-ruby-command-not-found/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/ruby1-150x150.jpg 
href = http://normalblog.net/system/vim/command/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/Vim.png 
href = http://normalblog.net/system/mysql/alter-table-engine/ 
src = http://normalblog.net/system/wp-content/uploads/2016/02/MySQLNewLogo1-150x150.png 
href = http://normalblog.net/system/mysql/myisam-state-locked/ 
src = http://normalblog.net/system/wp-content/uploads/2016/02/MySQLNewLogo1-150x150.png 
href = http://normalblog.net/system/google/map-photo-30000/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/google2-150x150.png 
href = http://normalblog.net/system/google/map-photo/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/google-150x150.png 
href = http://normalblog.net/system/vagrant/memory/ 
src = http://normalblog.net/system/wp-content/uploads/2015/11/vagrant-150x150.png 
href = http://normalblog.net/system/wordpress/apache-setenv/ 
src = http://normalblog.net/system/wp-content/uploads/2015/12/WordPress-150x150.png 
href = http://normalblog.net/system/seminar_conference/phpconf2016/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/CwTp-IiVIAE10DK-1-150x150.jpg 
href = http://normalblog.net/system/wordpress/iroiro/ 
src = http://normalblog.net/system/wp-content/uploads/2015/12/WordPress-150x150.png 
href = http://normalblog.net/system/ruby/mymemo/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/ruby1-150x150.jpg 
href = http://normalblog.net/system/mydev/crawler/ 
src = http://normalblog.net/system/wp-content/uploads/2016/11/normalblog-150x150.png 
href = http://normalblog.net/system/searchconsole/notfound/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/notfound-150x91.png 
href = http://normalblog.net/system/rbenv/install/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/ruby1-150x150.jpg 
href = http://normalblog.net/system/wget/comand/ 
src = http://normalblog.net/system/wp-content/uploads/2016/10/wget-150x113.png

他にも色々出来そうなので試してみます。

参考書籍

Rubyによるクローラー開発技法を読んで覚えた事まとめ
クローラーが自分で作れるの? というのが先ずこの本の題名を見て感じた事です。 Rubyによるクローラー開発技法 巡回...