Lista qualcuno ha una soluzione migliore di questa per prelevare i
link da una pagina
res = Net::HTTP.get_response(cpage.link) #cpage.link è un ogetto URI
res.body.each_line do |line|
#per ogni linea del body estrai i link
#fixme non riconosce le immagini ed i feed
if line =~/href="([http:\w\/\.\-_]+)\">?/
#poi qui faccio qualcosa con il link... ;)
grazie per le risposte
luca sabato
nope — the [nomad code]
email: [email protected]
pensieri: http://sabatia.it
luca sabato wrote:
Lista qualcuno ha una soluzione migliore di questa per prelevare i
link da una pagina
res = Net::HTTP.get_response(cpage.link) #cpage.link � un ogetto URI
res.body.each_line do |line|
#per ogni linea del body estrai i link
#fixme non riconosce le immagini ed i feed
if line =~/href="([http:\w\/\.\-_]+)\">?/
#poi qui faccio qualcosa con il link... ;)
grazie per le risposte
luca sabato
nope — the [nomad code]
email: [email protected]
pensieri: http://sabatia.it
dipende cosa devi farci…
se devi fare operazioni sul DOM puoi usare un selettore css ad esempio
Il 13 aprile 2009 18.35, luca sabato [email protected] ha scritto:
#poi qui faccio qualcosa con il link... ;)
il guaio è che così trovi solo i link assoluti e ti perdi tutti quelli
relativi.
se non vuoi o non puoi usare un qualche parser html, forse è meglio
cercare gli oggetti html che possono contenere una url, che so:
/<img [^>]*src=“([^”]+)“|<a [^>]*href=”([^“]+)”|etcetcetc/
pietro
Il giorno 13/apr/09, alle ore 18:52, Alessandro S. ha scritto:
if line =~/href="([http:\w\/\.\-_]+)\">?/
dipende cosa devi farci…
se devi fare operazioni sul DOM puoi usare un selettore css ad esempio
non ho capito la tua risposta, da premettere che è uno script e non
gira su rails,
quello che mi serve è un metodo per estrapolare da “res.body” i link
in stringe da passare poi a “URI.parse(stringa)”
lo script è visionabile qui
–
Posted via http://www.ruby-forum.com/.
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
luca sabato
nope — the [nomad code]
email: [email protected]
pensieri: http://sabatia.it
Il 13 aprile 2009 19.24, luca sabato [email protected] ha scritto:
il mio obbiettivo e di raccogliere tutti i link per poi controllarne
lo stato, qualsiasi metodo è ben accetto
allora dai dai un’occhiata alla classe Spider, magari va bene.
http://spider.rubyforge.org/
pietro
Grazie per la risposta
Il giorno 13/apr/09, alle ore 19:00, Pietro G. ha scritto:
Il 13 aprile 2009 18.35, luca sabato [email protected] ha scritto:
…
il guaio è che così trovi solo i link assoluti e ti perdi tutti
quelli relativi.
in effetti mi sono reso conto che non riconosce i link relativi
se non vuoi o non puoi usare un qualche parser html, forse è meglio
cercare gli oggetti html che possono contenere una url, che so:
/<img [^>]*src=“([^”]+)“|<a [^>]*href=”([^“]+)”|etcetcetc/
il mio obbiettivo e di raccogliere tutti i link per poi controllarne
lo stato, qualsiasi metodo è ben accetto, solo che non trovoil metodo
di ottenerli, visiona lo script http://github.com/nope/my-ruby-
script/ cosi mi suggerisci una soluzione alternativa
questa è una bozza, lo script in effetti non mi genera la lista di
tutti i link del sito ma solo della home page
pietro
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
luca sabato
nope — the [nomad code]
email: [email protected]
pensieri: http://sabatia.it
Il giorno 14/apr/09, alle ore 09:45, Paolo M. ha scritto:
if line =~/href="([http:\w\/\.\-_]+)\">?/
Con un parser guadagni in robustezza ed in flessibilità , casomai un
fanno i browser.
mmmm questa soluzione mi piace!!! grazie!
Paolo
Posted via http://www.ruby-forum.com/.
Ml mailing list
[email protected]
http://lists.ruby-it.org/mailman/listinfo/ml
luca sabato
nope — the [nomad code]
email: [email protected]
pensieri: http://sabatia.it
luca sabato wrote:
Lista qualcuno ha una soluzione migliore di questa per prelevare i
link da una pagina
res = Net::HTTP.get_response(cpage.link) #cpage.link � un ogetto URI
res.body.each_line do |line|
#per ogni linea del body estrai i link
#fixme non riconosce le immagini ed i feed
if line =~/href="([http:\w\/\.\-_]+)\">?/
#poi qui faccio qualcosa con il link... ;)
Ti consiglio un approccio differente, usando un vero parser HTML. Guarda
per esempio Hpricot. Ad
http://wiki.github.com/why/hpricot/hpricot-basics oltre al codice trovi
degli esempi.
Con un parser guadagni in robustezza ed in flessibilità , casomai un
domani ti servisse estrarre anche qualche attributo (quelli possono
stare su altre linee). Inoltre ti aiuterà a trovare anche immagini e
feed che l’approccio con il =~/ / rende di difficile identificazione.
Attento infine al parser che scegli: quelli XML di solito non vanno bene
perché il codice che si trova normalmente nelle pagine non è markup XML
valido (ci sono spesso errorini anche quando dicono di essere XHTML).
Meglio uno HTML come Hpricot, che chiude un occhio sugli errori come
fanno i browser.
Paolo
Magari ti torna utile questa regexp: /(src=|href=)"’["’]/
Cattura src e href, taglia apici (singoli e doppi), cattura URL
Io l’avevo inserita in un parsr dei link della pagina con gsub e un
block
change all links in the page
@body.gsub!(/(src=|href=)["'](.*?)["']/) { |x|
# try to parse as URL
# FIXME here I rescue an error but nothing more
begin
oldurl = URI.parse($2)
rescue URI::InvalidURIError
oldurl = $2
end
case oldurl
when URI then
if oldurl.absolute? then
newurl = $1 + "\"" + "http://" + local + ':' +
localport.to_s + “/” + $2 + “”"
else
newurl = $1 + “”" + “http://” + local + ‘:’ +
localport.to_s + “/http://” + @url.host + “/” + $2 + “”"
end
end
}
Ciao
Il giorno 13/apr/09, alle ore 18:35, luca sabato ha scritto: