Cómo extraer datos de tablas dinámicas (página web del Banco Mundial)
Estaba intentando extraer información del marco de resultados para varios proyectos en el sitio web del Banco Mundial. La biblioteca que estoy utilizando es scrapy, pero también estoy abierto a usar selenium.
Enlace: (https://projects.worldbank.org/en/projects-operations/project-detail/P153012)
El problema al que me enfrento es:
- Las tablas se generan dinámicamente y en algunos proyectos podrían estar completamente ausentes o tener menos campos (esto impide que pueda usar scrapy ya que no sé cómo manejar JavaScript usando scrapy).
- Con selenium, el código que estoy utilizando es el siguiente, pero esto solo me permite extraer todo el texto y no los elementos de celda individuales (¿se puede hacer lo mismo o simplemente estoy intentando hacer algo imposible?):
from selenium import webdriver
url = "https://projects.worldbank.org/en/projects-operations/project-detail/P153012"
driver = webdriver.Chrome(executable<em>path = "/Users/thenewcomputer/Downloads/chromedriver")
driver.get(url)
tables = driver.find_elements_by_class_name("ng-tns-c7-3")
for table in tables:
title = table.find_elements_by_xpath('//*[@id="results"]/div/div/div[2]/div/div[1]/div/div/ul/li/table')
title
for x in title:
print(x.text) #porque quería verificar si esto funcionaba correctamente
Por favor, avíseme si hay una forma más fácil de hacer esto y gracias de antemano.
davy.ai
Solución para Extraer la Información del Marco de Resultados del Sitio del Banco Mundial
Problema
El desafío al extraer la información del “Marco de Resultados” para diferentes proyectos en el sitio del Banco Mundial incluye:
1. Las tablas se generan dinámicamente, y algunos proyectos pueden no tener todos los campos, lo que hace imposible utilizar Scrapy ya que no maneja la ejecución de JavaScript.
2. Con Selenium, el código actual solo extrae todo el texto y no los elementos de celda individuales.
Solución
Puedes probar la siguiente solución:
1. Usa Selenium con WebDriverWait para esperar a que se cargue el contenido dinámico antes de extraer datos de la página.
2. Utiliza un selector Xpath para extraer elementos de celda individuales en lugar de obtener todo el texto.
Aquí tienes un ejemplo de cómo usar Selenium con WebDriverWait para extraer información del Marco de Resultados del proyecto P153012:
Este código esperará a que se cargue la tabla del Marco de Resultados y luego extraerá los elementos de celda individuales con un selector Xpath. Puedes modificar el selector Xpath para apuntar a otras tablas en la página.