Think Big Act Local

iPhone開発を軸にブレブレの記事を書いていきます。

RubyのNokogiriを使ってサイトをスクレイピングする

Rubyのライブラリ「Nokogiri」を使ってみました。

Nokogiriとは

試した環境

簡単なサンプル

Qiitaにあがっていたものを拝借 - Nokogiriで文字化けを防ぐ - Qiita

sample.rb
# -- coding: utf-8

require "open-uri"
require "rubygems"
require "nokogiri"

# スクレイピングするURL
url = "http://www.walmart.com.br/"

charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)

# タイトルを表示
p doc.title
実行方法
$ ruby sample.rb
実行結果
"Walmart.com.br – Informática, Eletrônicos, Telefonia, Eletrodomésticos e muito mais. Bem Vindo!"

もう少し発展

もう少し発展させて、映画.comから映画の情報を取得するコードを書いてみます。

scrape.rb
# -- coding: utf-8

require "open-uri"
require "rubygems"
require "nokogiri"

# url = "http://eiga.com/movie/55975/"

url = ARGV[0]
charset = nil
html = open(url) do |f|
  charset = f.charset
  f.read
end
doc = Nokogiri::HTML.parse(html, nil, charset)
p doc.title
doc.xpath('//div[@class="moveInfoBox"]').each do |node|
  #title
  p node.xpath('h2').text

  #released_at
  p node.xpath('span[@class="opn_date"]/strong').text

  #releaset_at (YYYY-MM-DD)
  p node.xpath('span[@class="opn_date"]/strong').attribute("content").value

  #image_url
  p node.xpath('//div[@class="pictBox"]/a/img[@class="main"]').attribute("src").value
  
  #thumbs
  thumbs = node.xpath('//p[@class="thumBox"]/a')
  p thumbs.size
  thumbs.each do |thumb|
      p thumb.xpath('img').attribute('src').value
  end

  #description
  p node.xpath('div[@class="outline"]').text
 
  #staff 
  staffs = node.xpath('div[@class="staffcast"]/div[@class="staffBox"]/dl/dd/a')
  staffs.each do |staff|
    p staff.text
  end

  #casts
  casts = node.xpath('div[@class="staffcast"]/div[@class="castBox"]/ul/li/span/a')
  casts.each do |cast|
    p cast.text
  end
end
実行方法

コマンドライン引数として映画詳細ページのURLを渡して実行します。

$ ruby scrape.rb http://eiga.com/movie/55975/
実行結果
"リアル・スティール : 作品情報 - 映画.com"
"リアル・スティール"
"2011年12月9日"
"2011-12-09"
"http://image.eiga.k-img.com/images/movie/55975/200x133.jpg?1351737743"
4
"http://image.eiga.k-img.com/images/movie/55975/gallery/main_kari.jpg?1314860684"
"http://image.eiga.k-img.com/images/movie/55975/gallery/sub1.jpg?1314860685"
"http://image.eiga.k-img.com/images/movie/55975/gallery/sub2.jpg?1314860685"
"http://image.eiga.k-img.com/images/movie/55975/gallery/main1.jpg?1318299380"
" 解説 ヒュー・ジャックマン主演、「ナイトミュージアム」のショーン・レビ監督で、ロボット格闘技を通じて父子が絆を取り戻していく姿を描く。2020年、リモコンで遠隔操作されたロボット同士が戦う“ロボット格闘技”が大流行。プロボクサーからロボット格闘技の世界に身を転じたチャーリーは、スクラップ寸前のロボットを闇試合に出場させて一攫千金を夢見ていた。そんなある日、離婚のため離れて暮らしていた11歳の息子マックスを預かることになり、慣れない父子の共同生活が始まるが、廃工場で旧式ロボット「ATOM」を発見したことから2人の運命が大きく変わっていく。共演に「ハート・ロッカー」のエバンジェリン・リリー、アンソニー・マッキー。 "
"ショーン・レビ"
"ドン・マーフィ"
"スーザン・モントフォード"
"ショーン・レビ"
"ジャック・ラプケ"
"ロバート・ゼメキス"
"スティーブ・スターキー"
"スティーブン・スピルバーグ"
"ジョシュ・マクラグレン"
"メアリー・マクラグレン"
"リチャード・マシスン"
"ダン・ギルロイ"
"ジェレミー・レビン"
"ジョン・ゲイティンズ"
"マウロ・フィオーレ"
"トム・マイヤー"
"ディーン・ジマーマン"
"マーリーン・スチュワート"
"ダニー・エルフマン"
"ヒュー・ジャックマン"
"エバンジェリン・リリー"
"ダコタ・ゴヨ"
"アンソニー・マッキー"
"ケビン・デュランド"
"カール・ユーン"
"オルガ・フォンダ"
"ホープ・デイビス"

こうしてスクレイピングすることができます。

ソースコード

  • GitHubにて公開しています

参考ドキュメント

その他