CodeGym /Curso de Java /Python SELF ES /Trabajo con contenido en JavaScript

Trabajo con contenido en JavaScript

Python SELF ES
Nivel 33 , Lección 1
Disponible

1. Introducción a las páginas dinámicas

Si alguna vez intentaste hacer scraping de datos en sitios web, que actualizan contenido al vuelo gracias a JavaScript, entonces sabes que puede ser un verdadero rompecabezas. ¡Pero no te asustes! Como dicen, cualquier código complejo puede configurarse para que parezca magia. Vamos a ver cómo requests_html nos permite trabajar con este tipo de contenido.

Como sabes, no todas las páginas web son igual de útiles. Algunas páginas cargan contenido inmediatamente, mientras que otras pueden generarlo o actualizarlo dinámicamente mediante JavaScript. Esto crea ciertos problemas para quienes quieren extraer datos, ya que el HTML que ves en las herramientas para desarrolladores puede diferir del HTML que obtienes con una solicitud estándar.

Problemas al hacer scraping de contenido dinámico

La mayoría de las librerías para trabajar con la web, como requests, solo trabajan con respuestas del servidor y no pueden ejecutar JavaScript. Esto significa que si el contenido se carga o cambia a través de JavaScript, puede que no lo veas en absoluto con una solicitud estándar.

2. Uso de la librería requests_html

Y aquí es donde entra en escena requests_html, una librería que combina la simplicidad de requests con el poder de un navegador para ejecutar JavaScript. Te proporciona un motor básico de renderizado que permite interactuar con páginas web dinámicas como si estuvieras usando un navegador real.

Instalación y configuración de la librería

Para empezar, vamos a instalar requests_html. Abre tu terminal favorito y ejecuta el siguiente comando:

Bash
pip install requests-html

¡Perfecto, la librería está instalada! Ahora podemos trabajar con ella.

Fundamentos de uso de requests_html para extraer contenido en JavaScript

requests_html hace nuestra vida más fácil. Vamos a ver cómo funciona en la práctica. Supongamos que tenemos una página que genera algunos datos a través de JavaScript.

Python

from requests_html import HTMLSession

# Creamos una sesión HTML
session = HTMLSession()

# Realizamos una solicitud a la página web
response = session.get('https://example-dynamic-page.com')

# Renderizamos JavaScript
response.html.render()

# Extraemos datos
data = response.html.find('#dynamic-content', first=True)
print(data.text)

¡Esto es magia! A diferencia de requests, requests_html nos proporciona el método .render(), que permite "desplazar" la página y ejecutar JavaScript. Una vez que la página "cobra vida", puedes extraer todos los datos necesarios utilizando selectores, que aprendimos anteriormente.

3. Ejemplos de extracción de datos

Ahora vamos a profundizar y examinar algunos ejemplos, para que puedas ver cómo requests_html nos saca de apuros en diferentes escenarios.

Extracción práctica de datos de páginas dinámicas

Imagina una página que carga las últimas noticias solo después de hacer scroll. Con requests_html, podemos imitar el comportamiento de un usuario.

Python

url = 'https://example-news-site.com'

# Cargamos la página
response = session.get(url)

# Realizamos un renderizado con un timeout mayor si es necesario
response.html.render(timeout=20)

# Encontramos los elementos con noticias
news_items = response.html.find('.news-item')

for item in news_items:
print(item.text)

¡Así de fácil y sin complicaciones obtuvimos acceso al contenido, que antes parecía inalcanzable!

Procesamiento de contenido JavaScript cargado con requests_html

Con requests_html y los selectores CSS que vimos en lecciones anteriores, puedes trabajar con el contenido en páginas web como si llevaras años practicando scraping.

Python

# Seleccionamos el primer elemento del título de noticias
headline = response.html.find('.news-headline', first=True)
print(headline.text)

# Extraemos el enlace del elemento
link = headline.find('a', first=True).attrs['href']
print(link)

4. Consejos prácticos y trucos

Aunque requests_html es una herramienta poderosa, al trabajar con ella, vale la pena tener en cuenta algunas cosas:

  • Timeouts y retardos: No olvides configurar tiempos de espera para el renderizado en páginas más complejas. Esto ayuda a evitar errores por cargas lentas.
  • Capacidad de renderizado: requests_html puede consumir muchos recursos, ya que renderiza JavaScript. Para grandes volúmenes de datos o páginas complejas, esto puede ralentizar el proceso.
  • CAPTCHA y protecciones anti-bots: requests_html no evade protecciones anti-bots y CAPTCHA, por lo que en casos más complejos, es mejor usar Selenium.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION