【问题标题】:Ruby Invalid argument @ rb_sysopen [duplicate]Ruby无效参数@ rb_sysopen [重复]
【发布时间】:2021-07-12 18:18:23
【问题描述】:

我是红宝石新手。我的 Windows 环境中的以下代码有问题:

    require 'open-uri'
    require 'nokogiri'

    url = "https://www.rottentomatoes.com/m/spectre_2015"
    page = Nokogiri::HTML(open(url))

    print page

ruby_code

并得到这个错误:

PS C:\Users\xxxxx\Desktop\crawler> ruby​​ crawl.rb crawl.rb:5:in initialize': Invalid argument @ rb_sysopen - https://www.rottentomatoes.com/m/spectre_2015 (Errno::EINVAL) from crawl.rb:5:in open' 从 crawl.rb:5:in `' PS C:\Users\xxxxx\Desktop\crawler>

  1. 下载/安装 ruby​​ + Visual Studio 代码
  2. 创建文件夹爬虫+文件 crawl.rb
  3. gem install nokogiri + gem install open-uri
  4. 运行代码

感谢每一个帮助......

【问题讨论】:

  • 如果您在此处粘贴代码而不是图像链接,将会很有帮助。
  • 您使用什么版本的 Ruby 和“nokogiri”以及“open-uri”gem?
  • 我的错......我添加了代码......
  • -ruby 3.0.2p107(2021-07-07 修订版 0db68f0233)[x64-mingw32]
  • @SergioTulentsev 他们只更改了 Ruby 2.4 中的文档,在 Ruby 2.7 中添加了弃用警告。不管这种变化如何,从 2.4 之前的版本开始就有很多教程,open 仍然是默认值。

标签: ruby


【解决方案1】:

你调用的方法:open属于Kernel类:

> method :open
=> #<Method: Object(Kernel)#open(*)>

我相信你想打电话给URI.open,因为你需要open-uri gems。

page Nokogiri::HTML(URI.open(url))

【讨论】:

    【解决方案2】:

    正如您在Kernel#open 的文档中看到的那样,如果您的路径参数不是以| 字符开头,则将其视为文件[bold强调我的]:

    open(path [, mode [, perm]] [, opt]) → io or nil

    open(路径 [, 模式 [, perm]] [, opt]) {|io|块 } → 对象

    创建一个连接到给定流、文件或子进程的 IO 对象。

    如果path 不以竖线字符 (|) 开头,则将其视为要打开的文件的名称,使用指定的模式(默认为“r”)。

    所以,你告诉 Ruby 打开一个名为 https: 的当前目录的子目录,并在该子目录中打开一个名为 www.rottentomatoes.com 的子目录,并在该子目录中打开一个名为 m 的子目录,然后在该子目录中打开一个名为spectre_2015 的文件。 Ruby 告诉你的是,它找不到那个文件。

    如果您尝试下载该 URI 解析到的文档,那么您可以使用作为 Ruby 标准库一部分的 open-uri 库。 open-uri 库提供了一个名为 URI::open 的方法,它可以让您将 URI 视为 IO stream

    require 'open-uri'
    require 'nokogiri'
    
    url = 'https://www.rottentomatoes.com/m/spectre_2015'
    page = Nokogiri.HTML(URI.open(url))
    
    print page
    

    【讨论】:

    • 成功了!谢谢...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2020-04-20
    • 2014-06-29
    • 1970-01-01
    相关资源
    最近更新 更多