Ruby 是否有一个打开uri的更新,它会改变您调用用户代理的方式?

Ruby 是否有一个打开uri的更新,它会改变您调用用户代理的方式?,ruby,web-scraping,open-uri,Ruby,Web Scraping,Open Uri,在《Instant Nokogiri》一书中,它有一个用户代理应用程序,用于在浏览《纽约时报》网站时欺骗浏览器,以获取头条新闻 我正在阅读这本书,但代码有点过时,但我更新了它 我的版本是: 我不相信我在试图“写作”。不确定为什么“只读”错误会阻止此运行。在我添加用户代理信息之前,它正在工作 请参阅OpenURI的文档: URI.open("http://www.ruby-lang.org/en/", "User-Agent" => "R

在《Instant Nokogiri》一书中,它有一个用户代理应用程序,用于在浏览《纽约时报》网站时欺骗浏览器,以获取头条新闻

我正在阅读这本书,但代码有点过时,但我更新了它

我的版本是:

我不相信我在试图“写作”。不确定为什么“只读”错误会阻止此运行。在我添加用户代理信息之前,它正在工作

请参阅OpenURI的文档:

URI.open("http://www.ruby-lang.org/en/",
  "User-Agent" => "Ruby/#{RUBY_VERSION}",
  "From" => "foo@bar.invalid",
  "Referer" => "http://www.ruby-lang.org/") {|f|
  # ...
}

选项是散列。您正在传递一个字符串。

根据,您应该指定这是用户代理,例如
Nokogiri::HTML(open('HTML')http://nytimes.com’,“User Agent”=>browser))
但是我不确定该教程的内容,因为它大约从2008年6月1日起就一直是一样的。互联网是一个巨大的垃圾场,到处都是旧信息。检查信息发布的日期非常重要,如果不是最新信息,请非常小心。始终从官方文档开始,因为它应该是最新的,然后向后操作。@engineersmnky,它也在1.8.6中。作为警告,删除网站通常违反了他们的TOS。在互联网的狂野时代,这是很普遍的,但现在人们对它表示不满。相反,您需要依赖源代码提供的API。API非常容易创建,而且速度更快,不易出错。有时我们需要刮刀;我已经写了数百篇,因为我与一家从事分析的公司合作,比如为大公司提供服务,但通常都是搜索API并使用它。它有助于防止您被禁止,并降低CPU和网络负载。最后,将Sinatra代码绑定到另一个站点的响应时间不是一个好做法。如果NYT服务器运行缓慢,则您的站点将运行缓慢。相反,您应该有一个定期运行的辅助脚本,检查该页面是否已更新,如果已更新,则检索并解析该页面,并更新一个包含必要信息的小备份数据库,然后由Sinatra代码访问该数据库以提供信息。不要使用线程,只需编写一个简单的基于cron的脚本,或者在服务器启动时启动脚本,检查脚本,然后睡眠一小时,检查更改,然后睡眠。
invalid access mode Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) (ArgumentError)
AppleWebKit/536.30.1 (KHTML, like Gecko) Version/6.0.5 Safari/536.30.1 (URI::HTTP resource is read only.)
URI.open("http://www.ruby-lang.org/en/",
  "User-Agent" => "Ruby/#{RUBY_VERSION}",
  "From" => "foo@bar.invalid",
  "Referer" => "http://www.ruby-lang.org/") {|f|
  # ...
}