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 fasterLimitació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 delayRotació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 hitsCapturas 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
- Solicitudes HTTP con requests y httpx
- Análisis de HTML con BeautifulSoup
- Creación de un spider con Scrapy
- Gestión de JavaScript y medidas contra el scraping