Hola mundo y primera consulta con lxml
Publicado por Matias (1 intervención) el 09/09/2010 04:15:51
ola 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
/**********************************/
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
Valora esta pregunta
0