[pyar] xml.etree.ElementTree
Augusto
adtononi en gmail.com
Lun Dic 16 16:06:55 -03 2019
Olvide indicar, que la importo así
from lxml import html as lxmlhtml
>
El lun., 16 dic. 2019 a las 16:06, Augusto (<adtononi en gmail.com>) escribió:
> 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/8899f2d0/attachment-0001.html>
Más información sobre la lista de distribución pyar