[pyar] Hola mundo y primera consulta con lxml.

Matias Eduardo Bordone Carranza mebordone en gmail.com
Mie Sep 8 16:27:51 ART 2010


Hola gente!! Bueno ,como es debido a ca va mi hola mundo.
/**********************************/
hola = 'h' + 'o' + 'l' + 'a' + ' '
hola = hola + 'm' + 'u' + 'n' + 'd' + 'o'
print '%s' % (hola)
/**********************************/

Estoy empezando a jugar  / aprender python y estoy empezando un
pryectito. Asi que como buen
newbie acepto todas las criticas que me hagan para ir mejorando.
Necesito sacar información de una página de internet y lo primero que
se me ocurrio fue tratarlo como xml y usar xpath.
Para eso encontre la librería lxml y decidí usarla.
La idea es sacar información de un articulo de un diario (en este caso
de La Voz el interior por ejemplo) y guardar la informacion relevante
en un xml.
El problema que estoy teniendo ahora es que me da la sensación que
lxml me esta rompiendo de alguna forma la codificación de caracteres.
Aclaro que a lo mejor estoy haciendo cualquiera y no tengo idea.

Código de prueba (aclaro que la elección del articulo fue totalmete
aleatoria, jaja)

# -*- coding: utf-8 -*-
# Mision, ver por que carajo lxml me rompe la codificacion de caracteres.
# Se supone que la voz tiene en el encabezado utf8 como codificacion
from lxml import html, etree
import nltk

Notaxml = html.parse("http://www.lavoz.com.ar/noticias/politica/%E2%80%9Cen-el-pais-de-moyanolandia-suceden-estas-cosas%E2%80%9D")

#opcion 1
Tituloxml = Notaxml.xpath("/html/body/div[@class='layout']/div[@class='Contenido']/div[@class='Columnas
clearfix']/*/div[@class='CD clearfix']/*/div[@class='Art']/h2")
Titulostring = etree.tostring(Tituloxml[0], encoding='UTF-8' )
Titulostring = nltk.clean_html(Titulostring)
print Titulostring

#ocion 2
Titulostring = Notaxml.xpath("/html/body/div[@class='layout']/div[@class='Contenido']/div[@class='Columnas
clearfix']/*/div[@class='CD clearfix']/*/div[@class='Art']/h2/text()")
print Titulostring

#en las dos me reta cuando quiero hacer esto.
Articulo = etree.Element('Articulo')
Diario = etree.SubElement(Articulo, 'Diario')
Diario.text = 'La Voz del Interior'
Titulo = etree.SubElement(Articulo, 'Titulo')
Titulo.text = Titulostring
print(etree.tostring(Articulo, pretty_print=True))
Articuloxml = etree.ElementTree(Articulo)
Articuloxml.write('pru.xml', pretty_print=True)

Salida del código

<h2>Tras el pedido de conciliación, se normalizó la situación en
las plantas</h2>
[u'Tras el pedido de conciliaci\xc3\xb3n, se normaliz\xc3\xb3 la
situaci\xc3\xb3n en las plantas']
Traceback (most recent call last):
  File "experimento.py", line 22, in <module>
    Titulo.text = Titulostring
  File "lxml.etree.pyx", line 821, in lxml.etree._Element.text.__set__
(src/lxml/lxml.etree.c:32944)
  File "apihelpers.pxi", line 653, in lxml.etree._setNodeText
(src/lxml/lxml.etree.c:15311)
  File "apihelpers.pxi", line 1240, in lxml.etree._utf8
(src/lxml/lxml.etree.c:19826)
TypeError: Argument must be string or unicode.

Me podrían tirar una mano (lo ideal para mi seria, flaco aca estas
metiendo fruta, mete esta opcion, o lo que sea) o diganme en que me
estoy equivocando y donde puedo leer para entender que esta pasando.

Muchas gracias.

Matías
--
    "Si tú tienes una manzana y yo tengo una manzana e intercambiamos
    las manzanas, entonces tanto tú como yo seguiremos teniendo una
    manzana. Pero si tú tienes una idea y yo tengo una idea e
    intercambiamos ideas, entonces ambos tendremos dos ideas."
    George Bernard Shaw



More information about the pyar mailing list