Как очистить веб-сайт и вывести данные в XML-файл с помощью Nokogiri? - PullRequest
0 голосов
/ 12 февраля 2019

Я пытался очистить данные с помощью Nokogiri и HTTParty и могу успешно очистить данные с веб-сайта и распечатать их на консоли, но я не могу понять, как вывести данные в XML-файл в репозитории.

В данный момент код выглядит следующим образом:

class Scraper

  attr_accessor :parse_page

  def initialize
    doc = HTTParty.get("https://store.nike.com/gb/en_gb/pw/mens-nikeid-lifestyle-shoes/1k9Z7puZoneZoi3?ref=https%253A%252F%252Fwww.google.com%252F")
    @parse_page ||= Nokogiri::HTML(doc)
  end

  def get_names
    item_container.css(".product-display-name").css("p").children.map { |name| name.text }.compact
  end

  def get_prices
    item_container.css(".product-price").css("span.local").children.map { |price| price.text }.compact
  end

  private

  def item_container
    parse_page.css(".grid-item-info")
  end

  scraper = Scraper.new
  names = scraper.get_names
  prices = scraper.get_prices

  (0...prices.size).each do |index|
    puts " - - - Index #{index + 1} - - -"
    puts "Name: #{names[index]} | Price: #{prices[index]}"
  end

end

Я пытался изменить метод .each, чтобы включить File.write (), но все, что он делает, это пишет последнюю строкувывод в XML-файл.Буду признателен за понимание того, как правильно анализировать данные, я новичок в очистке.

1 Ответ

0 голосов
/ 13 февраля 2019

Я пытался изменить метод .each, чтобы включить File.write (), но все, что он делает, это записывает последнюю строку вывода в файл XML.

Находится ли метод File.write в цикле each?Я думаю, что здесь происходит, вы перезаписываете файл на каждой итерации, и поэтому вы видите только последнюю строку.

Попробуйте поместить цикл each в блок метода File.open, например:

File.open(yourfile, 'w') do |file|
  (0...prices.size).each do |index|
    file.write("your text")
  end
end

Я также рекомендую прочитать о Nokogiri :: XML :: Builder и затем сохранить его вывод в файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...