Ruby `初始化';:当使用Nokogiri打开站点时,没有此类文件或目录@rb_sysopen

Ruby `初始化';:当使用Nokogiri打开站点时,没有此类文件或目录@rb_sysopen,ruby,web-scraping,nokogiri,Ruby,Web Scraping,Nokogiri,我创建了一个CLI程序,它使用Scraper类来刮取站点。我正在使用Nokogiri和开放URI。上面的错误正在弹出。我在网上查了一下,没有找到帮助 我确保网站没有打字错误 从CLI类中,我使用site as arg创建一个新的Scraper类 class KefotoScraper::CLI attr_accessor :kefoto_scraper def initialize site = "https://www.kefotos.mx" @

我创建了一个CLI程序,它使用Scraper类来刮取站点。我正在使用Nokogiri和开放URI。上面的错误正在弹出。我在网上查了一下,没有找到帮助

我确保网站没有打字错误

从CLI类中,我使用site as arg创建一个新的Scraper类

class KefotoScraper::CLI

    attr_accessor :kefoto_scraper

      def initialize
      site = "https://www.kefotos.mx"
      @kefoto_scraper = Scraper.new(site)
      end
end
在Scraper中,我有以下代码:

class Scraper

  attr_accessor :doc, :product_names, :site, :name, :link


  def initialize(site)
    @site = site
    @doc = doc
    @product_names = product_names
    @name = name
    @link = link
    @price_range = [].uniq
    scrape_product
  end

  def get_html
    @doc = Nokogiri::HTML(open(@site))
    @product_names = doc.css(".navbar-nav li")
    product_names
  end

  def scrape_product
    get_html.each {|product|
      @name = product.css("span").text
      plink = product.css("a").attr("href").text
      @link = "#{site}#{link}"
      link_doc = Nokogiri::HTML(open(@link))
      pr = link_doc.scan(/[\$£](\d{1,3}(,\d{3})*(\.\d*)?)/)
      prices = pr_link.text
        prices.each {|price|
          if @price_range.include?(price[0]) == false
            @price_range << price[0]
            end
        }

      new_product = Products.new(@name, @price_range)
      puts new_product
  }
  end

end
类刮刀
属性访问器:doc、:product\u name、:site、:name、:link
def初始化(站点)
@站点=站点
@doc=doc
@产品名称=产品名称
@name=name
@链接=链接
@价格范围=[].uniq
刮削产品
终止
def get_html
@doc=Nokogiri::HTML(打开(@site))
@产品名称=doc.css(“.navbar nav li”)
产品名称
终止
def刮除产品
获取_html.each{|产品|
@name=product.css(“span”).text
plink=product.css(“a”).attr(“href”).text
@link=“#{site}#{link}”
link_doc=Nokogiri::HTML(打开(@link))
pr=link\u doc.scan(/[\$)(\d{1,3}(,\d{3})*(\.\d*)?)/)
价格=pr_link.text
价格。每个{价格|
如果@price_range.include?(价格[0])==false

@默认情况下,price_range
open
对本地文件而不是URL进行操作。该错误表示“我在硬盘上找不到名为
https://www.kefotos.mx

通过要求
打开uri
库,您可以让它在uri上工作:

require 'open-uri'
这将使您的代码正常工作,但最好使用适当的HTTP客户端读取HTTP资源,因为攻击者可能会使用过载的
open()
来访问计算机硬盘上的文件

例如,如果只使用net/http:

# At the top of your scraper.rb:
require 'net/http'

# Then, in your class:
link_doc = Nokogiri::HTML(Net::HTTP.get(URI(@link)))

您好!!谢谢您的回复。我添加了“要求”net/http“