2016-03-17 3 views
1

, поэтому я работаю над проектом, который сбрасывает данные с веб-сайта с данными об авариях/смерти от оружия. Вот как выглядит веб-сайт: http://www.gunviolencearchive.org/officer-involved-shootingsСкребок HTML-таблицы с Ruby и Nokogiri

Я пытаюсь захватить каждую строку таблицы и сделать объект (экземпляр?, Извините, что я новичок в ruby) с данными из этой строки и распечатать его в консоли , Прямо сейчас массив @occurances возвращает массив из тех же данных 26 раз. Очевидно, что она переписывается с первой строкой. Как бы вы предположили, что я храню каждый из этих экземпляров?

Вот мой код, (выбор) - это адрес веб-сайта.

def self.data_from_choice(choice) 
     doc = Nokogiri::HTML(open(choice)) 
     @occurances = [] 
     doc.xpath("//tr").each do |x| 
      date = doc.css("td")[0].text 
      state = doc.css("td")[1].text 
      city = doc.css("td")[2].text 
      deaths = doc.css("td")[4].text 
      injured = doc.css("td")[5].text 
      source = doc.search(".links li.last a").attr("href").value 
      @occurances << {:date => date, :state => state, :city => city, :deaths => deaths, :injured => injured, :source => source} 
     end 
     puts @occurances 
     end 
+0

Это очень важный вопрос. Как ваше приложение работает с этими данными? #peace –

+0

Добро пожаловать в SO. Пожалуйста, прочитайте «[mcve]». Важно, чтобы ваш вопрос содержал достаточно, чтобы люди могли запускать его без необходимости переписывать свой код или писать для него обертку. –

+0

@maxpleaner сейчас это просто проект, поэтому я могу хорошо научиться, но я хотел бы больше сделать с данными позже! –

ответ

1

В цикле для каждой строки вы вызываете doc.css(...). Это вызывает поиск из верхней части документа каждый раз (то есть от doc). Я думаю, что вы хотите сделать поиск относительно строки, которая у вас есть в переменной x.

Так это изменить:

date = doc.css("td")[0].text 

к этому

date = x.css("td")[0].text 

и аналогично для state, city и т.д.

+0

Спасибо, Мэтт, это имеет смысл сейчас! –

Смежные вопросы