[Python-es] Entity 'aacute' not defined

Miguel Beltran R. yourpadre en gmail.com
Lun Mayo 18 06:01:40 CEST 2015


Tambien es otra buena libreria, dependiendo que quieras y con que cuentes
para hacerlo.

Yo trabaje con lxml en lugar de Beatifulsoup pero no recuerdo porque.

El 16 de mayo de 2015, 17:41, Alberto Perez <ksian1685 en gmail.com> escribió:

> Creo que BeautifulSoup hace todo por mí
>
> 2015-05-16 15:30 GMT-03:00 Alberto Perez <ksian1685 en gmail.com>:
>
> Miguel Beltra:
>> La verdad que nunca me puse a investigar sobre lxml. Ya me pongo a
>> googlear sobre el tema. Quizás tenes razón.
>> Gracias.
>>
>> 2015-05-16 14:11 GMT-03:00 Miguel Beltran R. <yourpadre en gmail.com>:
>>
>> Parece que tienes algo en tu función "escape" que modifica la pagina (en
>>> etree.XML(escape(tablas)))
>>>
>>> "aacute" deberia ser "á"  que se muetra como "á"
>>>
>>> Otra cosa es que no creo que sea conveniente usar expreciones regulares,
>>> ¿seguro que no lo puedes hacer usando solo el selector de lxml?
>>>
>>> El 7 de mayo de 2015, 19:10, Alberto Perez <ksian1685 en gmail.com>
>>> escribió:
>>>
>>>> Hola,
>>>>
>>>> Soy nuevo en python y siempre tuve problemas con el uso de expresiones
>>>> regulares, sin embargo me animé a escribir un pequeño script que haga un
>>>> par de peticiones ¨POST para obtener información de una página. El problema
>>>> es que me arrojaba el siguiente error:  lxml.etree.XMLSyntaxError:
>>>> Entity 'aacute' not defined, line 1, column 3747
>>>>
>>>> Googlé y descubrí que tengo que habilitar aacute en <!DOCTYPE> o algo
>>>> así, probé con la librería codecs, pero no sé muy bien cómo usarla, porque
>>>> me tira diferentes errores. Finalmente creí dar con la solución cuando usé
>>>> “escape” que me arrojó: lxml.etree.XMLSyntaxError: Start tag expected,
>>>> '<' not found, line 1, column 1
>>>>
>>>> solo debería borrar el carácter ese que está de más, entonces probé
>>>> recorrer la variable usando la siguiente expresión:
>>>>
>>>>     variable2=(escape(variable2)).replace(*">>"*,*">"*)
>>>>
>>>>     variable2=(escape(variable2)).replace(*"<<"*,*"<"*)
>>>>
>>>> Más pienso el código y más me convenzo que mi problema está en el uso
>>>> de expresiones regulares. Si quieren echar un vistazo, les dejo el código.
>>>> Si a alguien se les ocurre una expresion regular que ponga fin a mi
>>>> problema, gracias, sino dejaré el código en mi escritorio para cuando gane
>>>> mayor experiencia en python
>>>>
>>>>
>>>>
>>>> import *httplib*, urllib, urllib2, re, *xml*, *codecs*, *unicodedata*
>>>>
>>>> from lxml import etree
>>>>
>>>> from lib2to3.fixer_util import *String*
>>>>
>>>> from xml.sax.saxutils import escape
>>>>
>>>>
>>>>
>>>> def *conectar*(CALLE, ALTURA):
>>>>
>>>>
>>>>
>>>>     tablas_abre=*"<table>"*
>>>>
>>>>     tablas_cierra=*"</table>"*
>>>>
>>>>
>>>>
>>>>     parametros = urllib.urlencode({*'CALLE'*: CALLE,*'ALTURA'*: ALTURA,
>>>> *'dedonde'*: *'fonos'*})
>>>>
>>>>     i=1
>>>>
>>>>     h_cookie=urllib2.HTTPCookieProcessor()
>>>>
>>>>     opener= urllib2.build_opener(h_cookie)
>>>>
>>>>     #f = urllib2.*urlopen*("
>>>> http://www.webdedatos.com/ZIPs/cpas/zipscalles.php", *parametros*)
>>>>
>>>>     urllib2.install_opener(opener)
>>>>
>>>>     f=urllib2.urlopen(*"http://www.webdedatos.com/ZIPs/cpas/zipscalles.php
>>>> <http://www.webdedatos.com/ZIPs/cpas/zipscalles.php>"*, parametros);
>>>>
>>>>     #print f.read()
>>>>
>>>>     aux=f.read()
>>>>
>>>>     veces=int(cantidad(aux))
>>>>
>>>>
>>>>
>>>>     t=traer_solo_tabla(aux)
>>>>
>>>>
>>>>
>>>>     #*cabeceras* = {"Content-type": "application/x-*www*-form-
>>>> *urlencoded*","Accept": "text/plain"}
>>>>
>>>>     #abrir_conexion = httplib.HTTPConnection("www.webdedatos.com:80")
>>>>
>>>>     #abrir_conexion.request("POST", "/ZIPs/*cpas*/zipscalles.php",
>>>> *parametros*, *cabeceras*)
>>>>
>>>>     #*respuesta* = abrir_conexion.getresponse()
>>>>
>>>>     #print respuesta.status
>>>>
>>>>     i+1;
>>>>
>>>>     while(i<=veces):
>>>>
>>>>         f = urllib2.urlopen(*"http://www.webdedatos.com/ZIPs/cpas/zipscalles.php?verPagina=
>>>> <http://www.webdedatos.com/ZIPs/cpas/zipscalles.php?verPagina=>"*
>>>> +str(veces))
>>>>
>>>>         veces=veces-1
>>>>
>>>>         aux3=f.read()
>>>>
>>>>         t+=traer_solo_tabla(aux3)
>>>>
>>>>     tablas=tablas_abre+t+tablas_cierra
>>>>
>>>>     #print f.read()
>>>>
>>>>     #t+=f.read()
>>>>
>>>>
>>>>
>>>>     return tablas
>>>>
>>>>
>>>>
>>>> def *cantidad*(sitio):
>>>>
>>>>     vari = re.search(*"1 de.+</center></b><center>"*,sitio)
>>>>
>>>>     sub_palabra = vari.group(0)
>>>>
>>>>     sub_palabra = sub_palabra.replace(*"1 de"*,*" "*)
>>>>
>>>>     sub_palabra = sub_palabra.replace(*"</center></b><center>"*,*" "*)
>>>>
>>>>     return sub_palabra
>>>>
>>>>
>>>>
>>>> def *traer_solo_tabla*(variable):
>>>>
>>>>     vari = re.search(*"<br><tr><td ALIGN=...+"*,variable)
>>>>
>>>>     variable2 = vari.group()
>>>>
>>>>
>>>>
>>>>     variable2=variable2.replace(*"<br>"*,*" "*)
>>>>
>>>>
>>>>
>>>>     variable2=variable2.replace(*"<table>"*,*" "*)
>>>>
>>>>     variable2=variable2.replace(*"</table>"*,*" "*)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     variable2=variable2.replace(*"<center>"*,*" "*)
>>>>
>>>>     variable2=variable2.replace(*"</center>"*,*" "*)
>>>>
>>>>     variable2=(escape(variable2)).replace(*">>"*,*">"*)
>>>>
>>>>     variable2=(escape(variable2)).replace(*"<<"*,*"<"*)
>>>>
>>>>
>>>>
>>>>     regexp=re.compile(*"<a
>>>> href=..........................................>"*)
>>>>
>>>>     variable2=regexp.sub(*" "*,variable2)
>>>>
>>>>     variable2=variable2.replace(*"</a>"*,*" "*)
>>>>
>>>>     return variable2
>>>>
>>>>
>>>>
>>>> def *imprimir*(tablas, BARRIO):
>>>>
>>>>     #el codigo de imprimir lo copie de un foro solo le agregué escape
>>>> para saber cual era el error
>>>>
>>>>     print tablas
>>>>
>>>>     tabla = etree.XML(escape(tablas))
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>     rows = iter(tabla)
>>>>
>>>>     *headers* = [col.text for col in next(rows)]
>>>>
>>>>     for row in rows:
>>>>
>>>>         values = [col.text for col in row]
>>>>
>>>>         if(values[4]==BARRIO):
>>>>
>>>>             print values
>>>>
>>>>
>>>>
>>>> def *main*():
>>>>
>>>>
>>>>
>>>>     ALTURA = int(input(*"ingrese la altura de la calle: "*))
>>>>
>>>>     CALLE = raw_input(*"ingrese el nombre de la calle: "*)
>>>>
>>>>     BARRIO = raw_input(*"ingrese el nombre del barrio: "*)
>>>>
>>>>
>>>>
>>>>     respuesta=conectar(CALLE, ALTURA)
>>>>
>>>>     imprimir(respuesta, BARRIO)
>>>>
>>>>
>>>>
>>>>     #print *tablas*
>>>>
>>>>
>>>>
>>>> if __name__ == *'__main__'*:
>>>>
>>>>     main()
>>>>
>>>>
>>>> Desde ya, muchas gracias.
>>>>
>>>> _______________________________________________
>>>> Python-es mailing list
>>>> Python-es en python.org
>>>> https://mail.python.org/mailman/listinfo/python-es
>>>> FAQ: http://python-es-faq.wikidot.com/
>>>>
>>>>
>>>
>>>
>>> --
>>> ________________________________________
>>> Lo bueno de vivir un dia mas
>>> es saber que nos queda un dia menos de vida
>>>
>>> _______________________________________________
>>> Python-es mailing list
>>> Python-es en python.org
>>> https://mail.python.org/mailman/listinfo/python-es
>>> FAQ: http://python-es-faq.wikidot.com/
>>>
>>>
>>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
>


-- 
________________________________________
Lo bueno de vivir un dia mas
es saber que nos queda un dia menos de vida
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20150517/9dbb3bfd/attachment.html>


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