2010-05-26 6 views
0

Je suis nouveau dans le monde de Ruby and Rails.Problème d'extraction de texte à partir de flux RSS

J'ai vu des rails coulés 190 et j'ai juste commencé à jouer avec. J'ai utilisé gadget de sélection pour trouver le CSS et XPath

J'ai le code suivant ..

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 

Quand j'extrait le texte d'une page HTML normale avec css, je pouvais obtenir le texte extrait sur la console . Mais quand j'essaye de faire la même chose avec CSS ou XPath pour le flux RSS pour l'URL suivante mentionnée dans le code ci-dessus, je ne reçois aucun résultat.

Comment extraire du texte à partir de flux RSS? J'ai également une autre question idiote.

est-il un moyen d'extraire le texte à partir de 2 différents flux et l'afficher sur la console

quelque chose comme

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

Dans l'attente de votre aide et suggestions

Merci Vous

Gautam

+0

J'ai essayé d'utiliser ".to_s" mais cela n'a toujours pas fonctionné !! – gkolan

Répondre

0

page Flux est pas document HTML, il est XML, vous devez donc utiliser Nokogiri::XML(open(url))

afficher ensuite le code source de la page rss. Il n'y a pas d'éléments <a>.

Tous les liens dans le document sont créés avec la balise <link>:

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

Liens vers chaque article sont également dupliqués comme étiquette <guid>, parce que l'ID de l'article en RSS est-il son URL.

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

Donc, si vous avez besoin tous les liens dans le document, utilisez:

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

Si vous avez besoin uniquement des liens vers des articles, utilisez doc.xpath('//guid')

En ce qui concerne les nombreux aliments, utilisez simplement la boucle

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 
0

Vous avez t Hese installé: libxml2 libxml2-dev libxslt libxslt-dev

0

Pas besoin de la boucle ... tout simplement

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

imprimera tout le texte de lien.

Questions connexes