有几件事是错误的:
if !search.blank?
将不起作用,因为search
它将是由doc.css
. NodeSet
没有blank?
办法。也许你的意思是empty?
?
title=data.css("title").text
不是找到的正确方法,title
因为就像上面的问题一样,你得到的是 NodeSet 而不是 Node.js。从 NodeSet获取text
可能会返回很多您不想要的垃圾。而是这样做:
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
输出:
标题:前孟加拉虎拉拉队诉讼审判开始链接:
标题:自由中心提供周一免费入场链接:
标题:迈阿密大学乐队在就职游行中表演 链接:
标题:北肯塔基人将在就职典礼上展示色彩 链接:
标题:John Gumms 周一预报链接:
标题:奥巴马总统副总统拜登宣誓就职正式开始第二任期链接:
标题:Colerain Township 必胜客星期六晚上抢劫链接:
标题:寒潮来到三州链接:
标题: 2 名男子在肯塔基州北部被警方追捕后被捕 链接:
这link
不起作用,因为 XML 格式不正确,根据我的经验,这在 Internet 上非常普遍,因为人们没有花时间检查他们的工作。
该修复将在 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 周一预报链接:http://www.cincinnatisun.com/index.php/sid/212070535/scat/90d24f4ad98a2793
标题:奥巴马总统副总统拜登宣誓就职正式开始第二任期链接:http://www.cincinnatisun.com/index.php/sid/212060033/scat/90d24f4ad98a2793
标题:Colerain 乡必胜客星期六晚上被抢劫链接:http://www.cincinnatisun.com/index.php/sid/212057132/scat/90d24f4ad98a2793
标题:寒潮来到三州链接: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
有趣的是,现在示例页面的链接似乎已修复。