2017-09-18 4 views
1

nokogiri를 사용하여 웹 사이트를 고치고 있습니다. 이 특정 웹 사이트는 절대 URL을 다르게 처리합니다. 무슨 일 나는이ruby ​​nokogiri html 페이지에서 현재 URL 가져 오기

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

처럼에게 URL을주고는 https 버전으로 리디렉션됩니다, 그것은 또한 URL의 긴 버전으로 재 것이다. 이 괜찮하고 정말 내 스크레이퍼에 영향을주지 않습니다

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

에 예를 들어,

http://www.website.com/name

같은 링크가집니다. 그러나, 내가 현재 스크래퍼에게 현재 URL이 무엇인지 말할 수만 있다면, 나는 그것을 피할 수있는 특정한 경우가 있습니다.

내 질문에, 위의 링크를 내 page 변수에 전달한 후 리디렉션 발생 후 해당 페이지의 현재 URL을 어떻게 얻을 수 있습니까?

답변

1

open_uri_redirections 보석을 사용한다고 가정합니다. (: ruby ​​2.4+에서는 allow_redirections가 필요하지 않습니다)

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를 사용하여) 그 일을 위해서만 기계화를 포함하고 싶지 않기로 결정했습니다. –