如何使用Nokogiri和Ruby解析数据并将其存储到变量中

问题描述 投票:0回答:1

[当我分配变量名,例如service_namesname_array时,它们为零,而对类变量@@product_names没有任何帮助。

我使用Pry尝试了代码,但没有将其存储到变量中并且可以正常工作。它具有我需要的值。

例如,在创建更清晰的代码之前,我将其拆分成更多的变量:

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


  class KefotoScraper::CLI
      @@product_names =[]
      PAGE_URL = "https://kefotos.mx/"


    def call
binding.pry
    puts "These are the services that Kefoto offers:"
    #list_products
    puts "which service would you like to select?"
    @selection = gets.chomp
    view_price_range
    puts "Would you like to go back to the service menu? y/n"
    answer = gets.chomp
      if answer == "y"
      call
      end
    end

    private

    def home_html
        # @home_html ||=
        #     HTTParty.get root_path

        Nokogiri::HTML(open(PAGE_URL))


    end
    #
    # # TODO: read about ruby memoization
    # def home_node
    #
    #     @home_node ||=
    #      Nokogiri::HTML(PAGE_URL)
    # end

def service_names
      @service_names = home_html.css(".nav-link").map do
        |link| link['href'].to_s.gsub(/.php/, "")
      end
      @service_names.each do |pr|
        @@product_names << pr
      end
    end

     def list_products
       i = 1
       n = 0

       while @@product_names.length < n
        @@product_names.each do |list_item|

         puts "#{i} #{list_item[n]}"
       i += 1
       n += 1
       end
      end
   end

     def view_price_range
       price_range = []
       @service_links.each do |link|
         if @service = link
           link.css(".row").map {|price| price["p"].value}
            price_range << p
         end
         price_range
     end


    def service_links
        @service_links ||=
        home_html.css(".nav-item").map { |link| link['href'] }
    end

end
end

@@product_names应包含来自]的代码>

home_html.css(".nav-link").map { |link| link['href'] }.to_s.gsub(/.php/, "")

稍后再返回数组。

这就是撬中的样子:

9] pry(#<KefotoScraper::CLI>)> home_html.css(".nav-link").map { |link| link['href'] }.to_s.gsub(/.php/, "").split(",")
=> ["[\"foto-enmarcada\"", " \"impresion-fotografica\"", " \"photobooks\"", " \"impresion-directa-canvas\"", " \"impresion-acrilico\"", " \"fotoregalos\"]"]
[10] pry(#<KefotoScraper::CLI>)> home_html.css(".nav-link").map { |link| link['href'] }.to_s.gsub(/.php/, "").split(",")[0]
=> "[\"foto-enmarcada\""

当我分配变量名,例如service_names和name_array时,它们为零,而类变量@@ product_names没有任何意义。我使用Pry尝试了代码,但没有将其存储到变量中...

arrays ruby variables nokogiri
1个回答
0
投票

Nokogiri的命令行IRB是您的朋友。在外壳上使用nokogiri "https://kefotos.mx/"启动它:

© www.soinside.com 2019 - 2024. All rights reserved.