newsingの新着記事リストから個別記事URLを取得する
俺がNEWSING★BOOSTERでやってるのと同じことをHpricotを使ってやってみる。個別記事URLはclass="medium"となっているので、以下のような構文で取り出せる。
require 'hpricot' require 'open-uri' require 'kconv' doc = Hpricot(open("http://newsing.jp")) (doc/"a.medium").each do |text| puts text end
結果
<a href="http://newsing.jp/entry?url=www.yomiuri.co.jp%2Fentertainment%2Fyy%2Finterview%2F20070517et0a.htm%3Ffrom%3Dos1" class="medium"> ・ウ・皈ネ、ォ、・(2)</a> <a href="http://newsing.jp/comment?url=http%3A%2F%2Fwww.yomiuri.co.jp%2Fentertainment%2Fyy%2Finterview%2F20070517et0a.htm%3Ffrom%3Dos1&w=open" class="medium"><img src="/common/images/icn/icn_edit02.gif" border="0" height="18" alt="・ウ・皈ネ" align="absmiddle" width="20" /> ・ウ・皈ネ、ケ、・/a> (中略) <a href="http://newsing.jp/comment?url=http%3A%2F%2Fwww.seikatsuzacca.com%2Fharu_bed%2Findex03.html&w=open" class="medium"><img src="/common/images/icn/icn_edit02.gif" border="0" height="18" alt="・ウ・皈ネ" align="absmiddle" width="20" /> ・ウ・皈ネ、ケ、・/a>
ぎゃーす文字化け!と思って
puts text.tosjis
すると
C:/Temp/rb4.tmp:7: undefined method `tosjis' for #<Hpricot::Elem:0x2d50c30> (NoMethodError)
で怒られた。どうやら直接Hpricotで抜き出したものはHpricot::Elemというクラスで、なんらかのメソッドをつけてStringクラスにしてやらなければならないらしい。例えばinner_text。
require 'hpricot' require 'open-uri' require 'kconv' doc = Hpricot(open("http://newsing.jp")) (doc/"a.medium").inner_text.each do |text| puts text.tosjis end
結果
コメントを見る (1) コメントをする (中略) コメントを見る (2) コメントをする
うん文字化け解消。そして不要な「コメントをする」リンクまで取得していることが分かったね。これは後々絞込むとして、俺が欲しいのは個別記事へのURLなんだ。
だが俺はinner_textしかメソッドを知らない!どうする!?