Ruby 如何获取HTML页面的当前URL
我正在用Nokogiri抓取一个网站。这个特殊的网站以不同的方式处理绝对URL 如果我给它一个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,但是,
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<mpl=default<mplcache=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。