CodeGym /Curso de Java /Python SELF ES /Extracción de textos y atributos con Selenium

Extracción de textos y atributos con Selenium

Python SELF ES
Nivel 36 , Lección 2
Disponible

¡Hola, futuros cracks de la automatización! Hoy vamos a aprender cómo usar Selenium para extraer textos y atributos de elementos en una página web. Es una herramienta potente en tu arsenal, porque en el mundo del web scraping lo principal es saber cómo obtener información. ¿Listos para extraer datos útiles desde las profundidades de internet? ¡Entonces empecemos!

1. ¿De qué trata esta clase?

  • Fundamentos de extracción de datos: Cómo sacar texto de los elementos HTML, lo cual ya de por sí suena épico.
  • Obtener atributos: Cómo sacar cosas chulas como links (href) e imágenes (src), para luego hacer algo increíble con ellos.
  • Ejemplos prácticos: Intentaremos extraer datos de tablas y listas en una página web. Porque como decía un gran programador: "Hasta que no tocas el código con las manos, no lo entiendes completamente".

2. Extrayendo textos de los elementos

Imaginemos que tienes una página web bonita con un montón de información útil. Necesitas obtener texto de elementos como headers, párrafos y otros elementos HTML. ¿Cómo lo haces? Aquí es donde Selenium entra en juego.

Ejemplo

Python

from selenium import webdriver

# Configuramos el driver para Chrome
driver = webdriver.Chrome()

# Abrimos el sitio web
driver.get("https://example.com")

# Buscamos un elemento por clase y extraemos el texto
element = driver.find_element_by_class_name("example-class")
text = element.text
print("Texto extraído:", text)

# No olvidemos cerrar el navegador
driver.quit()

Aquí usamos el método .text para obtener el contenido textual de un elemento. Más fácil que aprenderse todas las excepciones en Python, ¿verdad?

3. Extrayendo atributos de los elementos

El texto está genial, pero ¿qué pasa si necesitas algo más específico, como el URL de un link o el enlace de una imagen? Selenium también te cubre aquí.

Ejemplo

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Buscamos un elemento por selector CSS y extraemos el atributo 'href'
link_element = driver.find_element_by_css_selector("a.link-class")
link_href = link_element.get_attribute("href")
print("URL del enlace:", link_href)

# Buscamos un elemento por ID y extraemos el atributo 'src'
img_element = driver.find_element_by_id("logo")
img_src = img_element.get_attribute("src")
print("URL de la imagen:", img_src)

driver.quit()

Como puedes ver, es lo mismo, pero en lugar de .text usamos el método .get_attribute("nombre_del_atributo"). Métodos fáciles de aprender pero muy potentes al usarlos.

4. Aplicación de métodos en la práctica

Pasemos de la teoría a la práctica, porque los programadores generalmente no disfrutan quedarse demasiado tiempo en la abstracción. Vamos a ver un ejemplo donde extraemos datos de una tabla en una página web.

Extracción de datos de tablas

Supongamos que necesitas extraer todas las filas de una tabla en un sitio y mostrarlas en la consola. Así es como lo puedes hacer:

Python

from selenium import webdriver

driver = webdriver.Chrome()

driver.get("https://example.com")

# Buscamos la tabla por ID
table = driver.find_element_by_id("example-table")

# Buscamos todas las filas de la tabla
rows = table.find_elements_by_tag_name("tr")

for row in rows:
    # Buscamos todas las celdas en la fila actual
    cells = row.find_elements_by_tag_name("td")
    for cell in cells:
        print(cell.text, end=' ')
    print()

driver.quit()

Primero encontramos la tabla, luego iteramos sobre todas sus filas y celdas, extrayendo y mostrando su texto. Es como desenredar una telaraña compleja, pero al final todo se vuelve simple y claro.

5. Errores típicos y cómo evitarlos

Antes de meternos en la aventura de código para extraer datos, hablemos de los errores típicos que podrías enfrentar.

Cuando trabajas con páginas dinámicas, el tiempo puede volverse tu enemigo. Si intentas obtener el texto o el atributo de un elemento que aún no se ha cargado, obtendrás un error NoSuchElementException. Es como intentar atrapar una sorpresa antes de que llegue. Para evitar esto, usa esperas explícitas (WebDriverWait) en lugar de confiar en milagros.

Python

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()

driver.get("https://example.com")

try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.CLASS_NAME, "lazy-class"))
    )
    print(element.text)
finally:
    driver.quit()

Aquí usamos WebDriverWait y expected_conditions para esperar que el elemento se cargue. Es como esperar que un plato esté completamente listo, para luego disfrutar de su sabor.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION