Выводить несколько раз - PullRequest
       4

Выводить несколько раз

0 голосов
/ 08 февраля 2012

У меня есть следующий код:

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

time = Time.new

url = "http://mobile.bahn.de/bin/mobil/bhftafel.exe/dox?input=Richard-Strauss-Stra%DFe%2C+M%FCnchen%23625127&date=" + 
  time.strftime("%d%m%Y") +
  "&time=" +
  time.strftime("%H") +
  "%3A" +
  time.strftime("%M") +
  "&productsFilter=1111111111000000&REQTrain_name=&maxJourneys=10&start=Suchen&boardType=Abfahrt&ao=yes"

doc = Nokogiri::HTML(open(url))
doc.xpath('//div//p').remove
doc.encoding = 'UTF-8'
doc = doc.xpath('//div').each do |node|
  text = node.text.gsub(/\n([ \t]*\n)+/,"\n",).gsub(/^\s+|\s+$/,'').gsub("Startseite", '').gsub("Impressum", '')
  puts text unless text.empty?
end

У меня две проблемы:

  1. Код выводится три раза, а не один раз.
  2. Немецкие "умлауты" типа äü.

1 Ответ

0 голосов
/ 08 февраля 2012

Исходный HTML-код длинный и без отступов, поэтому его очень сложно отладить.

Но я думаю, вам нужно заменить:

doc = doc.xpath('//div').each do |node|

С:

doc = doc.xpath('//body/div').each do |node|

Первый также включал все элементы <div>, поэтому он включал //body/div, а затем отдельно включал <div> внутри //body/div

У меня не было проблем с умлаутовыми символами при использовании puts, но у меня были проблемы с записью их в файл. В чем ваша проблема? Лучше всего, если вы создадите новый вопрос о переполнении стека для проблемы умляутов.

...