Re: recuperar contenido html

Luis Miguel Morillas <[email protected]>
Newsgroups gmane.comp.python.general.castellano
Message-ID <[email protected]>
El día 21 de octubre de 2009 19:05, Antonio Reyes
<[email protected]> escribió:
>
> El Martes, 20 de Octubre de 2009 22:43:58 Luis Miguel Morillas escribió:
>
>
>> La solución más rápida es la siguiente. Usa amara2 (easy_install amara)
>> from amara.bindery import html
>> doc =
>>
>>  html.parse(r'http://nlel.areyesp77.operaunite.com/file_sharing/content/art
>> icle_1.html') comentarios = doc.xml_select(u"//span[@class='score']")
>> for c in comentarios:
>>    texto_comentario = unicode(c)
>>    if 'Funny' in texto_comentario or 'Insightful' in texto_comentario:
>>        print texto_comentario  # haz aquí lo que consideres con el
>>  comentario.
>> Es esto lo que necesitas?
>
>>> Por lo que se ve, hay que relacionar la puntuación con los comentarios.
>>> Heprobado un poco y lo he conseguido con el '..' de XPath para subir un
>>> nivel:
>
>
>>> from amara.bindery import html
>
>>>
>>> doc=html.parse(r'http://nlel.areyesp77.operaunite.com/file_sharing/content/article_1.html')
>>> comentarios=doc.xml_select(u"//div[@class='commentBody']/..")
>>> for c in comentarios:
>>>   score=unicode(c.xml_select(u"//span[@class='score']")[0]))

### Hay un error en esta ruta: sólo hay que buscar descendientes:
        score=unicode(c.xml_select(u".//span[@class='score']")[0]))

>>>   if u'Funny' in score or u'Insightful' in score:
>>>       comment=unicode(c.div[1])
>>>       print score, comment
>
> He estado haciendo pruebas con este código pero hay un error en él.
> Explico, recupera el comentario etiquetado como 'Funny' pero además recupera
> los hijos de ese comentario y los considera como si también tuvieran esa
> etiqueta.
> Por ejemplo, en el archivo de prueba, el score "Funny" aparece sólo en 8
> comentarios pero al ejecutar el script recupera 415 comentarios que no
> tienen ese score pero que dependen de estos 8.
> Cómo se podría solucionar esto?
>
>

Es que el documento no está muy estructurado que digamos. Se podría
analizar y buscar una búsqueda más optimizada.

Supongo que funcionará mejor esto por lo que he ojeado en el fichero
(habría que testear bien):

from amara.bindery import html
doc = html.parse(r'http://nlel.areyesp77.operaunite.com/file_sharing/content/article_1.html')

comentarios = doc.xml_select(u"//span[@class='score']")
for c in comentarios:
   texto_comentario = unicode(c)
   if 'Funny' in texto_comentario or 'Insightful' in texto_comentario:
      contenido = c.xml_select(u"../../../../div[@class='commentBody']")[0]
      print c, contenido

-- lm


> --
> Usando el novísimo cliente de correo de Opera: http://www.opera.com/mail/
>
> _______________________________________________
> Lista de correo Python-es
> http://listas.aditel.org/listinfo/python-es
> FAQ: http://listas.aditel.org/faqpyes
>
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.