我正在使用nokogiri抓取一个网站。这个特定的网站以不同的方式处理绝对网址。发生的事情是我给它一个这样的网址
page = Nokogiri::HTML(open(link, :allow_redirections => :all))
它将重定向到https
版本,并且还会重定向到网址的长版本。例如,像
变成
http://www.website.com/other-area/name
这很好,并没有真正影响我的刮刀。但是,有一些边缘情况,如果我可以告诉我的刮刀当前网址是什么,我可以避免它。
所以我的问题是,在我将上述链接传递给我的page
变量后,如何在重定向发生后获取该页面的当前网址?
答案 0 :(得分:1)
假设您正在使用open_uri_redirections
宝石。 (:ruby 2.4+中不需要allow_redirections)
只需保存open-uri
' s 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)
答案 1 :(得分:1)
使用mechanize,然后你就可以:
inspectdb