recuperar contenido html

Luis Miguel Morillas morillas en gmail.com
Mie Oct 21 23:14:18 CEST 2009


El día 21 de octubre de 2009 19:05, Antonio Reyes
<areyespgil en gmail.com> 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





Más información sobre la lista de distribución Python-es