2017-09-18 24 views
1

nokogiriを使用してウェブサイトを削っています。この特定のウェブサイトは絶対URLを別々に扱います。何が起こるかというと、私はこのruby​​ nokogiri htmlページから現在のURLを取得

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

のようにそれにURLを与え、それがhttpsバージョンにリダイレクトされます、そして、それはまた、URLの長いバージョンにリダイレクトされますです。例えば、

http://www.website.com/name

のようなリンクが

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

になり、これは素晴らしいですし、本当に私のスクレーパーには影響を与えません。しかし、私がスクレーパーに現在のURLを伝えることができれば、私はそれを避けることができます。

私の質問は、上記のリンクをpage変数に渡した後、リダイレクトが発生した後にそのページの現在のURLを取得する方法はありますか?

答えて

1

open_uri_redirections gemを使用しているとします。 (:allow_redirectionsはruby 2.4+では不要です)

open-uriopenの結果を保存するだけです。

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) 
0

使用後、あなたが行うことができ、機械化:答えのための

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

感謝を!私はこれを実際にやろうとしていましたが、私はそのことだけを機械化することを望まないので、上記の答えに(open-uriを使って)行くことにしました。 –

関連する問題