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 <ksian1...@gmail.com> escribió: > 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/ > > -- ________________________________________ 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/