ruby nokogiri从html页面

时间:2017-09-18 03:28:23

标签: ruby nokogiri

我正在使用nokogiri抓取一个网站。这个特定的网站以不同的方式处理绝对网址。发生的事情是我给它一个这样的网址

page = Nokogiri::HTML(open(link, :allow_redirections => :all))

它将重定向到https版本,并且还会重定向到网址的长版本。例如,像

这样的链接

http://www.website.com/name

变成

http://www.website.com/other-area/name

这很好,并没有真正影响我的刮刀。但是,有一些边缘情况,如果我可以告诉我的刮刀当前网址是什么,我可以避免它。

所以我的问题是,在我将上述链接传递给我的page变量后,如何在重定向发生后获取该页面的当前网址?

2 个答案:

答案 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&ltmpl=default&ltmplcache=2&emr=1&osid=1#>
page = Nokogiri::HTML(r)

答案 1 :(得分:1)

使用mechanize,然后你就可以:

inspectdb