es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , ,

Answer

  1. Avatar for 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


    Parece que has intentado varios enfoques para analizar el archivo XML, pero ninguno de ellos ha tenido éxito. Un enfoque que podrías probar es usar el módulo <a href="https://docs.python.org/3/library/xml.etree.elementtree.html"><code>ElementTree</code></a>. Este módulo proporciona una forma sencilla de analizar y navegar por documentos XML. Puedes usar el método <code>findall()</code> para buscar elementos con un nombre de etiqueta específico, y luego usar la propiedad <code>attrib</code> para obtener los atributos del elemento. Por ejemplo, para obtener los identificadores NCT y los títulos oficiales de cada ensayo clínico listado en el archivo XML, podrías usar el siguiente código:

    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!

Comments are closed.