Aprenda como extrair dados de produtos que aparecem em grade na vitrine de uma loja virtual é uma necessidade comum para quem quer monitorar preços, atualizar catálogos, comparar concorrentes ou alimentar painéis internos. Com o n8n, um orquestrador de automações open-source, é possível montar um fluxo robusto para capturar esses dados diretamente do HTML da página, padronizar, validar, armazenar e até acionar alertas — tudo sem precisar escrever um sistema do zero. Neste artigo, usando como referência o tema “Extraindo Dados dos Produtos em Grade da Loja Virtual com N8N”, vamos explorar um passo a passo completo, boas práticas e estratégias para lidar com diferentes cenários do e-commerce moderno.
Créditos do vídeo: Bruno Devx | BR Criativus
Por que usar n8n para extrair dados de produtos
O n8n permite montar automações visuais conectando nós (nodes) que fazem requisições HTTP, extraem e transformam informações, tomam decisões condicionais, registram logs e enviam dados para planilhas, bancos de dados ou APIs. Para quem precisa extrair dados de uma grade de produtos, isso significa:
- Zero dependência de códigos complexos: você monta o fluxo arrastando e configurando nós.
- Escalabilidade: fácil replicar o fluxo para várias categorias, lojas ou marcas.
- Confiabilidade: você agenda execuções, trata erros e notifica incidentes.
- Integração: dos dados brutos à camada final (Google Sheets, Airtable, MySQL, Notion, BigQuery ou APIs), tudo num só pipeline.
Entendendo a “grade” de produtos
Em geral, páginas de categoria, busca ou destaques exibem os produtos em cards repetidos. Cada card costuma conter:
- Nome do produto
- Preço atual e, às vezes, preço anterior (promoção)
- Imagem principal
- Link para a página do produto
- SKU, código ou identificador interno (quando visível)
- Selo ou tag (novo, promoção, frete grátis, Black Friday, etc.)
- Disponibilidade (em estoque, indisponível, variações)
Esses dados normalmente estão acessíveis no HTML via seletores CSS (como classes e atributos) ou em data attributes (ex: data-sku=”…”). Em alguns casos, a página injeta JSON no código-fonte (scripts do tipo application/ld+json ou blocos inline). Em lojas que renderizam conteúdo dinamicamente via JavaScript, pode ser necessário usar um navegador headless para “ver” o HTML final.
Arquitetura do fluxo no n8n
Antes de clicar e arrastar nós, planeje a arquitetura. Um fluxo típico inclui:
- Entrada de URLs: lista de categorias/páginas onde a grade está.
- Captura do HTML: via HTTP Request ou Browser (quando há JS pesado).
- Extração estruturada: usando um node de extração por seletores.
- Limpeza e padronização: normalização de texto, moeda, números e links.
- Paginação: seguir para a próxima página até não existirem mais resultados.
- Deduplicação: evitar criar registros duplicados entre execuções.
- Persistência: salvar em planilha, banco ou enviar a uma API.
- Observabilidade: logs, notificações e tratamento de erros.
- Agendamento: execução recorrente com Cron (diário, horário de pico, etc.).
Passo a passo de como extrair dados de produtos com n8n
1) Defina os objetivos e os campos
Liste exatamente o que você precisa extrair e onde pretende salvar. Por exemplo:
- Campos: título, preço, preço_anterior, link, imagem, sku, disponibilidade, categoria, data_captura.
- Destino: Google Sheets para análise rápida e um banco MySQL para histórico.
- Periodicidade: 2 vezes por dia.
2) Preparando a entrada de URLs
Você pode alimentar o fluxo com uma lista fixa de URLs (ex: páginas de categorias) usando um nó de dados estáticos, uma planilha de controle ou um banco. Isso permite escalar o mesmo fluxo para 10, 50 ou 200 páginas diferentes, sem duplicar o trabalho.
3) Captura do HTML
Em páginas estáticas, o HTTP Request costuma ser suficiente. Configure:
- Método GET
- User-Agent realista (algumas lojas bloqueiam agentes genéricos)
- Timeout adequado e número de tentativas (retry)
- Respeito a robots.txt e termos de uso
Se a página carrega produtos via JavaScript depois do carregamento inicial, use um nó de Browser (navegador headless) para renderizar a página, esperar os elementos de produto aparecerem e então extrair o HTML já processado.
4) Extração de dados da grade
Com o HTML em mãos, utilize um nó de extração por seletores (por exemplo, um parser que aceite CSS). A ideia é selecionar o “card” do produto e, dentro dele, buscar:
- Seletor do título (ex: .product-card .title)
- Seletor do preço (ex: .price .amount)
- Seletor do preço anterior (ex: .price .old)
- Seletor do link (ex: .product-card a)
- Seletor da imagem (ex: .product-card img)
- Seletor do SKU (quando disponível) ou data-attributes
- Flag de disponibilidade (ex: .badge.out-of-stock)
Dicas práticas:
- Comece inspecionando o HTML no navegador para encontrar seletores estáveis.
- Prefira atributos consistentes; evite classes puramente utilitárias que mudam com frequência.
- Se a loja tiver JSON-LD com dados do produto, pode ser mais confiável parseá-lo.
5) Normalização e enriquecimento
Na etapa de transformação, padronize e enriqueça os dados para facilitar análises e integrações:
- Preço: converta vírgula para ponto, remova símbolos e extraia números.
- Título: aplique trim, capitalize se precisar, remova caracteres especiais desnecessários.
- Links: transforme URLs relativas em absolutas.
- Categoria: inclua o nome da categoria de origem como metadado.
- Data/Hora: salve um timestamp ISO (ex: 2025-09-02T01:57:29Z).
- Disponibilidade: normalize para “em_estoque”/“indisponível”.
Se desejar, calcule campos derivados, como “desconto_percentual” com base no preço atual e anterior.
6) Paginação automática
Grande parte das grades utiliza paginação. Duas abordagens comuns:
- Seguir o link “Próxima página”: após extrair a grade da página atual, procure o seletor do botão/link “Próxima” e, se existir, avance.
- Mudar o parâmetro da URL: muitas lojas usam page=2, page=3… Você pode iterar esse parâmetro enquanto ainda encontrar produtos.
Controle de parada:
- Se não houver link “Próxima”, pare.
- Se a página retornou zero produtos, finalize.
- Defina um limite de segurança de páginas para evitar loops infinitos.
7) Deduplicação
Para evitar duplicar registros a cada execução:
- Gere um identificador único (ex: hash do link do produto + loja).
- Antes de salvar, verifique se o ID já existe no destino (planilha/DB).
- Mantenha um repositório de “vistos” (cache em Redis, tabela de controle ou coluna de status na planilha).
8) Persistência dos dados
Escolha onde os dados vão viver:
- Google Sheets: ótimo para visualização rápida e validações manuais.
- Airtable: combina planilha e banco, com visualizações e automações.
- MySQL/PostgreSQL: recomendado para histórico, queries avançadas e integração com BI.
- Notion: útil para equipes que preferem um hub de documentação/dados.
- APIs: enviar para um endpoint próprio, ou integrar com ERPs e CRMs.
Se a intenção for alimentar um catálogo no WordPress/WooCommerce, você pode:
- Usar a API REST do WooCommerce para criar/atualizar produtos.
- Manter uma camada staging (planilha/DB) e só publicar após revisão.
9) Observabilidade e notificações
Automação boa é automação observável. Considere:
- Enviar um resumo das capturas para Slack/Telegram (ex: total de produtos, novas promoções, erros).
- Registrar logs de URLs processadas, tempo de execução e contagem de itens.
- Separar erros por tipo (timeout, seletor quebrado, bloqueio da loja) para diagnósticos rápidos.
10) Agendamento
Com o nó de agendamento, defina quando o fluxo deve rodar. Dicas:
- Evite horários de pico de tráfego da loja, para reduzir bloqueios e melhorar desempenho.
- Se necessário, faça varreduras mais leves com maior frequência (coleta incremental).
Quando usar navegador headless
Algumas vitrines carregam os produtos via JavaScript, sem HTML estático completo. Nestes casos, o HTTP Request não basta. Use um nó de Browser para:
- Carregar a página como um navegador real (com User-Agent, cookies e execução de JS).
- Esperar o seletor da grade aparecer (ex: .product-grid .product-card).
- Extrair o HTML já renderizado e então aplicar os seletores de dados.
Dicas para estabilidade:
- Defina timeouts realistas e espere elementos específicos, não apenas o carregamento de documento.
- Simule rolagem quando a paginação for infinita (infinite scroll), coletando em lotes a cada “scroll”.
- Reduza a taxa de requisições e intercale com pequenos delays para evitar bloqueios.
Qualidade e conformidade dos dados
Ao lidar com diversas lojas e templates diferentes, a qualidade dos dados pode variar. Adote padrões claros:
- Validação de campos obrigatórios (título, preço, link) com descarte ou marcação de registros incompletos.
- Normalização de moeda e formato numérico (R$, separadores de milhar e decimal).
- Uniformização de disponibilidade (ex: “Disponível”, “Esgotado”, “Sob encomenda”).
- Padronização de imagens: garantir links absolutos em HTTPS e tamanhos aceitáveis.
Escalabilidade e performance
Se você pretende capturar centenas de páginas ou milhares de produtos:
- Implemente fila: processe URLs em lotes (batches) para controlar paralelismo.
- Cache: se a loja tem CDN forte, respalde com ETags/Last-Modified quando possível.
- Backoff exponencial: ao detectar bloqueios ou muitos erros 429, aumente o intervalo entre requisições.
- Armazenamento incremental: salve em “streaming”, não tudo ao final, para não perder dados em falhas.
Erros comuns e como evitar
- Seletores frágeis: dependem de classes temporárias; prefira seletores mais semânticos ou data attributes.
- Ignorar paginação: extrair só a primeira página subestima totalmente o catálogo.
- Não tratar variações: preço e disponibilidade podem mudar por variação de cor/tamanho; entenda o que sua análise exige.
- Falta de deduplicação: gera planilhas “infladas” e dificulta histórico.
- Não versionar o fluxo: mudanças na loja exigem ajustes; mantenha versões do seu workflow e comentários.
Ética e legalidade
Antes de extrair dados, verifique os termos de uso do site e o arquivo robots.txt. Em muitos casos, a coleta de informações exibidas publicamente para fins de análise é tolerada, desde que não sobrecarregue a infraestrutura nem viole restrições contratuais. Boas práticas:
- Respeite limites de requisição e implemente rate limiting.
- Identifique-se apropriadamente no User-Agent quando aplicável.
- Evite contornar mecanismos de proteção que indiquem restrição clara.
- Proteja dados coletados e cumpra a legislação aplicável (LGPD, quando envolver dados pessoais).
Do HTML ao seu WordPress
Se o objetivo final é alimentar um site WordPress (com ou sem WooCommerce), o n8n pode fazer a ponte:
- Para catálogos: integrar com a API do WordPress para criar posts personalizados (CPT) com campos avançados.
- Para e-commerce: utilizar a API do WooCommerce para criar/atualizar produtos, preços e estoque.
- Para conteúdo editorial: transformar a coleta em pautas, listas ou comparativos de preço.
Recomendação prática: mantenha um “hub” de dados (planilha ou DB) entre a coleta e o WordPress. Isso cria uma camada de segurança e revisão, evitando publicar itens errados ou incompletos.
Exemplo de fluxo resumido
- Start: Cron diário às 06h e 18h.
- Input: lista de URLs de categorias (planilha).
- Loop: para cada URL, capturar o HTML (HTTP Request ou Browser).
- Extract: selecionar os cards e extrair campos necessários.
- Transform: normalizar preços, links e disponibilidade.
- Paginate: avançar enquanto houver próxima página.
- Deduplicate: checar em DB se o item já existe (ID único por link+loja).
- Persist: salvar em Google Sheets e MySQL.
- Notify: enviar resumo no Slack/Telegram.
- End: registrar métricas da execução.
Como testar e validar
Não jogue o fluxo direto em produção. Faça testes com poucas páginas e valide:
- Se o número de produtos por página confere.
- Se os preços batem com a vitrine (atenção a promoções e parcelamentos).
- Se os links abrem a página correta do produto.
- Se a paginação cobre todo o catálogo, sem pular páginas.
Crie casos de teste: páginas com promoções, com variações, esgotados, e até páginas vazias. Anote os ajustes de seletores e regras de transformação que surgirem nessa etapa.
Checklist rápido para iniciar hoje
- Mapeie 3 a 5 categorias da sua loja ou do mercado-alvo.
- Inspecione o HTML e registre seletores de título, preço, link e imagem.
- Monte um fluxo simples com captura, extração e envio para planilha.
- Acrescente paginação e normalização de dados.
- Implemente deduplicação e um alerta simples de resumo.
- Agende e monitore por uma semana, fazendo ajustes incrementais.
Conclusão
Extrair dados dos produtos em grade de uma loja virtual com o n8n é uma combinação poderosa de praticidade e flexibilidade. Você consegue transformar páginas públicas em dados estruturados, prontos para alimentar análises, atualizar catálogos, comparar preços e gerar insights de negócio — tudo com um fluxo visual, versionável e escalável.
Se quiser ver na prática como aplico automações e transformar ideias em resultados, confira também meu trabalho real em projetos web e e-commerce. Visite meu portfólio para conhecer cases, layouts e soluções que podem elevar o nível do seu site.
E você, já tentou extrair dados de uma grade de produtos com alguma automação? Qual foi o maior desafio que encontrou (seletor instável, paginação, bloqueios) e o que gostaria de ver detalhado num próximo conteúdo?
