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@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a