(senza oggetto)


#1

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 :slight_smile:
luca sabato

nope — the [nomad code]
email: removed_email_address@domain.invalid
pensieri: http://sabatia.it


#2

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 :slight_smile:
luca sabato

nope — the [nomad code]
email: removed_email_address@domain.invalid
pensieri: http://sabatia.it

dipende cosa devi farci…

se devi fare operazioni sul DOM puoi usare un selettore css ad esempio


#3

Il 13 aprile 2009 18.35, luca sabato removed_email_address@domain.invalid 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


#4

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
http://github.com/nope/my-ruby-script/


Posted via http://www.ruby-forum.com/.


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato

nope — the [nomad code]
email: removed_email_address@domain.invalid
pensieri: http://sabatia.it


#5

Il 13 aprile 2009 19.24, luca sabato removed_email_address@domain.invalid 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


#6

Grazie per la risposta :wink:

Il giorno 13/apr/09, alle ore 19:00, Pietro G. ha scritto:

Il 13 aprile 2009 18.35, luca sabato removed_email_address@domain.invalid 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 :frowning:

pietro


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato

nope — the [nomad code]
email: removed_email_address@domain.invalid
pensieri: http://sabatia.it


#7

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!!! :wink: grazie!

Paolo

Posted via http://www.ruby-forum.com/.


Ml mailing list
removed_email_address@domain.invalid
http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato

nope — the [nomad code]
email: removed_email_address@domain.invalid
pensieri: http://sabatia.it


#8

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


#9

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: