Nokogiri цена не показывает - PullRequest
0 голосов
/ 22 марта 2019

Может кто-нибудь объяснить, как я могу получить значение цены, используя nokogiri? Значения, которые появляются на скребке, который я создал, это this

Costa Rica
<span class="ProductListElement__price"> </span>
India
<span class="ProductListElement__price"> </span>
Indonesia
<span class="ProductListElement__price"> </span>
Colombia
<span class="ProductListElement__price"> </span>
Nicaragua
<span class="ProductListElement__price"> </span>
Ethiopia
<span class="ProductListElement__price"> </span>
Master Origin Pack (50 cápsulas)
<span class="ProductListElement__price"> </span>
CAFÉ İSTANBUL
<span class="ProductListElement__price"> </span>
Envivo Lungo
<span class="ProductListElement__price"> </span>
Fortissio Lungo
<span class="ProductListElement__price"> </span>
Vivalto Lungo
<span class="ProductListElement__price"> </span>
Linizio Lungo
<span class="ProductListElement__price"> </span>
Livanto
<span class="ProductListElement__price"> </span>
Capriccio
<span class="ProductListElement__price"> </span>
Volluto
<span class="ProductListElement__price"> </span>
Cosi
<span class="ProductListElement__price"> </span>
Kazaar
<span class="ProductListElement__price"> </span>
Dharkan
<span class="ProductListElement__price"> </span>
Ristretto
<span class="ProductListElement__price"> </span>
Arpeggio
<span class="ProductListElement__price"> </span>
Roma
<span class="ProductListElement__price"> </span>
Ristretto Decaffeinato
<span class="ProductListElement__price"> </span>
Arpeggio Decaffeinato
<span class="ProductListElement__price"> </span>
Volluto Decaffeinato
<span class="ProductListElement__price"> </span>
Vivalto Lungo Decaffeinato
<span class="ProductListElement__price"> </span>
Vanilio
<span class="ProductListElement__price"> </span>
Caramelito
<span class="ProductListElement__price"> </span>

Мой контроллер такой:

class CupsController < ApplicationController

    class Entry
      def initialize(name, price)
        @name = name
        @price = price

      end
      attr_reader :name
      attr_reader :price

    end

    def cups
        require 'open-uri'
        require 'nokogiri'

        doc = Nokogiri::HTML(open('https://www.nespresso.com/pt/pt/order/capsules'))
        entries = doc.css("article.ProductListElement")
        @entriesArray = []
        entries.each do |entry|

            name = entry.css('.ProductListElement__name').text
            price = entry.css('span.ProductListElement__price')


          @entriesArray << Entry.new(name, price)
          @name = name
          @price = price

        end
        render template: 'cups/home'
    end
end

1 Ответ

0 голосов
/ 24 марта 2019

Вот что я получаю за каждый результат:

<span class="ProductListElement__price"> </span>

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

Чтобы иметь возможность очищать динамически загружаемые данные, вам нужно использовать библиотеку, такую ​​как Watir , которая поддерживается Rails 5.

С Watir вы можете подождать, пока все сценарии будут выполнены и все данные загружены, прежде чем пытаться очистить сайт.

...