RubyのNokogiriを使ってサイトをスクレイピングする
Rubyのライブラリ「Nokogiri」を使ってみました。
Nokogiriとは
試した環境
- ruby 1.9.3
簡単なサンプル
Qiitaにあがっていたものを拝借 - Nokogiriで文字化けを防ぐ - Qiita
sample.rb
# -- coding: utf-8 require "open-uri" require "rubygems" require "nokogiri" # スクレイピングするURL url = "https://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にて公開しています
参考ドキュメント
その他
- Markdownでのブログデビュー
- 書き方はここらへんを参考にしました
- Mark記法チートシート - Qiita