如何获取 HTML 页面的当前 URL
How to get the current URL for a HTML page
我正在使用 Nokogiri 抓取一个网站。这个特定网站以不同方式处理绝对 URLs。
如果我给它 URL 喜欢:
page = Nokogiri::HTML(open(link, :allow_redirections => :all))
它将重定向到 HTTPS 版本,并且还会重定向到 URL 的长版本。例如,一个 link 喜欢
http://www.website.com/name
变成
http://www.website.com/other-area/name
这很好,并没有真正影响我的抓取器,但是,在某些边缘情况下,如果我可以告诉我的抓取器当前 URL 是什么,我可以避免它们。
在我将上面的 link 传递给我的 page
变量后,如何在重定向发生后获取该页面的当前 URL?
我假设您正在使用 open_uri_redirections
gem 因为 :allow_redirections
在 Ruby 2.4+ 中不是必需的。
保存 OpenURI 的结果 open
:
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)
使用Mechanize,那么你可以:
agent = Mechanize.new
page = agent.get url
puts page.uri # this will be the redirected url
我正在使用 Nokogiri 抓取一个网站。这个特定网站以不同方式处理绝对 URLs。
如果我给它 URL 喜欢:
page = Nokogiri::HTML(open(link, :allow_redirections => :all))
它将重定向到 HTTPS 版本,并且还会重定向到 URL 的长版本。例如,一个 link 喜欢
http://www.website.com/name
变成
http://www.website.com/other-area/name
这很好,并没有真正影响我的抓取器,但是,在某些边缘情况下,如果我可以告诉我的抓取器当前 URL 是什么,我可以避免它们。
在我将上面的 link 传递给我的 page
变量后,如何在重定向发生后获取该页面的当前 URL?
我假设您正在使用 open_uri_redirections
gem 因为 :allow_redirections
在 Ruby 2.4+ 中不是必需的。
保存 OpenURI 的结果 open
:
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)
使用Mechanize,那么你可以:
agent = Mechanize.new
page = agent.get url
puts page.uri # this will be the redirected url