Estoy usando Nokogiri para extraer enlaces de una página, pero me gustaría obtener la ruta absoluta aunque la de la página sea relativa. ¿Cómo puedo lograr esto?¿Cómo puedo obtener la URL absoluta al extraer enlaces usando Nokogiri?
Respuesta
Nokogiri no está relacionado, aparte del hecho de que te da el ancla de enlace para empezar. URI utilizar la biblioteca de Ruby a administrar rutas:
absolute_uri = URI.join(page_url, href).to_s
visto en acción:
require 'uri'
# The URL of the page with the links
page_url = 'http://foo.com/zee/zaw/zoom.html'
# A variety of links to test.
hrefs = %w[
http://zork.com/ http://zork.com/#id
http://zork.com/bar http://zork.com/bar#id
http://zork.com/bar/ http://zork.com/bar/#id
http://zork.com/bar/jim.html http://zork.com/bar/jim.html#id
/bar /bar#id
/bar/ /bar/#id
/bar/jim.html /bar/jim.html#id
jim.html jim.html#id
../jim.html ../jim.html#id
../ ../#id
#id
]
hrefs.each do |href|
root_href = URI.join(page_url,href).to_s
puts "%-32s -> %s" % [ href, root_href ]
end
#=> http://zork.com/ -> http://zork.com/
#=> http://zork.com/#id -> http://zork.com/#id
#=> http://zork.com/bar -> http://zork.com/bar
#=> http://zork.com/bar#id -> http://zork.com/bar#id
#=> http://zork.com/bar/ -> http://zork.com/bar/
#=> http://zork.com/bar/#id -> http://zork.com/bar/#id
#=> http://zork.com/bar/jim.html -> http://zork.com/bar/jim.html
#=> http://zork.com/bar/jim.html#id -> http://zork.com/bar/jim.html#id
#=> /bar -> http://foo.com/bar
#=> /bar#id -> http://foo.com/bar#id
#=> /bar/ -> http://foo.com/bar/
#=> /bar/#id -> http://foo.com/bar/#id
#=> /bar/jim.html -> http://foo.com/bar/jim.html
#=> /bar/jim.html#id -> http://foo.com/bar/jim.html#id
#=> jim.html -> http://foo.com/zee/zaw/jim.html
#=> jim.html#id -> http://foo.com/zee/zaw/jim.html#id
#=> ../jim.html -> http://foo.com/zee/jim.html
#=> ../jim.html#id -> http://foo.com/zee/jim.html#id
#=> ../ -> http://foo.com/zee/
#=> ../#id -> http://foo.com/zee/#id
#=> #id -> http://foo.com/zee/zaw/zoom.html#id
La respuesta más complicado aquí anteriormente utilizados URI.parse(root).merge(URI.parse(href)).to_s
.
Gracias a @pguardiario por la mejora.
Necesita verificar si la URL es absoluta o relativa con la marca si comienza por http:
Si la URL es relativa necesita agregar el host a esta URL. No puedes hacer eso por nokogiri. Necesitas procesar todas las URL dentro para renderizar como absolutas.
respuesta Phrogz' está bien, pero más simplemente:
URI.join(base, url).to_s
¿Puede dar un ejemplo de qué base y URL son? – lulalala
'base =" http://www.google.com/somewhere "; url = '/ over/there'; 'Creo que los nombres variables de pguardino son un poco imprecisos –
- 1. ¿Cómo extraer la URL absoluta de los enlaces HTML relativos usando Jsoup?
- 2. obtener la URL absoluta con EL
- 3. obtener la URL absoluta (base) en Sinatra
- 4. ¿Cómo puedo verificar si una URL es absoluta usando Python?
- 5. ¿Cómo obtener palabras clave meta usando Nokogiri?
- 6. ¿Puedo obtener la ruta absoluta al script actual en KornShell?
- 7. ¿Cómo obtengo innerHtml usando la gema Nokogiri
- 8. ¿Cómo puedo obtener enlaces href desde HTML usando Python?
- 9. Url absoluta en jsp
- 10. ¿Cómo puedo obtener la URL de redirección usando javascript?
- 11. ¿Cómo puedo obtener la URL de destino usando cURL?
- 12. ¿Cómo obtener una URL absoluta de webapp desde ExternalContext?
- 13. pyramid: obtener la URL absoluta de la aplicación
- 14. cómo extraer último valor de la URL usando jQuery
- 15. Obtener URL absoluta de la ruta relativa (método refactorizado)
- 16. ¿Cómo puedo extraer datos EXIF usando PerlMagick?
- 17. ¿Cómo puedo acortar una URL usando Python?
- 18. Obtener ruta absoluta de una url en java
- 19. URL absoluta de la base + URL relativa en C#
- 20. Asp MVC Enlace de acción url absoluta
- 21. ¿Cómo puedo obtener la ruta absoluta al directorio de instalación de Eclipse?
- 22. Cómo obtener enlaces RTSP Android
- 23. ¿Cómo puedo encontrar la URL absoluta de una acción en ASP.NET MVC?
- 24. WIN32_FIND_DATA - Obtener la ruta absoluta
- 25. Cómo extraer URL del texto
- 26. ¿Cómo uso XPath en Nokogiri?
- 27. URL absoluta de la ruta relativa
- 28. HTML Treebuilder XPath para extraer enlaces
- 29. Visualización de una ubicación absoluta de enlaces
- 30. ¿Cómo extraer URL completa con HtmlAgilityPack - C#
Nokogiri podría estar relacionado con esto. He aquí cómo: si un documento html contiene una etiqueta base, la solución anterior no funcionará correctamente. En ese caso, se debe usar el valor del atributo href de la etiqueta base en lugar de page_url. Eche un vistazo a la explicación más detallada de @david-thomas aquí: http://stackoverflow.com/questions/5559578/havling-links-relative-to-root – draganstankovic