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 "&aacute;"  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/

Responder a