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