Проблема извлечения текста из RSS-каналов - PullRequest
0 голосов
/ 26 мая 2010

Я новичок в мире 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

Когда я извлекал текст с обычной HTML-страницы с помощью css, я мог получить извлеченный текст на консоли.

Но когда я пытаюсь сделать то же самое с CSS или XPath для RSS-канала для следующего URL, упомянутого в коде выше, я не получаю никакого вывода.

Как извлечь текст из RSS-каналов ??

У меня также есть еще один глупый вопрос.

Есть ли способ извлечь текст из 2 разных каналов и отобразить его на консоли

что-то вроде

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

Ждем вашей помощи и предложений

Спасибо

Гаутама

Ответы [ 4 ]

1 голос
/ 27 мая 2010

Если вы обрабатываете корма, вы должны использовать Feedzilla

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

http://github.com/pauldix/feedzirra

Работает как шарм.

Удачи!

0 голосов
/ 27 мая 2010

Нет необходимости в цикле ... просто

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

напечатает весь текст ссылки.

0 голосов
/ 27 мая 2010

Страница 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 - это ее URL.

<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')

Что касается многих каналов, просто используйте цикл

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 голосов
/ 27 мая 2010

У вас установлено: libxml2 libxml2-DEV LibXSLT LibXSLT-DEV

...