Cómo crear un rastreador de precios de la competencia con Playwright
Senior Web Scraping Engineer
TL;DR:
- Un rastreador de precios de la competencia necesita una clave de oferta estable. Haz coincidir el minorista, variante, mercado, vendedor y tipo de compra antes de comparar precios.
- Playwright puede esperar al precio renderizado. Limita el localizador al resumen del producto para que el rastreador no lea un precio de recomendación o de referencia.
- Mantén el importe y la moneda juntos. Almacena la cadena mostrada y una representación decimal para que los revisores puedan auditar el analizador.
- Una captura fallida debe dejar intacto el último precio correcto. Envía los problemas de acceso, navegación y análisis al monitoreo de la colección.
Introducción
Una página de producto puede mostrar un precio de oferta, un precio de referencia y una fila de productos relacionados en la misma ventana. Si un rastreador lee el primer símbolo de moneda, su alerta puede señalar una oferta que el cliente nunca seleccionó.
El ejemplo de Playwright a continuación lee el precio dentro de un resumen de producto en un escaparate de demostración público. La parte práctica viene después de la extracción: decidir cuándo dos precios describen la misma oferta.
Instalar Playwright
Este ejemplo usa el paquete Playwright para Python y una copia instalada de Google Chrome. Instala el paquete en un entorno de proyecto y confirma que Chrome está disponible en el trabajador. Usa una lista de permitidos explícita de URLs de productos para el programador y empieza con un solo trabajador.
bash
python3 -m pip install playwright
Configura la oferta que vas a rastrear
Un rastreador debe definir su clave de comparación antes de visitar una página. Incluye el minorista, producto o variante, mercado, vendedor y tipo de compra. Mantén la moneda y la base de unidad en las comprobaciones de comparación. El modelo Offer de Schema.org distingue una oferta del artículo subyacente e incluye propiedades separadas de precio y moneda.
Si la oferta depende del enrutamiento por mercado, usa el mismo contexto de red aprobado para capturas comparables. El flujo de trabajo de infraestructura de monitoreo de precios cubre las opciones de enrutamiento. En esta demostración, el navegador lee una única visualización de estilo británico y verifica directamente el formato GBP.
Comienza a hacer scraping con Scrapeless
Impulsa tu flujo de trabajo de web scraping y automatización con Scrapeless.
Regístrate hoy y obtén 5 USD en crédito gratuito — sin necesidad de tarjeta de crédito.Reclama tu crédito gratuito ahora en el Scrapeless Dashboard.
Lee una oferta de una página de demostración pública
Una captura con Playwright puede comprobar la navegación, esperar a un localizador de precio único y emitir una observación compacta. La referencia de localizadores de Playwright explica cómo los localizadores apuntan a elementos y cómo se comportan las operaciones estrictas cuando varios elementos coinciden. El ejemplo limita tanto el título como el precio al mismo resumen de producto.
python
import json
import re
from datetime import datetime, timezone
from decimal import Decimal
from playwright.sync_api import sync_playwright
URL = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
with sync_playwright() as playwright:
browser = playwright.chromium.launch(channel="chrome")
try:
page = browser.new_page(locale="en-GB")
response = page.goto(URL, wait_until="domcontentloaded", timeout=20_000)
if response is None or not response.ok or page.url != URL:
raise RuntimeError("Expected the demo product page")
summary = page.locator(".product_main")
price = summary.locator(".price_color")
price.wait_for(state="visible", timeout=10_000)
display_price = price.inner_text().strip()
match = re.fullmatch(r"£([0-9]+\.[0-9]{2})", display_price)
if match is None:
raise ValueError("Unexpected demo price format")
print(json.dumps({
"product_key": "books-to-scrape:a-light-in-the-attic",
"title": summary.get_by_role("heading", level=1).inner_text(),
"final_url": page.url,
"offer_type": "listed",
"price": str(Decimal(match.group(1))),
"currency": "GBP",
"display_price": display_price,
"observed_at": datetime.now(timezone.utc).isoformat(),
}, ensure_ascii=False))
finally:
browser.close()
El script imprime un registro con una cadena para el importe decimal, el valor mostrado y la hora. El estándar de marcas de tiempo de Internet define una forma de representar el desplazamiento UTC para que las observaciones puedan alinearse entre trabajadores.
Compara capturas exitosas
Un cambio de precio debe comparar la observación actual con la observación comparable anterior para la misma oferta. Conserva ambas antes de enviar una alerta. Si el trabajo encuentra el mismo valor de nuevo, deja el historial de precios sin cambios o almacena una confirmación según tus necesidades de reporte.
| Resultado de la captura | Acción del rastreador |
|---|---|
| Misma oferta y precio más bajo | Registra una bajada de precio y vincula ambas observaciones |
| Misma oferta y mismo precio | Registra la salud de la colección o una confirmación |
| Cambió la moneda o el tipo de compra | Vuelve a comprobar la clave de oferta antes de comparar |
| Desafío de acceso, precio ausente o redirección inesperada | Registra un problema de colección y mantén la última observación válida |
Al pasar de la demo a un objetivo real, usa un analizador de configuración regional verificado y almacena la base del precio. Una oferta para miembros y una oferta normal merecen series separadas. Para páginas que se renderizan después de la selección, espera simultáneamente al marcador de variante seleccionada y a la región del precio. Conserva las versiones del analizador para que una falsa alerta tras un rediseño de la página pueda rastrearse.
Cuándo mover Playwright a un navegador gestionado
Comienza con un trabajador local. Pasa a un navegador gestionado para automatización web cuando el mantenimiento del trabajador o las ejecuciones repetidas se conviertan en una limitación práctica. La visión general del navegador describe las sesiones en la nube, y los precios de Scrapeless ayudan a estimar ese cambio. Mantén el localizador de Playwright y la clave de oferta bajo tu control. El flujo de trabajo de proxy con Puppeteer cubre la preocupación relacionada con el enrutamiento.
Conclusión
La demo imprime una oferta de producto. Antes de usar el mismo enfoque en varios retailers, prueba qué ocurre cuando la zona de precio está vacía, cambia la moneda o la página redirige. Ninguna de esas observaciones debe reemplazar el último precio comparable.
¿Listo para crear tu rastreador de precios de la competencia?
Únete a la comunidad en Discord o Telegram para hablar con desarrolladores que construyen flujos de trabajo de seguimiento de precios. Crea una cuenta en el Panel de Scrapeless para comenzar.
Preguntas frecuentes
P: ¿Con qué frecuencia debe ejecutarse un rastreador de precios de la competencia?
Elige una cadencia que coincida con cómo el equipo usa la alerta y el presupuesto de solicitudes permitido del sitio. Un informe de precios y un monitor de promociones sensibles al tiempo pueden usar diferentes horarios.
P: ¿Necesitas un proxy para el monitoreo de precios con Playwright?
Una ruta regional permitida puede reproducir la vista de una tienda local. Una demo para un solo mercado o una fuente local autorizada puede usar su conexión habitual.
P: ¿Qué debe hacer el rastreador si un sitio muestra un desafío de acceso?
Registra el fallo y revisa la vía de acceso con el propietario del sitio. Mantén la oferta exitosa anterior como línea base de comparación.
P: ¿Puede esto ejecutarse sin un agente de IA?
Playwright y un programador pueden recopilar y comparar observaciones. Ejecútalo con concurrencia acotada y valida los localizadores cambiados en una página de producto conocida.
P: ¿Puedes monitorear cualquier tienda de un competidor?
Usa superficies autorizadas y revisa con asesoría legal los términos aplicables, los límites de recopilación y los derechos de reutilización cuando el alcance no esté claro.
En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.


