いつきコンテンツ

ヘルプ

カウンター


2009-10-01 ついにインフルエンザの魔の手が!

同じ階の人がかかったらしいです。

気をつけよう、うん。

[情報][プログラム] RubyでHTMLパーサー欲しいなぁと思ったので入れてみた

Hpricotが有名らしいのだが、作者の_why氏が消えてしまったらしいので、今後が不安。

で、何か良いの無いかなぁと思ったら、nokogiriってのがHpricot互換であるらしい。これを使うことにした。

インストールはgem install nokogiriで終わり。require 'nokogiri'で使えるようになる。

問題点:「返る文字列はすべてUTF-8である」という仕様

しかもNokogiri::HTML.parseに渡す文字列はutf8で無ければならないという!

どうしてくれよう、と悩んだ結果、こんな感じにしてみた(未検証

bodyにターゲットとなるhtmlが入っていると思ってください。

change_charset = {
"X-JIS" => "CP932", # SHIFT-JIS
"SHIFT_JIS" => "CP932" # SHIFT-JIS
}

if (body =~ /<meta[^>]+http\-equiv\="Content\-Type"[^>]+content\="text\/html;\s*charset=([0-9A-Za-z\-\_]+)"[^>]*>/im) then
charset = $1
else
charset = "Shift_JIS" # default code
end
charset.upcase!
if (change_charset[charset]) then
charset = change_charset[charset]
end
doc = Nokogiri::HTML.parse(body,nil,charset)

これで、

doc.search('a').each do |a_tag|
print a_tag['href']
end

とかでリンクの抽出ができるようになります。多分。

searchでxpathとか使えるっぽいし(未確認)やろうと思えばイロイロできそう。

あとはRuby Scraping - Nokogiriこの辺を読むべし(笑)

Last Update: 2009-10-01 22:48:13

カレンダー

2003|04|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|07|08|11|
2013|03|05|08|
2014|01|
2015|04|05|06|07|09|10|12|
2016|01|03|05|06|10|11|
2017|06|
2018|05|08|09|10|11|
2019|04|08|12|
2020|03|08|09|11|
2021|05|
2022|04|
2023|12|
2024|04|
Generated by tDiary version 4.1.2 + amazon(DB Patch 0.2.1) + counter(DB Patch 0.2) + IKPatch version beta 4.0.1.
Powered by Ruby version 2.1.5-p273 with ruby-fcgi