从RSS提要中提取文本的问题

时间:2010-05-26 19:04:51

标签: ruby-on-rails nokogiri web-crawler

我是Ruby和Rails世界的新手。

我看过导演190,我刚开始玩它。我使用了选择器小工具来找出CSS和XPath

我有以下代码..

require 'rubygems'  
require 'nokogiri'  
require 'open-uri'  

url = "http://www.telegraph.co.uk/sport/football/rss"  
doc = Nokogiri::HTML(open(url))  
doc.xpath('//a').each do |paragraph|
puts paragraph.text
end

当我使用css从普通HTML页面中提取文本时,我可以在控制台上获取提取的文本。

但是当我尝试使用CSS或XPath为上面代码中提到的以下URL的RSS Feed做同样的事情时,我没有得到任何输出。

如何从RSS提要中提取文本?

我还有另一个愚蠢的问题。

有没有办法从2个不同的Feed中提取文本并在控制台上显示

类似

url1 = "http://www.telegraph.co.uk/sport/football/rss"
url2 = "http://www.telegraph.co.uk/sport/cricket/rss"

期待您的帮助和建议

谢谢

高塔姆

4 个答案:

答案 0 :(得分:1)

如果您正在处理Feed,则应使用Feedzilla

http://railscasts.com/episodes/168-feed-parsing

http://github.com/pauldix/feedzirra

像魅力一样。

祝你好运!

答案 1 :(得分:0)

您已安装以下内容: libxml2的 的libxml2-dev的 的libxslt 的libxslt-dev的

答案 2 :(得分:0)

Rss页面不是HTML文档,它是XML,因此您应该使用Nokogiri::XML(open(url))

然后查看rss页面的源代码。没有<a>个元素。

文档中的所有链接都是使用<link>标记创建的:

<link>http://www.telegraph.co.uk/sport/football/world-cup-2010/teams/france/7769203/France-2-Costa-Rica-1-match-report.html</link> 

每篇文章的链接也会复制为<guid>标记,因为RSS中的文章ID是它的网址。

<guid>http://www.telegraph.co.uk/sport/football/world-cup-2010/teams/france/7769203/France-2-Costa-Rica-1-match-report.html</guid> 

因此,如果您需要文档中的所有链接,请使用:

url = "http://www.telegraph.co.uk/sport/football/rss"  
doc = Nokogiri::XML(open(url))  
doc.xpath('//link').each do |paragraph|
  puts paragraph.text
end

如果您只需要指向文章的链接,请使用doc.xpath('//guid')

对于许多Feed,只需使用循环

feeds = ["http://www.telegraph.co.uk/sport/football/rss", "http://www.telegraph.co.uk/sport/cricket/rss"]
feeds.each do |url|
  #and here goes code as before
end

答案 3 :(得分:0)

无需循环......只需

puts doc.xpath('//link/text()')

将打印所有链接文字。