Como Construir um Rastreador de Preços de Concorrentes com Playwright
Senior Web Scraping Engineer
TL;DR:
- Um rastreador de preços da concorrência precisa de uma chave de oferta estável. Faça corresponder o lojista, a variante, o mercado, o vendedor e o tipo de compra antes de comparar preços.
- O Playwright pode aguardar o preço renderizado. Restrinja o escopo do localizador ao resumo do produto para que o rastreador não leia um preço de recomendação ou de referência.
- Mantenha o valor e a moeda juntos. Armazene a string exibida e uma representação decimal para que revisores possam auditar o parser.
- Uma captura com falha deve manter o último bom preço intacto. Envie problemas de acesso, navegação e parsing para o monitoramento da coleta.
Introdução
Uma página de produto pode mostrar um preço promocional, um preço de referência e uma linha de produtos relacionados no mesmo viewport. Se um rastreador ler o primeiro símbolo de moeda, seu alerta pode apontar para uma oferta que o cliente nunca selecionou.
O exemplo de Playwright abaixo lê o preço dentro de um resumo de produto em uma vitrine demo pública. A parte prática vem depois da extração: decidir quando dois preços descrevem a mesma oferta.
Instalar o Playwright
Este exemplo usa o pacote Playwright para Python e uma cópia instalada do Google Chrome. Instale o pacote em um ambiente de projeto e confirme que o Chrome está disponível no worker. Use uma lista explícita de URLs de produtos permitidos para o scheduler e comece com um único worker.
bash
python3 -m pip install playwright
Configure a Oferta que Você Vai Rastrear
Um rastreador deve definir sua chave de comparação antes de visitar uma página. Inclua o lojista, o produto ou variante, o mercado, o vendedor e o tipo de compra. Mantenha a moeda e a base de unidade nas verificações de comparação. O modelo Offer do Schema.org distingue uma oferta do item subjacente e inclui propriedades separadas para preço e moeda.
Se a oferta depender de roteamento por mercado, use o mesmo contexto de rede aprovado para capturas comparáveis. O workflow de infraestrutura de monitoramento de preços cobre as opções de roteamento. Neste demo, o navegador lê uma única exibição no formato do Reino Unido e verifica diretamente o formato em GBP.
Comece a Fazer Scraping com o Scrapeless
Potencialize o seu fluxo de trabalho de web scraping e automação com o Scrapeless!
Inscreva-se hoje e ganhe US$ 5 em crédito gratuito — sem necessidade de cartão de crédito.Solicite seu crédito gratuito agora no Dashboard do Scrapeless.
Ler Uma Oferta de Uma Página Demo Pública
Uma captura com Playwright pode verificar a navegação, aguardar um localizador de preço exclusivo e emitir uma observação compacta. A referência de localizadores do Playwright explica como os localizadores miram elementos e como operações estritas se comportam quando múltiplos elementos correspondem. O exemplo restringe o escopo tanto do título quanto do preço ao mesmo resumo de produto.
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()
O script imprime um registro com uma string para o valor decimal, o valor exibido e a hora. O padrão de timestamp da Internet define uma forma de representar o offset de UTC para que observações possam ser alinhadas entre workers.
Comparar Capturas Bem-Sucedidas
Uma alteração de preço deve comparar a observação atual com a observação comparável anterior para a mesma oferta. Preserve ambas antes de enviar um alerta. Se o job encontrar o mesmo valor novamente, deixe o histórico de preços inalterado ou armazene uma confirmação de acordo com suas necessidades de relatório.
| Resultado da captura | Ação do rastreador |
|---|---|
| Mesma oferta e preço menor | Registrar uma redução de preço e vincular ambas as observações |
| Mesma oferta e mesmo preço | Registrar a saúde da coleta ou uma confirmação |
| Moeda ou tipo de compra alterados | Verificar novamente a chave da oferta antes de comparar |
| Desafio de acesso, preço ausente ou redirecionamento inesperado | Registrar um problema de coleta e manter a última observação válida |
Ao passar do demo para um alvo real, use um parser de locale verificado e armazene a base do preço. Uma oferta para membros e uma oferta regular merecem séries separadas. Para páginas que renderizam após a seleção, aguarde juntos o marcador de variante selecionada e a região de preço. Mantenha versões do parser para que um falso alerta após um redesign da página possa ser rastreado.
Quando Migrar o Playwright para um Browser Gerenciado
Comece com um worker local. Migre para um navegador gerenciado para automação web quando a manutenção do worker ou execuções repetidas se tornarem uma limitação prática. A visão geral do navegador descreve sessões em nuvem, e a tabela de preços do Scrapeless ajuda a estimar essa mudança. Mantenha o locator do Playwright e a chave de oferta sob seu controle. O workflow de proxy com Puppeteer cobre a preocupação relacionada ao roteamento.
Conclusão
A demonstração imprime uma oferta de produto. Antes de usar a mesma abordagem em vários varejistas, teste o que acontece quando a região de preço está vazia, a moeda muda ou a página redireciona. Nenhuma dessas observações deve substituir o último preço comparável.
Pronto para construir o seu rastreador de preços de concorrentes?
Junte-se à comunidade no Discord ou no Telegram para conversar com desenvolvedores que estão criando fluxos de trabalho de rastreamento de preços. Crie uma conta no Painel do Scrapeless para começar.
FAQ
P: Com que frequência um rastreador de preços de concorrentes deve ser executado?
Escolha uma cadência que corresponda a como a equipe usa o alerta e ao limite de requisições permitido pelo site. Um relatório de preços e um monitor de promoções sensíveis ao tempo podem usar agendamentos diferentes.
P: Você precisa de um proxy para monitoramento de preços com Playwright?
Uma rota regional permitida pode reproduzir a visualização de uma vitrine local. Uma demonstração de mercado único ou uma fonte local aprovada pode usar sua conexão normal.
P: O que o rastreador deve fazer se um site mostrar um desafio de acesso?
Registre a falha e revise o caminho de acesso com o proprietário do site. Mantenha a oferta bem-sucedida anterior como linha de base de comparação.
P: Isso pode ser executado sem um agente de IA?
Playwright e um agendador podem coletar e comparar observações. Execute com concorrência limitada e valide locators alterados em uma página de produto conhecida.
P: Você pode monitorar qualquer vitrine de concorrente?
Use superfícies aprovadas e revise termos aplicáveis, limites de coleta e direitos de reutilização com assessoria jurídica quando o escopo não estiver claro.
Na Scorretless, acessamos apenas dados disponíveis ao público, enquanto cumprem estritamente as leis, regulamentos e políticas de privacidade do site aplicáveis. O conteúdo deste blog é apenas para fins de demonstração e não envolve atividades ilegais ou infratoras. Não temos garantias e negamos toda a responsabilidade pelo uso de informações deste blog ou links de terceiros. Antes de se envolver em qualquer atividade de raspagem, consulte seu consultor jurídico e revise os termos de serviço do site de destino ou obtenha as permissões necessárias.


