使用在一个方法中声明的变量在另一个方法中打开网页

时间:2017-04-01 19:18:24

标签: ruby methods web-scraping open-uri

我正在开发一个CLI项目,并试图通过使用另一个方法中声明的url变量来打开一个网页。

def self.open_deal_page(input)
  index = input.to_i - 1
  @deals = PopularDeals::NewDeals.new_deals
  @deals.each do |info|
  d = info[index]
  @product_url = "#{d.url}"
  end
  @product_url.to_s
  puts "They got me!"
end

def self.deal_page(product_url)
  #self.open_deal_page(input)
  deal = {}
  html = Nokogiri::HTML(open(@product_url))
  doc = Nokogiri::HTML(html)
  deal[:name] = doc.css(".dealTitle h1").text.strip
  deal[:discription] = doc.css(".textDescription").text.strip
  deal[:purchase] = doc.css("div a.button").attribute("href")
  deal
  #binding.pry
end

但是我收到了这个错误。

  `open': no implicit conversion of nil into String (TypeError)

任何可能的解决方案?非常感谢你。

1 个答案:

答案 0 :(得分:1)

尝试在@product_url方法中返回open_deal_page,因为现在您正在返回puts "They got me!",并且还要注意您的product_url是在{{1}内创建的阻止,因此,它将无法访问,尝试创建它之前作为空each,然后您可以返回它。

string

在您的def open_deal_page(input) ... # Create the variable product_url = '' # Assign it the value deals.each do |info| product_url = "#{info[index].url}" end # And return it product_url end 方法中,告诉Nokogiri打开您作为参数传递的product_url。

deal_page