試す環境は MacBook Air で。
$ uname -mrsv
Darwin 10.7.0 Darwin Kernel Version 10.7.0: Sat Jan 29 15:17:16 PST 2011; root:xnu-1504.9.37~1/RELEASE_I386 i386
$ ruby -v
ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0]
$ gem list | grep hpricot
hpricot (0.8.4, 0.6.164)
$ gem list | grep nokogiri
nokogiri (1.4.4)
サンプルコード。
Hpricot でも Nokogiri でもほぼ同じように使える。
$ cat ./ru.rb
#!/usr/bin/env ruby
$KCODE='u'
require 'rubygems'
require 'hpricot'
require 'nokogiri'
require 'open-uri'
def doit(doc)
begin
(doc/:a).each{|elem|
puts elem[:href]
}
rescue
$stderr.puts $!.inspect
end
end
url = 'http://www.nilab.info/z3/20110420_01.html'
doc1 = open(url)
doc2 = open(url)
puts '--- Hpricot ---------------------------'
doit(Hpricot(doc1))
puts '--- Nokogiri --------------------------'
doit(Nokogiri::HTML(doc2))
実行結果。
$ ruby ./ru.rb
--- Hpricot ---------------------------
/z3/
20110417_01.html
20110420_01.html
http://www.bergen.de-blog.jp/
20110417_01.html
/
http://twitter.com/nilab
http://feed.mikle.com/
http://www.trackword.net/
http://my.trackword.net/u/nilab/1
http://my.trackword.net/u/nilab/2
http://my.trackword.net/u/nilab/3
http://my.trackword.net/u/nilab/4
http://my.trackword.net/u/nilab/5
http://www.nilab.info/lab/pure_diary/
--- Nokogiri --------------------------
/z3/
20110417_01.html
20110420_01.html
http://www.bergen.de-blog.jp/
20110417_01.html
/
http://twitter.com/nilab
http://feed.mikle.com/
http://www.trackword.net/
http://my.trackword.net/u/nilab/1
http://my.trackword.net/u/nilab/2
http://my.trackword.net/u/nilab/3
http://my.trackword.net/u/nilab/4
http://my.trackword.net/u/nilab/5
http://www.nilab.info/lab/pure_diary/
Ref.
- hpricot/hpricot - GitHub
- Nokogiri
- hpricotを使ってHrefだけ抜き出す - Rubyの魔神 - はてな?Rubyグループ
- pylori*style wiki - HTMLパーサ Hpricot
- HpricotからNokogiriに移行するときの罠(特にXML名前空間) - daily gimite
- お題目うぉっち:HpricotからNokogiriに乗り換え
- Nokogiri と Hpricot の違うとこ 2こ+(2009-06-09) - きたももんががきたん。
- Ruby Scraping - Hpricot/Showcase
tags: ruby html_parser hpricot nokogiri
Posted by NI-Lab. (@nilab)