0Pricing
Python Academy · Lección

Gestión de JavaScript y medidas contra el scraping

Utilice Playwright/Selenium para contenido generado con JavaScript y controle los límites de frecuencia.

Gestión de JavaScript y medidas contra el scraping es una lección gratuita de Python Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Python Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Python Academy incluye 4 lecciones en total.

Por qué importa JavaScript

Los sitios web modernos renderizan el contenido con JavaScript después de cargar la página. Los scrapers de HTML estático, como requests+BS4, solo ven el esqueleto, no el DOM renderizado.

# Static scraper sees:
# <div id="app"></div>

# Rendered page has:
# <div id="app">
#   <h1>Product List</h1>
#   <ul>... dynamically loaded items ...</ul>
# </div>

Playwright para Python

Playwright controla un navegador real (Chromium, Firefox, WebKit) mediante programación. Espera a que se ejecute JavaScript antes de extraer el contenido.

# pip install playwright
# playwright install
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://example.com")
        title = await page.inner_text("h1")
        print(title)
        await browser.close()

asyncio.run(main())

Espera de elementos

Use page.wait_for_selector() para esperar hasta que aparezca un elemento en el DOM antes de extraer datos.

from playwright.async_api import async_playwright
import asyncio

async def scrape():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://spa-example.com")
        await page.wait_for_selector(".product-list")
        items = await page.query_selector_all(".product-item")
        texts = [await i.inner_text() for i in items]

Selenium

Selenium es una biblioteca más antigua para la automatización de navegadores. Playwright se prefiere en los proyectos nuevos por ofrecer mejor compatibilidad con operaciones asíncronas y mayor velocidad.

# pip install selenium
from selenium import webdriver
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")
elem = WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CSS_SELECTOR, "h1"))
)
print(elem.text)
driver.quit()

Modo headless

Ejecute los navegadores en modo headless (sin una ventana visible) para hacer scraping en el servidor.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch(headless=True)  # no window
        page = await browser.new_page()
        await page.goto("https://example.com")
        html = await page.content()
        await browser.close()

Interceptación de solicitudes de red

Playwright puede interceptar y simular solicitudes de red, lo que resulta útil para bloquear anuncios y rastreadores o capturar directamente respuestas de API.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()

        await page.route("**/*.{png,jpg,css}", lambda route: route.abort())
        await page.goto("https://example.com")   # loads 3x faster

Limitación de frecuencia y pausas

Imite el comportamiento humano: añada pausas aleatorias entre solicitudes y limite la frecuencia para evitar activar sistemas antibots.

import time, random

def polite_scrape(urls):
    for url in urls:
        fetch(url)
        time.sleep(random.uniform(1, 3))  # 1-3 s random delay

Rotación del User-Agent

Rote las cadenas User-Agent para evitar bloqueos basados en el UA predeterminado del scraper.

import requests, random

USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) ...",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...",
]

def fetch(url):
    return requests.get(url, headers={"User-Agent": random.choice(USER_AGENTS)})

Cookies y sesiones

Mantenga las cookies de sesión para conservar la sesión iniciada entre solicitudes. Tanto requests Session como Playwright gestionan las cookies automáticamente.

import requests

with requests.Session() as s:
    s.post("https://example.com/login", data={"user":"me","pass":"pw"})
    # session cookie kept automatically:
    dashboard = s.get("https://example.com/dashboard")

CAPTCHA y aspectos legales

Los CAPTCHA son medidas antibots. Resolverlos mediante programación es técnicamente posible (2captcha, anti-captcha), pero plantea cuestiones éticas y legales. Revise siempre el archivo robots.txt y los Términos del servicio del sitio antes de hacer scraping.

# Before scraping:
# 1. Check robots.txt: https://example.com/robots.txt
# 2. Review the Terms of Service for "scraping" or "automated access" clauses
# 3. Only scrape public data
# 4. Honour Crawl-delay directives
# 5. Cache responses to avoid repeated hits

Capturas de pantalla y PDF con Playwright

Playwright puede hacer capturas de pantalla o imprimir páginas en PDF, lo que resulta útil para pruebas visuales y archivado.

from playwright.async_api import async_playwright
import asyncio

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        page = await browser.new_page()
        await page.goto("https://example.com")
        await page.screenshot(path="page.png", full_page=True)
        await page.pdf(path="page.pdf")
        await browser.close()

Comprobación rápida

¿Por qué requests + BeautifulSoup falla en muchos sitios web modernos?

Repaso

Use Playwright o Selenium para páginas renderizadas con JavaScript. Ejecútelos en modo headless en los servidores. Añada pausas y rote los User-Agent para evitar bloqueos. Intercepte las solicitudes de red para bloquear rastreadores. Respete siempre robots.txt y los Términos del servicio.

Preguntas frecuentes

¿La lección «Gestión de JavaScript y medidas contra el scraping» es gratis?

Sí — el texto completo de «Gestión de JavaScript y medidas contra el scraping» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Python Academy, actualiza a CoddyKit PRO. El curso de Python Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Gestión de JavaScript y medidas contra el scraping»?

Utilice Playwright/Selenium para contenido generado con JavaScript y controle los límites de frecuencia. Practicas Python Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Python Academy?

No se requiere experiencia previa. Python Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Gestión de JavaScript y medidas contra el scraping»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Python Academy?

Sí. Cada lección de Python Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Solicitudes HTTP con requests y httpx
  2. Análisis de HTML con BeautifulSoup
  3. Creación de un spider con Scrapy
  4. Gestión de JavaScript y medidas contra el scraping
← Volver a Python Academy