Creo que BeautifulSoup hace todo por mí 2015-05-16 15:30 GMT-03:00 Alberto Perez <ksian1...@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. <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/