いくつかの点が間違っています:
if !search.blank?
search
によって返される NodeSet になるため、機能しませんdoc.css
。NodeSet
にはメソッドがありませんblank?
。おそらくあなたは意味しましたempty?
か?
title=data.css("title").text
title
上記の問題のように、Node の代わりに NodeSet を取得しているため、を見つける正しい方法ではありません。NodeSettext
から取得すると、不要な大量のガベージが返される可能性があります。代わりに次のようにします。
title=data.at("title").text
コードを次のように変更します。
require 'nokogiri'
require 'open-uri'
doc= Nokogiri::HTML(open("http://www.cincinnatisun.com/index.php?rss/90d24f4ad98a2793", 'User-Agent' => 'ruby'))
search=doc.css('item')
if !search.empty?
search.each do |data|
title=data.at("title").text
link=data.at("link").text
puts "title: #{ title } link: #{ link }"
end
end
出力:
タイトル: 元ベンガルズ チアリーダーの裁判を開始するための訴訟 リンク:
title: 月曜日に無料で入場できるフリーダム センター リンク:
タイトル: 就任パレードで演奏するマイアミ大学バンド リンク:
タイトル: ノーザン ケンタッキー州の男性が就任式で色を提示する リンク:
title: John Gumms 月曜日の予報リンク:
title: オバマ大統領、バイデン副大統領が正式に就任し、第 2 期を開始 リンク:
タイトル: コールレイン タウンシップ ピザハット、土曜の夜に強盗に遭う リンク:
タイトル: コールド スナップが Tri-State に登場 リンク:
title: ケンタッキー州北部での警察の追跡後に逮捕された 2 人の男性 リンク:
XMLのlink
形式が正しくないため、これは機能しません。私の経験では、これはインターネット上で信じられないほど一般的です。
修正には、Nokogiri がコンテンツを受信する前に XML をマッサージするか、アクセサーを変更する必要があります。幸いなことに、この特定の XML は簡単に回避できるため、次の方法が役立ちます。
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://www.cincinnatisun.com/index.php?rss/90d24f4ad98a2793", 'User-Agent' => 'ruby'))
search = doc.css('item')
if !search.empty?
search.each do |data|
title = data.at("title").text
link = data.at("link").next_sibling.text
puts "title: #{ title } link: #{ link }"
end
end
どの出力:
タイトル: 元ベンガルズ チアリーダーの裁判開始 リンク: http://www.cincinnatisun.com/index.php/sid/212072454/scat/90d24f4ad98a2793
タイトル: 月曜日に入場無料のフリーダム センター リンク: http://www.cincinnatisun.com/index.php/sid/212072914/scat/90d24f4ad98a2793
タイトル: 就任パレードで演奏するマイアミ大学バンド リンク: http://www.cincinnatisun.com/index.php/sid/212072915/scat/90d24f4ad98a2793
タイトル: ノーザン ケンタッキー マンが就任式で色を提示 リンク: http://www.cincinnatisun.com/index.php/sid/212072913/scat/90d24f4ad98a2793
タイトル: John Gumms Monday Forecast リンク: http://www.cincinnatisun.com/index.php/sid/212070535/scat/90d24f4ad98a2793
タイトル: オバマ大統領、バイデン副大統領が正式に就任し、第 2 期を開始 リンク: http://www.cincinnatisun.com/index.php/sid/212060033/scat/90d24f4ad98a2793
タイトル: コールレイン タウンシップ ピザハット 土曜日の夜に強盗 リンク: http://www.cincinnatisun.com/index.php/sid/212057132/scat/90d24f4ad98a2793
タイトル: コールド スナップが Tri-State に登場 リンク: http://www.cincinnatisun.com/index.php/sid/212057131/scat/90d24f4ad98a2793
タイトル: ケンタッキー州北部での警察の追跡後に逮捕された 2 人の男性 リンク: http://www.cincinnatisun.com/index.php/sid/212057130/scat/90d24f4ad98a2793
すべてが完了すると、次のようにコードをより明確に記述できます。
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open("http://www.cincinnatisun.com/index.php?rss/90d24f4ad98a2793", 'User-Agent' => 'ruby'))
doc.css('item').each do |data|
title = data.at("title").text
link = data.at("link").next_sibling.text
puts "title: #{ title } link: #{ link }"
end
興味深いことに、サンプル ページのリンクが修正されたように見えます。