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