[pyar] xml.etree.ElementTree

Augusto adtononi en gmail.com
Lun Dic 16 16:06:20 -03 2019


Depende qué quieras guardar en el .xml.
Yo trabaje con la librería lxml, y para obtener el source code tal como
está en el navegador hago lo siguiente:

source_code = requests.get(url, headers=headers).text
>  tree = lxmlhtml.fromstring(source_code)
>

Después utilizando expresiones Xpath obtengo la información específica que
yo quiero. En mi caso trabaje con noticias, entonces de todo el contenido
solo extraía el título, fecha, texto, etc.

No entiendo por qué necesitarías el source completo, pero de necesitarlo
entonces hace:

with open(filename, 'w', encoding = 'utf-8') as filexml:
>     filexml.write(tree) # o donde hayas metido el requests.get().text
>     filexml.close()
>

Eso solo para guardar el texto, ya después tenes las funciones propias de
lxml para crear los nodos (esto si extraes info específica y querés
ordenarla de determinada manera)



El lun., 16 dic. 2019 a las 15:28, Federico Brest (<federiconbrest en gmail.com>)
escribió:

>
> Tenes un problema con las variables también. En la función save le pasas
>> content y filename, pero después intentas guardar response.text, de donde
>> sale eso?
>>
>
> La verdad es que ya no me acuerdo jajaja
>
>>
>> Yo te recomiendo que generes el xml al momento que obtenés la info de la
>> API, y no hacer las cosas por separado.
>>
>
> Buen consejo! como sería el código entonces?
>
>
>
>>
>> El lun., 16 dic. 2019 15:04, Federico Brest <federiconbrest en gmail.com>
>> escribió:
>>
>>> Cuidado con comprartir las credenciales de la API, esa parte no hace
>>>> falta.
>>>>
>>>
>>> No hay problema con eso, fueron caracteres alfanuméricos colocados al
>>> azar, no son credenciales verdaderas
>>>
>>>>
>>>> Después, tu función getInfoFromApi no devuelve nada. Fijate que tenes
>>>> comentada la línea del content
>>>>
>>>
>>> Si, me percaté de ese detalle y lo descomenté. Aun asi falla la
>>> funcionalidad de escribir el archivo XML
>>>
>>>>
>>>> Tu idea es parar todo el source code de la página a un xml?
>>>>
>>>
>>> La idea es almacenar en un XML la respuesta recibida de la API
>>>
>>> Cualquier ayuda que puedan brindar es más que bienvenida :)
>>> Saludos,
>>>
>>>>
>>>>
>>>> El lun., 16 dic. 2019 11:19, Federico Brest <federiconbrest en gmail.com>
>>>> escribió:
>>>>
>>>>> Muchas gracias por responder tan pronto :)
>>>>> Va de nuevo el código completo:
>>>>>
>>>>> #import json
>>>>> import requests
>>>>> import io
>>>>> import xml.etree.ElementTree as ET
>>>>>
>>>>> def validar_cuit(cuit):
>>>>>     # validaciones minimas
>>>>>     if len(cuit) != 11:
>>>>>         #print("False")
>>>>>         return False
>>>>>
>>>>>     base = [5, 4, 3, 2, 7, 6, 5, 4, 3, 2]
>>>>>
>>>>>     #cuit = cuit.replace("-", "") # remuevo las barras
>>>>>
>>>>>     # calculo el digito verificador:
>>>>>     aux = 0
>>>>>     for i in range(10):
>>>>>         aux += int(cuit[i]) * base[i]
>>>>>
>>>>>     aux = 11 - (aux - (int(aux / 11) * 11))
>>>>>
>>>>>     if aux == 11:
>>>>>         aux = 0
>>>>>     if aux == 10:
>>>>>         aux = 9
>>>>>
>>>>>     #print("True")
>>>>>     return aux == int(cuit[10])
>>>>>
>>>>> def getInfoFromApi(cuit):
>>>>>     custom_header = {
>>>>>         'usuario_apikey': "Q2syVkQ2NW1UN2c3MWREWGSDDSWNQeWxVRnJVUT09",
>>>>>         'Cookie':
>>>>> "__cfduid=de5890d2d1645d87b18692a6ad91d6adsrtvcsf1576011069;
>>>>> PROVEEDOR=l5r3dteuh2rkge4t9qm85tl8sm; ROUTEID=.1",
>>>>>     }
>>>>>
>>>>>     url = 'https://informe.unproveedor.com/api/informes/solicitar/' +
>>>>> str(cuit)
>>>>>     args = {'formato':'xml', 'procesar_forzado':'1', 'cuit': cuit }
>>>>>
>>>>>     response = requests.get(url, headers=custom_header, data=args)
>>>>>     tree = ET.parse(response.text)
>>>>>     root = tree.getroot()
>>>>>     #content = response.json()
>>>>>
>>>>>     print("-- Status Code:", response.status_code)
>>>>>
>>>>>     return content
>>>>>
>>>>> def saveInfo(content, filename):
>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>         #json.dump(content, file, indent=4, ensure_ascii=False)
>>>>>         file.write(response.text)
>>>>>
>>>>> if __name__ == '__main__':
>>>>>     cuit = input("Ingrese un numero de cuit: ")
>>>>>
>>>>>     print("- Obteniendo información de", cuit)
>>>>>     info = getInfoFromApi(cuit)
>>>>>
>>>>>     cuitValido = validar_cuit(cuit)
>>>>>     if cuitValido == False:
>>>>>         print("El Cuit ",cuit," es Invalido")
>>>>>         print("Presione una tecla para Finalizar...")
>>>>>         msvcrt.getch()
>>>>>     else:
>>>>>         print("cuil válido")
>>>>>
>>>>>     filename = cuit + '.xml'
>>>>>     saveInfo(info, filename)
>>>>>     print("- Guardado en", filename)
>>>>>
>>>>>     print("Presione una tecla para finalizar...")
>>>>>     msvcrt.getch()
>>>>>
>>>>> Abrazo, y nuevamente muchas gracias.
>>>>>
>>>>> El lun., 16 dic. 2019 a las 11:14, Lucas Paiva (<
>>>>> lucaspaiva.ar en gmail.com>) escribió:
>>>>>
>>>>>> Como estas? lo que pasa que la cosa esta justamente en la función que
>>>>>> no estas mostrandonos, si tiene las credentials del cliente sacaselas pero
>>>>>> mostranos como traes los datos de la api.
>>>>>> De todas maneras vos decis :
>>>>>> "cuando se supone que supone que deberìa crear un XML con lo que me
>>>>>> devuelve la API, lo que esta haciendo es buscar un archivo local con ese
>>>>>> nombre y me lo muestra en la consola...."
>>>>>>
>>>>>> Y la funcion siguiente hace exactamente eso:
>>>>>>
>>>>>> ef saveInfo(content, filename):
>>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>         file.write(response.text)
>>>>>>
>>>>>> Aca estas escribiendo un archivo y luego imprimir el contenido por
>>>>>> pantalla. y por lo que se entiende del resto del codigo lo estas creando
>>>>>> con extension .XML
>>>>>>
>>>>>> De todas maneras si mal no recuerdo para escribir un archivo XML
>>>>>> valido, deberias hacer algo como:
>>>>>> Importar ET de element.etree y hacer algo como :
>>>>>> my_data = ET.tostring(res_de_api_o_content_xml)
>>>>>> file = ipen("sarasa.xml","w)
>>>>>> file.write(my_data)
>>>>>>
>>>>>> Sory si no esta todo correcto , lo escribí asi nomas sin probar
>>>>>> ningún código.
>>>>>>
>>>>>> Saludos.
>>>>>>
>>>>>> Lucas
>>>>>>
>>>>>> El lun., 16 dic. 2019 a las 11:02, Federico Brest (<
>>>>>> federiconbrest en gmail.com>) escribió:
>>>>>>
>>>>>>> Hola gente,
>>>>>>> Hic eel siguiente script, pero estoy teniendo problemas...cuando se
>>>>>>> supone que supone que deberìa crear un XML con lo que me devuelve la API,
>>>>>>> lo que esta haciendo es buscar un archivo local con ese nombre y me lo
>>>>>>> muestra en la consola....
>>>>>>> Algune podrá darme una mano?
>>>>>>> Envío el código en cuestión:
>>>>>>>
>>>>>>> def saveInfo(content, filename):
>>>>>>>     with io.open(filename, 'w', encoding='utf8') as file:
>>>>>>>         file.write(response.text)
>>>>>>>
>>>>>>> if __name__ == '__main__':
>>>>>>>     cuit = input("Ingrese un numero de cuit: ")
>>>>>>>
>>>>>>>     print("- Obteniendo información de", cuit)
>>>>>>>     info = getInfoFromApi(cuit)
>>>>>>>
>>>>>>> ''' getInfoFromApi es otra funcion que esta declarada en el script.
>>>>>>> No la transcribo porque estan las key de acceso de lcliente...de todas
>>>>>>> formas, esa funcion anda '''
>>>>>>>
>>>>>>>     cuitValido = validar_cuit(cuit) #esta es otra funcion que esta
>>>>>>> declarada en el script
>>>>>>>     if cuitValido == False:
>>>>>>>         print("El Cuit ",cuit," es Invalido")
>>>>>>>         print("Presione una tecla para Finalizar...")
>>>>>>>         msvcrt.getch()
>>>>>>>     else:
>>>>>>>         print("cuil válido")
>>>>>>>
>>>>>>>     filename = cuit + '.xml'
>>>>>>>     saveInfo(info, filename)
>>>>>>>     print("- Guardado en", filename)
>>>>>>>
>>>>>>>
>>>>>>> Desde ya muchas gracias!!
>>>>>>>
>>>>>>> --
>>>>>>> *          Ing. Federico N. Brest*
>>>>>>>   Ingeniero en Sistemas de Información
>>>>>>>             Becario Investigador
>>>>>>>      Universidad Tecnológica Nacional
>>>>>>>       Facultad Regional Buenos Aires
>>>>>>>
>>>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir,
>>>>>>> defender y mantener nuestra libertad*” - Richard Stallman
>>>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>>>> _______________________________________________
>>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>>
>>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>>
>>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>>> de Argentina - http://www.usla.org.ar
>>>>>>
>>>>>> _______________________________________________
>>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>>> Sitio web: http://www.python.org.ar/
>>>>>>
>>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>>
>>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre
>>>>>> de Argentina - http://www.usla.org.ar
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> *          Ing. Federico N. Brest*
>>>>>   Ingeniero en Sistemas de Información
>>>>>             Becario Investigador
>>>>>      Universidad Tecnológica Nacional
>>>>>       Facultad Regional Buenos Aires
>>>>>
>>>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender
>>>>> y mantener nuestra libertad*” - Richard Stallman
>>>>> *P* *Antes de imprimir este mensaje, piense si realmente es
>>>>> necesario. ¡Cuidemos nuestro Ambiente!*
>>>>> _______________________________________________
>>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>>> Sitio web: http://www.python.org.ar/
>>>>>
>>>>> Para administrar la lista (o desuscribirse) entrar a
>>>>> http://listas.python.org.ar/listinfo/pyar
>>>>>
>>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>>> Argentina - http://www.usla.org.ar
>>>>
>>>> _______________________________________________
>>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>>> Sitio web: http://www.python.org.ar/
>>>>
>>>> Para administrar la lista (o desuscribirse) entrar a
>>>> http://listas.python.org.ar/listinfo/pyar
>>>>
>>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>>> Argentina - http://www.usla.org.ar
>>>
>>>
>>>
>>> --
>>> *          Ing. Federico N. Brest*
>>>   Ingeniero en Sistemas de Información
>>>             Becario Investigador
>>>      Universidad Tecnológica Nacional
>>>       Facultad Regional Buenos Aires
>>>
>>> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
>>> mantener nuestra libertad*” - Richard Stallman
>>> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
>>> ¡Cuidemos nuestro Ambiente!*
>>> _______________________________________________
>>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>>> Sitio web: http://www.python.org.ar/
>>>
>>> Para administrar la lista (o desuscribirse) entrar a
>>> http://listas.python.org.ar/listinfo/pyar
>>>
>>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>>> Argentina - http://www.usla.org.ar
>>
>> _______________________________________________
>> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
>> Sitio web: http://www.python.org.ar/
>>
>> Para administrar la lista (o desuscribirse) entrar a
>> http://listas.python.org.ar/listinfo/pyar
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
>
> --
> *          Ing. Federico N. Brest*
>   Ingeniero en Sistemas de Información
>             Becario Investigador
>      Universidad Tecnológica Nacional
>       Facultad Regional Buenos Aires
>
> “*¿El éxito es la meta? Pienso que no. La meta es conseguir, defender y
> mantener nuestra libertad*” - Richard Stallman
> *P* *Antes de imprimir este mensaje, piense si realmente es necesario.
> ¡Cuidemos nuestro Ambiente!*
> _______________________________________________
> Lista de Correo de PyAr - Python Argentina - pyar en python.org.ar
> Sitio web: http://www.python.org.ar/
>
> Para administrar la lista (o desuscribirse) entrar a
> http://listas.python.org.ar/listinfo/pyar
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20191216/c6a537d7/attachment-0001.html>


Más información sobre la lista de distribución pyar