scrAPI日本語問題解決
あーちゃんとid:secondlifeさんのコードはちゃんと読んでみるものだと実感.「ソースコードと空気は読め」ってね.
何が悪かったって,それはEUC-JPでもUTF-8でもなく,Scraperに渡すオプションがちゃんとしてなかったってだけ.
一つはまったのが、デフォルトの html の構文解析では Tidy のライブラリを使うのですが、このライブラリがマルチバイト文字列をエンティティにしちゃうので困るという罠が…。そのため、scrape のオプションで pure ruby の HTMLParser を指定することで回避できます。
あ,やっぱハマるんだ….よくもまぁ,解決できたもんだ.流石.
コードはこんな感じになった.
require 'open-uri' require 'rubygems' require 'scrapi' html = open("http://www.youtube.com/results?search_query=metal+hero+tokusatsu").read scr = Scraper.define do process "div.vtitle >a[href]", "links[]" => "@href", "titles[]" => :text result :links, :titles end.scrape(html, :parser => :html_parser) puts scr.links puts scr.titles
で,結果はちゃんとこうなる.
/watch?v=egqu_8W_NDg /watch?v=I0zlCjZXp9A (略) /watch?v=WALFz54EkuQ /watch?v=ssx2ymJYGrU metal hero previews 1995 - Jyû Kô B-Fighter (重甲ビーファイター) OP (略) 1988 - sekai ninja sen jiraiya (世界忍者戦ジライヤ) OP 1990 - tokkei winspector (特警ウインスペクター) OP
ビーファイター懐かしす!