Ruby 如何获取HTML页面的当前URL

Ruby 如何获取HTML页面的当前URL,ruby,nokogiri,Ruby,Nokogiri,我正在用Nokogiri抓取一个网站。这个特殊的网站以不同的方式处理绝对URL 如果我给它一个URL,比如: page = Nokogiri::HTML(open(link, :allow_redirections => :all)) 它将重定向到HTTPS版本,也将重定向到URL的长版本。例如,像 http://www.website.com/name 变成 http://www.website.com/other-area/name 这很好,不会真正影响我的scraper,但是,

我正在用Nokogiri抓取一个网站。这个特殊的网站以不同的方式处理绝对URL

如果我给它一个URL,比如:

page = Nokogiri::HTML(open(link, :allow_redirections => :all))
它将重定向到HTTPS版本,也将重定向到URL的长版本。例如,像

http://www.website.com/name
变成

http://www.website.com/other-area/name
这很好,不会真正影响我的scraper,但是,在某些边缘情况下,如果我能告诉我的scraper当前的URL是什么,我可以避免它们


在我将上面的链接传递到我的
页面
变量之后,如何在重定向发生后获取该页面的当前URL?

我假设您使用的是
打开的uri\u重定向
gem,因为
:allow\u重定向
在Ruby 2.4+中不是必需的

保存OpenURI的
打开的结果

require 'open-uri'
r = open('http://www.google.com/gmail')
r.base_uri
# #<URI::HTTPS https://accounts.google.com/ServiceLogin?service=mail&passive=true&rm=false&continue=https://mail.google.com/mail/&ss=1&scc=1&ltmpl=default&ltmplcache=2&emr=1&osid=1#>
page = Nokogiri::HTML(r)
需要“打开uri”
r=打开('http://www.google.com/gmail')
r、 基本uri
# #
page=Nokogiri::HTML(r)

使用Mechanize,然后您可以执行以下操作:

agent = Mechanize.new
page = agent.get url
puts page.uri # this will be the redirected url

谢谢你的回答!我本来打算这样做的,但我决定使用上面的答案(使用
openuri
),因为我不想只为了这一点而包括mechanize。