Sto usando Nokogiri per estrarre i collegamenti da una pagina ma vorrei ottenere il percorso assoluto anche se quello sulla pagina è relativo. Come posso realizzare questo?Come posso ottenere l'URL assoluto quando estrae i collegamenti usando Nokogiri?
risposta
Nokogiri non è correlato, a parte il fatto che fornisce l'ancoraggio del collegamento per iniziare. Utilizzare biblioteca di Ruby URI per gestire percorsi:
absolute_uri = URI.join(page_url, href).to_s
visto in azione:
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 risposta più contorto qui in passato utilizzato URI.parse(root).merge(URI.parse(href)).to_s
.
Grazie a @pguardiario per il miglioramento.
È necessario verificare se l'URL è assoluto o relativo con controllo se iniziale da http:
Se l'URL è relativo è necessario aggiungere l'host a questo URL. Non puoi farlo con nokogiri. È necessario elaborare tutto l'URL interno per renderlo come assoluto.
risposta Phrogz' va bene, ma più semplicemente:
URI.join(base, url).to_s
Puoi dare un esempio di cosa sono base e url? – lulalala
'base =" http://www.google.com/somewhere "; url = '/ over/there'; 'Credo che i nomi delle variabili di pguardino siano un po 'imprecisi –
- 1. Come estrarre l'URL assoluto dai relativi collegamenti HTML usando Jsoup?
- 2. Come posso ottenere collegamenti href da HTML usando Python?
- 3. Come posso ottenere JAXB2 per emettere i collegamenti CamelCase?
- 4. Come ottenere le parole chiave Meta usando Nokogiri?
- 5. Come ottenere img src usando Nokogiri e at_css
- 6. Come navigare nel DOM usando Nokogiri
- 7. Come posso ottenere il nome dell'elemento principale di un documento XML usando Nokogiri?
- 8. Come ottenere il percorso assoluto di un file usando tkFileDialog?
- 9. Come posso verificare se un URL è assoluto usando Python?
- 10. Aiuto necessario con lo screen scraping usando anemone e nokogiri
- 11. Come ottenere tutti i collegamenti di una pagina Web utilizzando Ruby
- 12. Perché non posso caricare Nokogiri?
- 13. estrae le immagini da pdf usando pdfbox
- 14. Come posso ottenere i rami git remoti usando Node.js?
- 15. Come posso ottenere i post dalla categoria usando lo slug?
- 16. Come convertire i collegamenti in stile Markdown usando regex?
- 17. Nokogiri e formattazione XML quando si inseriscono i tag
- 18. Come posso ottenere un'immagine usando jquery ajax?
- 19. Come posso selezionare tutti i collegamenti alle immagini in Prototype
- 20. come utilizzare i metodi Nokogiri .xpath & .at_xpath
- 21. Disabilita e abilita TUTTI i collegamenti ipertestuali usando JQuery
- 22. Come ottenere Git su Windows per ignorare i collegamenti simbolici
- 23. Come si estrae un url da una stringa usando python?
- 24. Posso creare una serie di collegamenti usando link_to in Rails?
- 25. Can ffmpeg estrae i dati dei sottotitoli
- 26. Come posso creare XML usando Nokogiri :: XML :: Builder con un trattino nel nome dell'elemento?
- 27. Latex - estrae la sottostringa/ignora i caratteri
- 28. Come posso verificare i collegamenti segnale/slot durante la compilazione?
- 29. Come posso rendere selezionabili i collegamenti in un EditText?
- 30. Disabilita tutti i collegamenti all'interno di IFRAME usando jQuery
Nokogiri potrebbe essere correlato a questo. Ecco come: se un documento html contiene un tag base, la soluzione sopra non funzionerà correttamente. In tal caso, il valore dell'attributo href del tag di base deve essere utilizzato al posto di page_url. Dai un'occhiata alla spiegazione più dettagliata di @ david-thomas qui: http://stackoverflow.com/questions/5559578/havling-links-relative-to-root – draganstankovic