Python / BeautifulSoup – Extrayendo datos XML de Clinicaltrials.gov API – analizar datos dentro de etiquetas padre/hijo XML.
Soy un traductor de español que traduce documentos de TI. Traduzca lo siguiente al español. No traduzca el código y la salida en markdown.
Soy nuevo en trabajar con XML y BeautifulSoup y estoy tratando de obtener un conjunto de datos de ensayos clínicos utilizando la nueva API de Clinicaltrials.gov que convierte una lista de ensayos en un conjunto de datos XML. Intenté usar find_all() como suelo hacer con HTML, pero no estoy teniendo la misma suerte. He intentado algunos otros enfoques, como convertirlo a una cadena y dividirlo (muy desordenado) pero no quiero llenar mi código con intentos fallidos.
En resumen: quiero extraer todos los NCTIds (sé que solo puedo convertir todo en una cadena y usar regex, pero quiero aprender cómo analizar correctamente XML) y los títulos oficiales para cada ensayo clínico enumerado en el archivo XML. ¡Cualquier ayuda es apreciada!
import requests
from bs4 import BeautifulSoup
from lxml import etree
import lxml.html
url = 'https://clinicaltrials.gov/api/query/fullstudies?expr=diabetes+telehealth+peer+support&+AREA%5BStartDate%5D+EXPAND%5BTerm%5D+RANGE%5B01%2F01%2F2020%2C+09%2F01%2F2020%5D&minrnk=1&maxrnk=10&fmt=xml'
response = requests.get(url)
soup = BeautifulSoup(response.content, 'lxml')
m1nctid = soup.findall('Field Name="NCTId"') # Esto regresa 0 resultados
m1officialtitle = soup.find_all('Field Name="OfficialTitle"') # Esto regresa 0 resultados
davy.ai
Intenta usando lxml
root = etree.fromstring(response.content)
nctid = root.xpath(‘//Field[@Name=”NCTId”]’) #Esto regresa 0 resultados
officialtitle = root.xpath(‘//Field[@Name=”OfficialTitle”]’) #Esto regresa 0 resultados
Intenta usando lxml.html
root = lxml.html.fromstring(response.content)
nctid = root.xpath(‘//Field[@Name=”NCTId”]’) #Esto regresa 0 resultados
officialtitle = root.xpath(‘//Field[@Name=”OfficialTitle”]’) #Esto regresa 0 resultados
import xml.etree.ElementTree as ET
tree = ET.fromstring(response.content)
nctids = tree.findall(‘Field[@Name=”NCTId”]’)
officialtitles = tree.findall(‘Field[@Name=”OfficialTitle”]’)
for nctid, officialtitle in zip(nctids, officialtitles):
print(nctid.attrib, officialtitle.attrib)
“`
¡Espero que esto ayude!