Как извлечь данные из XML с помощью Nokogiri - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь очистить веб-страницу и извлечь уникальный идентификатор для каждого списка, например, "перечисление_328".

Это необработанные данные из инспектора Firefox:

<div id="result_container" class="listings js-listings-container">
  <div class="listing-item result js-listing-item" id="listing_328">
  <div class="listing-item result js-listing-item" id="listing_389">
  <div class="listing-item result js-listing-item" id="listing_129">

Всего шесть объявлений.

Я думаю, что это получает детей:

elements = parsed_page.xpath('//div[@id="result_container"]/div');

Вот основной код для очистки страницы:

require 'nokogiri'
require 'byebug'
require 'webdrivers'
require 'watir'

def scraper

   url ="....."
   browser = Watir::Browser.new :firefox  
   browser.goto(url)
   sleep(5)

   parsed_page = Nokogiri::HTML(browser.html)

   byebug

end

scraper
browser.close

parsed_page:

#<Nokogiri::XML::Element:0x3fe0bfc48ea4 name="div" attributes=[#<Nokogiri::XML::Attr:0x3fe0bfc48d8c name="id" value="result_container">, #<Nokogiri::XML::Attr:0x3fe0bfc48d64 name="class" value="listings js-listings-container">] children=[#<Nokogiri::XML::Text:0x3fe0bfc4d51c "\n  ">, #<Nokogiri::XML::Element:0x3fe0bfc4d24c name="div" attributes=[#<Nokogiri::XML::Attr:0x3fe0bfc4d0f8 name="class" value="listing-item result js-listing-item">, #<Nokogiri::XML::Attr:0x3fe0bfc4d0bc name="id" value="listing_328">] 

Я ищу для извлечения listing_item значений "перечисление_328", "перечисление_389" и т. Д.

Я могу вывести parsed_page в текст и извлечь идентификатор.

У меня нет совпадения с:

elements.find {|n| puts n.inner_html.match(/(id=.listing_\d\d\d)/)}

но я получаю совпадение в другом месте для элементов в другом формате.

elements.find {|n| puts n.inner_html.match(/data-listing-id=.(\d\d\d)/)}

Могу ли я сделать лучше?

У меня нет идентификатора для детей.

1 Ответ

1 голос
/ 19 июня 2019

Вы можете получить их с:

parsed_page.search('.listing-item').map{ |div| div['id'] }
...