I am trying to create an API connection and response is looking like below. I need to parse this data and turn it into a pd dataframe and/or create loop to find specific information belong to tags.
Below is the code i try to run but it returns with empty list, and it looks not iterable.
Also it is not convertible to a data frame for now. What steps should I take to handle this data?
import requests import pandas as pd import xml.etree.ElementTree as ET response = """<?xml version = "1.0" encoding = "utf-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <SOAP-ENV:Body> <Desperados_Clientes_V2.DESPERADOSResponse xmlns="TrainsWebb_V16"> <Sdtdesperadosclient xmlns="TrainsWebb_V16"> <SDTDesperadosClientItem xmlns="TrainsWebb_V16"> <AESA>10555555555 </AESA> <DOCUMENTO>1666666666</DOCUMENTO> <REMITENTE>888888888 </REMITENTE> <NM_REMITENTE>ABDULREZZAK S.A.S. </NM_REMITENTE> <FECHA_ELABORACION>14/8/2020</FECHA_ELABORACION> <HORA_ELABORACION>11:27</HORA_ELABORACION> <CODIGO_DEST>0000000000</CODIGO_DEST> <NIT_DESTINATARIO>0000000000</NIT_DESTINATARIO> <NOMBRE_DESTINATARIO>HOST ADMIRALE GORA</NOMBRE_DESTINATARIO> <DIRECCION_DESTINATARIO>BBA 56 # 21 - 001</DIRECCION_DESTINATARIO> <DANE_DESTINO>0200000</DANE_DESTINO> <CIUDAD_DESTINO>GORA </CIUDAD_DESTINO> <DEPARTAMENTO_DESTINO>ANTIOCHIA </DEPARTAMENTO_DESTINO> <FECHA_ENTREGA>11/02/2020</FECHA_ENTREGA> <HORA_ENTREGA>11:44</HORA_ENTREGA> <FECHA_CITA /> <HORA_CITA /> <CODIGO_ESTADO>Z </CODIGO_ESTADO> <NOMBRE_ESTADO>CUMPLEANNO </NOMBRE_ESTADO> <FECHA_ESTADO>11/01/2020</FECHA_ESTADO> <HORA_ESTADO>11:44</HORA_ESTADO> <CODIGO_NOVEDAD /> <NOMBRE_NOVEDAD /> <FECHA_NOVEDAD /> <HORA_NOVEDAD /> <COMENTARIO_NOVEDAD /> <OBSERVACIONES /> <ENLACE_IMAGEN>https://ssssss.ssssssss.com/SSSSSS/xxxxxxxxxxxxxx.aspx?1111111,222222222,SIXA_XEOX,SIXAXEOX2016</ENLACE_IMAGEN> <DOCUMENTO_2>169999999999</DOCUMENTO_2> <DOCUMENTO_3 /> <DOCUMENTO_4 /> <FECHA_TRANSMISION>18/02/2020</FECHA_TRANSMISION> <HORA_TRANSMISION>08:12:30</HORA_TRANSMISION> <MENSAJE_TRANSMISION>KK</MENSAJE_TRANSMISION> <PROMESA_SERVICIO>15/10/21</PROMESA_SERVICIO> <CODIGO_DIVISION>011111</CODIGO_DIVISION> <NOMBRE_DIVISION>ABDURREZZAK </NOMBRE_DIVISION> </SDTDesperadosClientItem> <SDTDesperadosClientItem xmlns="TrainsWebb_V16"> <AESA>10555555555 </AESA> <DOCUMENTO>177777777</DOCUMENTO> <REMITENTE>9999999999 </REMITENTE> <NM_REMITENTE>ABDULREZZAK S.A.S. </NM_REMITENTE> <FECHA_ELABORACION>12/8/2020</FECHA_ELABORACION> <HORA_ELABORACION>16:27</HORA_ELABORACION> <CODIGO_DEST>0000000000</CODIGO_DEST> <NIT_DESTINATARIO>0000000000</NIT_DESTINATARIO> <NOMBRE_DESTINATARIO>GORA FORA</NOMBRE_DESTINATARIO> <DIRECCION_DESTINATARIO>BBG 16 # 91 - 021</DIRECCION_DESTINATARIO> <DANE_DESTINO>0500000</DANE_DESTINO> <CIUDAD_DESTINO>AROG </CIUDAD_DESTINO> <DEPARTAMENTO_DESTINO>ANTIOCHIA </DEPARTAMENTO_DESTINO> <FECHA_ENTREGA>10/02/2020</FECHA_ENTREGA> <HORA_ENTREGA>10:44</HORA_ENTREGA> <FECHA_CITA /> <HORA_CITA /> <CODIGO_ESTADO>D </CODIGO_ESTADO> <NOMBRE_ESTADO>CUMPLEANNI </NOMBRE_ESTADO> <FECHA_ESTADO>11/01/2020</FECHA_ESTADO> <HORA_ESTADO>11:44</HORA_ESTADO> <CODIGO_NOVEDAD /> <NOMBRE_NOVEDAD /> <FECHA_NOVEDAD /> <HORA_NOVEDAD /> <COMENTARIO_NOVEDAD /> <OBSERVACIONES /> <ENLACE_IMAGEN>https://ssssss.ssssssss.com/SSSSSS/xxxxxxxxxxxxxx.aspx?1111111,222222222,SIXA_XEOX,SIXAXEOX2016</ENLACE_IMAGEN> <DOCUMENTO_2>1677777777</DOCUMENTO_2> <DOCUMENTO_3 /> <DOCUMENTO_4 /> <FECHA_TRANSMISION>18/02/2020</FECHA_TRANSMISION> <HORA_TRANSMISION>08:12:30</HORA_TRANSMISION> <MENSAJE_TRANSMISION>HK</MENSAJE_TRANSMISION> <PROMESA_SERVICIO>15/10/21</PROMESA_SERVICIO> <CODIGO_DIVISION>011111</CODIGO_DIVISION> <NOMBRE_DIVISION>ABDURREZZAK </NOMBRE_DIVISION> </SDTDesperadosClientItem> </Sdtdesperadosclient> </Desperados_Clientes_V2.DESPERADOSResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>""" myroot = ET.fromstring(response) for child in myroot.iter('*'): print(child.tag) sid = myroot.findall(".//{'TrainsWebb_V16'}AESA") print(sid)
Advertisement
Answer
For parsing into a pandas DataFrame, you can use the pandas.read_xml
function:
data_frame = pd.read_xml(response, xpath="//*[name()='SDTDesperadosClientItem']")
https://pandas.pydata.org/docs/reference/api/pandas.read_xml.html#pandas-read-xml