[当我分配变量名,例如service_names
和name_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尝试了代码,但没有将其存储到变量中...
Nokogiri的命令行IRB是您的朋友。在外壳上使用nokogiri "https://kefotos.mx/"
启动它: