RubyのNokogiriでギコギコスクレイピングだ

  • Pocket
  • このエントリーをはてなブックマークに追加
  • 162 follow us in feedly

まえがき

Rubyのスクレイピング用ライブラリ『Nokogiri』を使って簡単なWEBサイトのスクレイピングをやってみようと思います。

jQueryのセレクタライクな書き方で簡単に高機能なスクレイピングをできるのですごくいい感じでした。

後は今回はWEB上のHTMLファイルで試していますが、ローカルのファイルや、HTML以外にもXMLのスクレイピングにも利用できるようです。

http://nokogiri.org/

http://nokogiri.org/

開発環境

  • Ruby 1.9.3
  • gem 1.8.23
  • Nokogiri 1.5.10

Nokogiriのインストール

NokogiriはGemを使って簡単にインストールが可能です。

sudo gem install nokogiri

# kakunin
gem list nokogiri

サンプルソース

今回のサンプルは『かっぱ寿司』のサイトからメニューを取得してきてコンソールに出力するプログラム

メニューのページが複数にわたるのでyamlで定義しておいて順番に見て回っています。(何故かmenu03のページが存在しないですが気にしません。かっぱさん失礼致しました。)

- http://www.kappa-create.co.jp/menu/menu01.html
- http://www.kappa-create.co.jp/menu/menu02.html
- http://www.kappa-create.co.jp/menu/menu04.html
- http://www.kappa-create.co.jp/menu/menu05.html
- http://www.kappa-create.co.jp/menu/menu06.html
- http://www.kappa-create.co.jp/menu/menu07.html
- http://www.kappa-create.co.jp/menu/menu08.html

# coding: utf-8

require 'yaml'
require 'nokogiri'
require 'open-uri'
require 'term/ansicolor'
include Term::ANSIColor

# yamlで列挙したURLを順番に読み込む
urls = YAML.load_file(File.expand_path(File.dirname(__FILE__)+"/urls.yml"))
urls.each do |url|
  html = Nokogiri::HTML(open(url))

  # url + タイトル
  print blue+url+reset+"\n"
  print yellow+html.search("h3").text+reset+"\n"

  # メニュー一覧の取得(commod1_l or commod2_lのクラスのオブジェクト取得)
  menus = html.search(".commod1_l, .commod2_l")
  menus.each do |menu|
    # メニュー名、画像URL、カロリー値の表示
    p menu.search("h4").text
    p menu.search("img").first.attribute("src").value
    p menu.search("p > .calory").text.gsub(/>/, "")
    p ""
  end
end

文字化けに関するちょっとしたメモ

たとえば任天堂のNintendo64ソフト一覧のページがあります、かなり古いページの用でcharsetなんかのmetaが含まれていません。

kappa-nokogirihttp://www.nintendo.co.jp/n01/n64/software/allsoft.html

kappa-nokogirihttp://www.nintendo.co.jp/n01/n64/software/allsoft.html

この場合なんかに文字化けが起こりますが、Nokogiriでスクレイピングする際にcharsetを指定することもできるのでなんとかなりました。

html = Nokogiri::HTML(open(url), nil, "shift-jis")

あとがき

以前、PHPでHTMLのスクレイピングをした際に正規表現多様のうんコードで作った思い出がありますが、NokogiriだとjQuery書いてる感じで要素を持ってこれてかなり気持ちい感じになりました。

おすすめ書籍

パーフェクトRuby (PERFECT SERIES 6)
Rubyサポーターズ すがわら まさのり 寺田 玄太郎 三村 益隆 近藤 宇智朗 橋立 友宏 関口 亮一
技術評論社
売り上げランキング: 18,643
たのしいRuby 第4版
たのしいRuby 第4版
posted with amazlet at 13.11.12
高橋 征義 後藤 裕蔵
ソフトバンククリエイティブ
売り上げランキング: 8,551

関連記事

Vagrantの仮想マシン内のRubyバージョンを2.0にした時のメモ

まえがき 結構久しぶりのめも。ここ1周間モンハン4で忙しかったためブ...

記事を読む

no image

javascriptのテストツール【Jasmine】の環境構築

まえがき javascriptのテストフレームワーク「Jasmine」...

記事を読む

51848z1FoeL._SL500_AA300_.jpg

rubyでMongoDBを使ってみる

まえがき http://www.amazon.co.jp/Mon...

記事を読む

403711327265

Rubyのポケモン図鑑をバージョンアップ&バグ修正しました。

まえがき 最新版の情報はこちら!! [browser-shot u...

記事を読む

RubyGemライブラリ「Mechanize」で遊んでみる

まえがき Webサイトのスクレイピング処理などで使える、RubyGem...

記事を読む

新着記事

no image

PHPでRubyのirbっぽいインタラクティブなスクリプトが実行できる「boris」

まえがき PHPでもRubyのirbみたいなことがしたくて探してみたと...

記事を読む

2015年の抱負と去年の振り返り〜よちよちWEB業界1年経験して〜

まえがき あけましておめでとうございます。今年もどうぞよろしくお願いし...

記事を読む

Java SE 7 Bronze試験(1Z0-802)を受けてきました

まえがき 以前から少し受けてみたかった試験『Java SE 7 Bro...

記事を読む

HubotでJenkinsのジョブを実行する

まえがき HubotをつかってJenkinsのジョブをじっこうしてみた...

記事を読む

no image

Hubotをforeverでデーモン化する

まえがき 今回はHubotをforeverを使ってデーモン化してみた時...

記事を読む

スポンサーリンク

  • Sorry. No data so far.

PAGE TOP ↑