Forum: Italian Ruby user group (senza oggetto)

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0e17cafb81abc6febf4779d0710c2611?d=identicon&s=25 luca sabato (Guest)
on 2009-04-13 18:36
(Received via mailing list)
Lista qualcuno ha una soluzione migliore di questa per prelevare i
link da una pagina
<code>
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... ;)
</code>

grazie per le risposte :)
luca sabato
---
nope --- the [nomad code]
email: ilramingo@gmail.com
pensieri: http://sabatia.it
D716730ae3c9f3322f49d002192befc6?d=identicon&s=25 Alessandro Scolavino (ninjinka)
on 2009-04-13 18:52
luca sabato wrote:
> Lista qualcuno ha una soluzione migliore di questa per prelevare i
> link da una pagina
> <code>
> 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... ;)
> </code>
>
> grazie per le risposte :)
> luca sabato
> ---
> nope --- the [nomad code]
> email: ilramingo@gmail.com
> pensieri: http://sabatia.it

dipende cosa devi farci...

se devi fare operazioni sul DOM puoi usare un selettore css ad esempio
8768bcdbda1adf80e4da6744268868af?d=identicon&s=25 Pietro Giorgianni (giorgian)
on 2009-04-13 19:01
(Received via mailing list)
Il 13 aprile 2009 18.35, luca sabato <ilramingo@gmail.com> ha scritto:
>                #poi qui faccio qualcosa con il link... ;)
> </code>

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
0e17cafb81abc6febf4779d0710c2611?d=identicon&s=25 luca sabato (Guest)
on 2009-04-13 19:20
(Received via mailing list)
Il giorno 13/apr/09, alle ore 18:52, Alessandro Scolavino 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
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato
---
nope --- the [nomad code]
email: ilramingo@gmail.com
pensieri: http://sabatia.it
0e17cafb81abc6febf4779d0710c2611?d=identicon&s=25 luca sabato (Guest)
on 2009-04-13 19:24
(Received via mailing list)
Grazie per la risposta ;)

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

> Il 13 aprile 2009 18.35, luca sabato <ilramingo@gmail.com> 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
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato
---
nope --- the [nomad code]
email: ilramingo@gmail.com
pensieri: http://sabatia.it
8768bcdbda1adf80e4da6744268868af?d=identicon&s=25 Pietro Giorgianni (giorgian)
on 2009-04-13 19:28
(Received via mailing list)
Il 13 aprile 2009 19.24, luca sabato <ilramingo@gmail.com> 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
7de465f222e6a9c7fe658e370d0bfe05?d=identicon&s=25 Paolo Montrasio (pmontrasio)
on 2009-04-14 09:45
luca sabato wrote:
> Lista qualcuno ha una soluzione migliore di questa per prelevare i
> link da una pagina
> <code>
> 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... ;)
> </code>

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
0e17cafb81abc6febf4779d0710c2611?d=identicon&s=25 luca sabato (Guest)
on 2009-04-14 11:00
(Received via mailing list)
Il giorno 14/apr/09, alle ore 09:45, Paolo Montrasio 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
> Ml@lists.ruby-it.org
> http://lists.ruby-it.org/mailman/listinfo/ml

luca sabato
---
nope --- the [nomad code]
email: ilramingo@gmail.com
pensieri: http://sabatia.it
0c79c9f33bb2aebfc175a7596f6ca099?d=identicon&s=25 Tucano (Guest)
on 2009-04-16 10:10
(Received via mailing list)
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:
This topic is locked and can not be replied to.