Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/09/2010, 20:13
mebordone
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1
Antigüedad: 13 años, 7 meses
Puntos: 0
Hola mundo y primera consulta con lxml

Hola gente!! Bueno ,como es debido a ca va mi hola mundo.

Código:
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)
Código:
# -*- 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

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.