Esta skill capacita o Claude a projetar, implementar e otimizar automações de extração de dados web e estruturados, integrando ferramentas de automação e IA.
Keywords
web scraping, automação de dados, Make.com, N8N, Zapier, APIs de scraping, seletores CSS, XPath, extração estruturada, tratamento de CAPTCHA, proxy rotation, Playwright, Puppeteer, BeautifulSoup, extração de texto, normalização de dados.
Quick Start
Analisar robots.txt e Termos de Serviço: Verificar permissões para scraping no domínio alvo, por exemplo, acessando https://www.exemplo.com/robots.txt.
Identificar Seletores: Usar o inspetor de elementos do navegador para mapear seletores CSS ou XPath de itens como div.produto-titulo ou //span[@class='preco'].
Configurar Webhook de Ingestão: Criar um endpoint de webhook em Make.com (módulo "Webhooks > Custom Webhook") ou N8N (nó "Webhook") para receber os dados extraídos, por exemplo, https://hook.us1.make.com/abcdef12345.
Desenvolver Script de Extração: Implementar um script Python com Playwright para navegar e extrair dados, enviando-os para o webhook. Exemplo: page.goto("https://www.exemplo.com/produtos"); dados = page.locator(".item-info").all_inner_texts(); requests.post(webhook_url, json={"data": dados}).
Processamento e Armazenamento: No Make/N8N, após receber os dados via webhook, utilizar módulos para processar (ex: "Parse JSON", "Text Parser") e armazenar (ex: "Google Sheets > Add a Row", "Airtable > Create a Record").
Core Workflows
Workflow 1: Extração de Preços de E-commerce com Monitoramento Contínuo
Este workflow detalha a automação da extração de preços de produtos de um site de e-commerce e seu monitoramento contínuo.
Análise: Utilizar o inspetor de elementos do navegador (F12) para identificar os seletores CSS para o nome do produto (h2.ui-search-item__title), preço (span.andes-money-amount__fraction), e URL do produto (a.ui-search-item__group__element). Notar que a paginação é baseada em parâmetros de URL como _Desde_49.
Desenvolvimento do Scraper com Playwright (Python):
Criar um script Python utilizando Playwright para headless browser automation. O script deve:
Navegar para a URL inicial.
Iterar pelas páginas de resultados (simulando clique em "Próxima página" ou manipulando o parâmetro _Desde_).
Para cada produto, extrair o título, preço e URL.
Tratar eventuais pop-ups ou carregamentos assíncronos (AJAX).
Montar um objeto JSON com os dados de cada produto.
Enviar o objeto JSON para um webhook de ingestão.
# Exemplo de trecho de scraper Python com Playwright
from playwright.sync_api import sync_playwright
import requests
import json
webhook_url = "https://hook.us1.make.com/abcdef12345" # Seu webhook do Make.com
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")
page.goto("https://www.mercadolivre.com.br/tenis-masculino-nike/lista#D[A:tenis%20masculino%20nike]", wait_until="networkidle")
all_products_data = []
for _ in range(3): # Limita a 3 páginas para exemplo
products = page.locator("li.ui-search-layout__item").all()
for product in products:
try:
title = product.locator("h2.ui-search-item__title").text_content().strip()
price = product.locator("span.andes-money-amount__fraction").text_content().strip()
product_url = product.locator("a.ui-search-item__group__element").get_attribute("href")
all_products_data.append({
"titulo": title,
"preco": float(price.replace('.', '').replace(',', '.')), # Convertendo para float
"url": product_url
})
except Exception as e:
print(f"Erro ao extrair produto: {e}")
# Tenta ir para a próxima página
next_button = page.locator("li.andes-pagination__button.andes-pagination__button--next")
if next_button.is_visible():
next_button.click()
page.wait_for_load_state("networkidle")
else:
break
browser.close()
# Envia os dados para o webhook
if all_products_data:
response = requests.post(webhook_url, json={"produtos": all_products_data})
print(f"Dados enviados ao webhook. Status: {response.status_code}")
else:
print("Nenhum dado para enviar.")
Configuração de Webhook de Ingestão (Make.com):
No Make.com, criar um novo cenário.
Primeiro módulo: "Webhooks" > "Custom Webhook". Copiar o endereço gerado (ex: https://hook.us1.make.com/abcdef12345).
Segundo módulo: "Iterator" para iterar sobre a lista de produtos recebida no array produtos.
Terceiro módulo: "Google Sheets" > "Add a Row" para inserir cada produto em uma planilha. Mapear os campos titulo, preco, url para as colunas da planilha.
Agendamento e Execução:
Scraper: O script Python pode ser agendado para rodar em um servidor VPS usando cronjob (ex: 0 9 * * * python3 /caminho/do/script.py).
Make.com: O cenário do Make.com é acionado automaticamente pelo webhook.
Workflow 2: Coleta de Artigos de Notícias via API e Análise Semântica com Claude
Este workflow utiliza uma API de notícias para coletar artigos e o Claude para resumir e extrair informações chave.
Utilização de API de Notícias:
Fonte: NewsAPI.org. Registrar-se para obter uma API Key.
Requisição: Fazer uma requisição GET para a API buscando notícias sobre "inteligência artificial" em português do Brasil.
Exemplo de URL da API: https://newsapi.org/v2/everything?q=inteligencia%20artificial&language=pt&sortBy=publishedAt&apiKey=SUA_API_KEY
Filtro e Seleção de Tópicos (N8N/Make.com):
No N8N, usar o nó "HTTP Request" para chamar a NewsAPI.
Usar um nó "Set" ou "Code" para filtrar os resultados, mantendo apenas artigos com source.name de veículos específicos (ex: "TecMundo", "Canaltech") e description com mais de 100 caracteres.
Iterar sobre os artigos filtrados.
Envio de Conteúdo para Claude para Resumo e Análise:
Para cada artigo, extrair o title, url e content (ou description).
Utilizar um nó "HTTP Request" (N8N) ou "Make an API Call" (Make.com) para enviar o content do artigo ao Claude (anthropic.com/v1/messages).
Prompt para Claude:
Você é um analista de dados especializado em sumarização e extração de entidades.
Recebi o seguinte artigo de notícias:
Título: {{ $json.title }}
URL: {{ $json.url }}
Conteúdo:
{{ $json.content }}
Por favor, faça o seguinte:
1. Crie um resumo conciso do artigo em 3-5 sentenças.
2. Liste as 3-5 entidades principais (pessoas, organizações, locais, tecnologias) mencionadas no artigo.
3. Identifique o sentimento geral do artigo (Positivo, Negativo, Neutro).
4. Sugira 2-3 tags relevantes para categorizar este artigo.
Formato de saída (JSON):
{
"resumo": "...",
"entidades_principais": ["entidade1", "entidade2", ...],
"sentimento": "...",
"tags": ["tag1", "tag2", ...]
}
Armazenamento e Alerta:
Após receber a resposta JSON do Claude, usar um nó "Google Sheets" > "Add a Row" para armazenar o título, URL original, o resumo, entidades, sentimento e tags em uma planilha.
Opcionalmente, usar um nó "Slack" > "Send Message" para enviar um alerta com o resumo de artigos muito relevantes (ex: sentimento "Negativo" para a palavra-chave "inteligência artificial").
Templates
Template de Prompt para Normalização de Dados Scrapados
Você é um especialista em processamento e normalização de dados brutos de web scraping.
Recebi o seguinte bloco de texto/HTML extraído de uma página de produto.
Minha tarefa é extrair e estruturar os dados chave em um formato JSON limpo.
Conteúdo bruto:
```html
<div class="product-detail">
<h1 class="product-name">Smart TV Samsung Neo QLED 55" 4K</h1>
<span class="product-price">R$ 4.999,00</span>
<p class="product-description">A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.</p>
<ul class="product-specs">
<li>Tamanho: 55 polegadas</li>
<li>Resolução: 3840 x 2160 (4K)</li>
<li>Marca: Samsung</li>
<li>Modelo: QN55QN90CAGXZD</li>
</ul>
<div class="availability out-of-stock">Sem estoque</div>
</div>
Por favor, extraia as seguintes informações e formate-as como um objeto JSON.
nome_produto: (string)
preco: (float, use ponto como separador decimal)
descricao: (string)
especificacoes: (objeto com chaves como "Tamanho", "Resolução", "Marca", "Modelo")
disponibilidade: (string, "Em estoque" ou "Sem estoque")
Se um campo não for encontrado, use null.
{
"nome_produto": "Smart TV Samsung Neo QLED 55\" 4K",
"preco": 4999.00,
"descricao": "A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.",
"especificacoes": {
"Tamanho": "55 polegadas",
"Resolução": "3840 x 2160 (4K)",
"Marca": "Samsung",
"Modelo": "QN55QN90CAGXZD"
},
"disponibilidade": "Sem estoque"
}
Este template representa o payload JSON que um script de scraping enviaria para um webhook do Make.com. No Make, o módulo "Webhooks > Custom Webhook" iria expor este formato, e os dados seriam acessíveis via {{1.data.produtos[]}} para iteração.
Checklist
Verificar robots.txt e Termos de Serviço do site alvo para conformidade.
Identificar padrões de bloqueio do site (CAPTCHA, IP Ban, detecção de headless browser).
Selecionar a ferramenta de scraping adequada (Playwright, Puppeteer, BeautifulSoup, Scrapy, Apify, Octoparse) com base na complexidade e dinamicidade da página.
Mapear seletores CSS ou XPath robustos para todos os dados relevantes, considerando mudanças futuras na estrutura HTML.
Implementar tratamento de paginação, carregamento assíncrono (AJAX) e redirecionamentos.
Utilizar proxies rotativos (ex: Bright Data, Oxylabs) para evitar bloqueios de IP, se necessário.
Adicionar user-agents variados e headers HTTP para simular diferentes navegadores e requisições legítimas.
Implementar mecanismos de retry com backoff exponencial para requisições falhas.
Estruturar o payload de dados de forma consistente (JSON) para envio via webhook ou API.
Validar a integridade, completude e formato dos dados extraídos antes do armazenamento final.
Configurar logs e alertas para monitorar a saúde e eventuais falhas do scraper.
Métricas de Referência
Métrica
Benchmark (Médio)
Meta (Otimizado)
Taxa de Sucesso de Extração
95-98%
99%+
Latência Média por Requisição
800-2500 ms
300-1000 ms
Custo por Registro Extraído
R$ 0.005 - R$ 0.08
R$ 0.001 - R$ 0.02
Volume Diário de Registros
5.000 - 50.000
100.000+
Frequência de Quebra de Scraper
1-2x / mês
<1x / mês
Erros Comuns
Bloqueio de IP ou CAPTCHA Recorrente: Como evitar: Não utilizar proxies rotativos ou usar um número insuficiente de proxies de baixa qualidade. Scrapers sem user-agents variados ou que não simulam comportamento humano (ex: sem atrasos aleatórios entre requisições) são facilmente detectados. Solução: Implementar pool de proxies residenciais ou datacenter de alta qualidade, rotacionar user-agents a cada requisição, adicionar atrasos aleatórios (time.sleep(random.uniform(2, 5))) e integrar serviços de resolução de CAPTCHA (ex: 2Captcha, Anti-Captcha) em caso de desafios.
Dados Incompletos ou Incorretos: Como evitar: Seletores CSS/XPath desatualizados ou muito genéricos que não capturam os elementos exatos ou que quebram com pequenas alterações no layout do site. Solução: Validar seletores frequentemente, usar seletores mais específicos (ex: div[data-testid="product-price"] em vez de span.price), e implementar validações pós-extração para verificar a presença e o formato dos dados esperados.
Performance Lenta e Consumo Excessivo de Recursos: Como evitar: Não otimizar requisições HTTP, usar navegadores headless sem networkidle ou domcontentloaded adequados, ou processar grandes volumes de dados em uma única thread. Solução: Utilizar bibliotecas HTTP leves como httpx para APIs, otimizar wait_until no Playwright/Puppeteer, e considerar paralelização ou distribuição da carga de scraping usando ferramentas como Scrapy (Python) ou arquiteturas baseadas em filas (RabbitMQ, Kafka) com workers em nuvem (AWS Lambda, Google Cloud Functions).
Dicas Avançadas
Captura de Eventos de Rede com Playwright/Puppeteer: Em vez de fazer parsing do HTML, intercepte as requisições XHR (AJAX) que o navegador faz para carregar os dados. Muitos sites carregam dados dinamicamente via APIs internas. Use page.on('request', ...) e page.on('response', ...) para capturar payloads JSON diretamente, sendo mais rápido e menos propenso a quebras de layout. Exemplo: page.route("**/api/products", lambda route: route.abort()) para bloquear requisições irrelevantes e page.on("response", lambda response: print(response.json())) para capturar as relevantes.
Web Scraping Distribuído com Cloud Functions: Para escalar extrações de grande volume, use Google Cloud Functions, AWS Lambda ou Azure Functions. Cada função pode ser acionada por um evento (ex: fila de mensagens) e executar uma tarefa de scraping específica para uma URL. Isso permite processamento paralelo e sem servidor, pagando apenas pelo tempo de execução. Configure um Pub/Sub (GCP) ou SQS (AWS) para gerenciar as URLs a serem raspadas.
Técnicas de Anti-Bot Evasão Avançadas: Além de proxies e user-agents, implemente headless-stealth (para Puppeteer/Playwright) para simular um navegador real, manipule o navigator.webdriver e outros atributos JavaScript que sites usam para detectar bots. Considere também simular movimentos do mouse e scrolls com page.mouse.move() ou page.evaluate(() => window.scrollBy(0, 100)).
Uso de IA para Extração Semiestruturada e Resiliência: Alimente grandes blocos de HTML ou texto para o Claude com prompts avançados que instruam a IA a identificar e extrair entidades mesmo sem seletores fixos. Isso é extremamente útil para sites com layouts variáveis ou onde os seletores mudam constantemente. Claude pode "entender" o contexto e extrair preço, nome_produto, descrição mesmo que o HTML mude, aumentando a resiliência do scraper.
Monitoramento Ativo de Alterações Estruturais: Crie um sistema que periodicamente raspa uma página de referência e compara o hash do HTML ou o count de elementos chaves (ex: número de itens de produto) com uma versão anterior. Se houver uma alteração significativa, dispare um alerta para o time de desenvolvimento, indicando uma possível quebra no scraper antes que os dados parem de fluir.
1---2name: data-scraping-automation3description: Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados.4license: MIT5---67# Data Scraping Automation89Esta skill capacita o Claude a projetar, implementar e otimizar automações de extração de dados web e estruturados, integrando ferramentas de automação e IA.1011---1213## Keywords1415web scraping, automação de dados, Make.com, N8N, Zapier, APIs de scraping, seletores CSS, XPath, extração estruturada, tratamento de CAPTCHA, proxy rotation, Playwright, Puppeteer, BeautifulSoup, extração de texto, normalização de dados.1617---1819## Quick Start20211. **Analisar `robots.txt` e Termos de Serviço**: Verificar permissões para scraping no domínio alvo, por exemplo, acessando `https://www.exemplo.com/robots.txt`.222. **Identificar Seletores**: Usar o inspetor de elementos do navegador para mapear seletores CSS ou XPath de itens como `div.produto-titulo` ou `//span[@class='preco']`.233. **Configurar Webhook de Ingestão**: Criar um endpoint de webhook em Make.com (módulo "Webhooks > Custom Webhook") ou N8N (nó "Webhook") para receber os dados extraídos, por exemplo, `https://hook.us1.make.com/abcdef12345`.244. **Desenvolver Script de Extração**: Implementar um script Python com Playwright para navegar e extrair dados, enviando-os para o webhook. Exemplo: `page.goto("https://www.exemplo.com/produtos"); dados = page.locator(".item-info").all_inner_texts(); requests.post(webhook_url, json={"data": dados})`.255. **Processamento e Armazenamento**: No Make/N8N, após receber os dados via webhook, utilizar módulos para processar (ex: "Parse JSON", "Text Parser") e armazenar (ex: "Google Sheets > Add a Row", "Airtable > Create a Record").2627---2829## Core Workflows3031### Workflow 1: Extração de Preços de E-commerce com Monitoramento Contínuo3233Este workflow detalha a automação da extração de preços de produtos de um site de e-commerce e seu monitoramento contínuo.34351. **Definição do Alvo e Análise Estrutural**:36 * **Alvo**: `https://www.mercadolivre.com.br/tenis-masculino-nike/lista#D[A:tenis%20masculino%20nike]`37 * **Análise**: Utilizar o inspetor de elementos do navegador (F12) para identificar os seletores CSS para o nome do produto (`h2.ui-search-item__title`), preço (`span.andes-money-amount__fraction`), e URL do produto (`a.ui-search-item__group__element`). Notar que a paginação é baseada em parâmetros de URL como `_Desde_49`.382. **Desenvolvimento do Scraper com Playwright (Python)**:39 * Criar um script Python utilizando Playwright para headless browser automation. O script deve:40 * Navegar para a URL inicial.41 * Iterar pelas páginas de resultados (simulando clique em "Próxima página" ou manipulando o parâmetro `_Desde_`).42 * Para cada produto, extrair o título, preço e URL.43 * Tratar eventuais pop-ups ou carregamentos assíncronos (AJAX).44 * Montar um objeto JSON com os dados de cada produto.45 * Enviar o objeto JSON para um webhook de ingestão.4647 ```python48 # Exemplo de trecho de scraper Python com Playwright49 from playwright.sync_api import sync_playwright50 import requests51 import json5253 webhook_url = "https://hook.us1.make.com/abcdef12345" # Seu webhook do Make.com5455 with sync_playwright() as p:56 browser = p.chromium.launch(headless=True)57 page = browser.new_page(user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36")58 page.goto("https://www.mercadolivre.com.br/tenis-masculino-nike/lista#D[A:tenis%20masculino%20nike]", wait_until="networkidle")5960 all_products_data = []61 for _ in range(3): # Limita a 3 páginas para exemplo62 products = page.locator("li.ui-search-layout__item").all()63 for product in products:64 try:65 title = product.locator("h2.ui-search-item__title").text_content().strip()66 price = product.locator("span.andes-money-amount__fraction").text_content().strip()67 product_url = product.locator("a.ui-search-item__group__element").get_attribute("href")68 all_products_data.append({69 "titulo": title,70 "preco": float(price.replace('.', '').replace(',', '.')), # Convertendo para float71 "url": product_url72 })73 except Exception as e:74 print(f"Erro ao extrair produto: {e}")7576 # Tenta ir para a próxima página77 next_button = page.locator("li.andes-pagination__button.andes-pagination__button--next")78 if next_button.is_visible():79 next_button.click()80 page.wait_for_load_state("networkidle")81 else:82 break8384 browser.close()8586 # Envia os dados para o webhook87 if all_products_data:88 response = requests.post(webhook_url, json={"produtos": all_products_data})89 print(f"Dados enviados ao webhook. Status: {response.status_code}")90 else:91 print("Nenhum dado para enviar.")92 ```933. **Configuração de Webhook de Ingestão (Make.com)**:94 * No Make.com, criar um novo cenário.95 * Primeiro módulo: "Webhooks" > "Custom Webhook". Copiar o endereço gerado (ex: `https://hook.us1.make.com/abcdef12345`).96 * Segundo módulo: "Iterator" para iterar sobre a lista de produtos recebida no array `produtos`.97 * Terceiro módulo: "Google Sheets" > "Add a Row" para inserir cada produto em uma planilha. Mapear os campos `titulo`, `preco`, `url` para as colunas da planilha.984. **Agendamento e Execução**:99 * **Scraper**: O script Python pode ser agendado para rodar em um servidor VPS usando `cronjob` (ex: `0 9 * * * python3 /caminho/do/script.py`).100 * **Make.com**: O cenário do Make.com é acionado automaticamente pelo webhook.101102### Workflow 2: Coleta de Artigos de Notícias via API e Análise Semântica com Claude103104Este workflow utiliza uma API de notícias para coletar artigos e o Claude para resumir e extrair informações chave.1051061. **Utilização de API de Notícias**:107 * **Fonte**: NewsAPI.org. Registrar-se para obter uma `API Key`.108 * **Requisição**: Fazer uma requisição GET para a API buscando notícias sobre "inteligência artificial" em português do Brasil.109 * Exemplo de URL da API: `https://newsapi.org/v2/everything?q=inteligencia%20artificial&language=pt&sortBy=publishedAt&apiKey=SUA_API_KEY`1102. **Filtro e Seleção de Tópicos (N8N/Make.com)**:111 * No N8N, usar o nó "HTTP Request" para chamar a NewsAPI.112 * Usar um nó "Set" ou "Code" para filtrar os resultados, mantendo apenas artigos com `source.name` de veículos específicos (ex: "TecMundo", "Canaltech") e `description` com mais de 100 caracteres.113 * Iterar sobre os artigos filtrados.1143. **Envio de Conteúdo para Claude para Resumo e Análise**:115 * Para cada artigo, extrair o `title`, `url` e `content` (ou `description`).116 * Utilizar um nó "HTTP Request" (N8N) ou "Make an API Call" (Make.com) para enviar o `content` do artigo ao Claude (`anthropic.com/v1/messages`).117 * **Prompt para Claude**:118 ```119 Você é um analista de dados especializado em sumarização e extração de entidades.120 Recebi o seguinte artigo de notícias:121122 Título: {{ $json.title }}123 URL: {{ $json.url }}124 Conteúdo:125 {{ $json.content }}126127 Por favor, faça o seguinte:128 1. Crie um resumo conciso do artigo em 3-5 sentenças.129 2. Liste as 3-5 entidades principais (pessoas, organizações, locais, tecnologias) mencionadas no artigo.130 3. Identifique o sentimento geral do artigo (Positivo, Negativo, Neutro).131 4. Sugira 2-3 tags relevantes para categorizar este artigo.132133 Formato de saída (JSON):134 {135 "resumo": "...",136 "entidades_principais": ["entidade1", "entidade2", ...],137 "sentimento": "...",138 "tags": ["tag1", "tag2", ...]139 }140 ```1414. **Armazenamento e Alerta**:142 * Após receber a resposta JSON do Claude, usar um nó "Google Sheets" > "Add a Row" para armazenar o título, URL original, o resumo, entidades, sentimento e tags em uma planilha.143 * Opcionalmente, usar um nó "Slack" > "Send Message" para enviar um alerta com o resumo de artigos muito relevantes (ex: sentimento "Negativo" para a palavra-chave "inteligência artificial").144145---146147## Templates148149### Template de Prompt para Normalização de Dados Scrapados150151```152Você é um especialista em processamento e normalização de dados brutos de web scraping.153Recebi o seguinte bloco de texto/HTML extraído de uma página de produto.154Minha tarefa é extrair e estruturar os dados chave em um formato JSON limpo.155156Conteúdo bruto:157```html158<div class="product-detail">159 <h1 class="product-name">Smart TV Samsung Neo QLED 55" 4K</h1>160 <span class="product-price">R$ 4.999,00</span>161 <p class="product-description">A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.</p>162 <ul class="product-specs">163 <li>Tamanho: 55 polegadas</li>164 <li>Resolução: 3840 x 2160 (4K)</li>165 <li>Marca: Samsung</li>166 <li>Modelo: QN55QN90CAGXZD</li>167 </ul>168 <div class="availability out-of-stock">Sem estoque</div>169</div>170```171172Por favor, extraia as seguintes informações e formate-as como um objeto JSON.173- `nome_produto`: (string)174- `preco`: (float, use ponto como separador decimal)175- `descricao`: (string)176- `especificacoes`: (objeto com chaves como "Tamanho", "Resolução", "Marca", "Modelo")177- `disponibilidade`: (string, "Em estoque" ou "Sem estoque")178179Se um campo não for encontrado, use `null`.180181```json182{183 "nome_produto": "Smart TV Samsung Neo QLED 55\" 4K",184 "preco": 4999.00,185 "descricao": "A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.",186 "especificacoes": {187 "Tamanho": "55 polegadas",188 "Resolução": "3840 x 2160 (4K)",189 "Marca": "Samsung",190 "Modelo": "QN55QN90CAGXZD"191 },192 "disponibilidade": "Sem estoque"193}194```195196### Template de Configuração de Webhook (Make.com)197198```199{200 "webhookId": "abcdef12345",201 "data": {202 "produtos": [203 {204 "titulo": "Tênis Nike Air Zoom Pegasus 40",205 "preco": 699.99,206 "url": "https://www.mercadolivre.com.br/tenis-nike-air-zoom-pegasus-40/p/MLB25000000"207 },208 {209 "titulo": "Tênis Nike Revolution 6 Next Nature",210 "preco": 349.99,211 "url": "https://www.mercadolivre.com.br/tenis-nike-revolution-6-next-nature/p/MLB25000001"212 }213 ],214 "timestamp": "2024-03-01T10:30:00Z"215 }216}217```218*Este template representa o payload JSON que um script de scraping enviaria para um webhook do Make.com. No Make, o módulo "Webhooks > Custom Webhook" iria expor este formato, e os dados seriam acessíveis via `{{1.data.produtos[]}}` para iteração.*219220---221222## Checklist223224- [x] Verificar `robots.txt` e Termos de Serviço do site alvo para conformidade.225- [x] Identificar padrões de bloqueio do site (CAPTCHA, IP Ban, detecção de headless browser).226- [x] Selecionar a ferramenta de scraping adequada (Playwright, Puppeteer, BeautifulSoup, Scrapy, Apify, Octoparse) com base na complexidade e dinamicidade da página.227- [x] Mapear seletores CSS ou XPath robustos para todos os dados relevantes, considerando mudanças futuras na estrutura HTML.228- [x] Implementar tratamento de paginação, carregamento assíncrono (AJAX) e redirecionamentos.229- [x] Utilizar proxies rotativos (ex: Bright Data, Oxylabs) para evitar bloqueios de IP, se necessário.230- [x] Adicionar `user-agents` variados e `headers` HTTP para simular diferentes navegadores e requisições legítimas.231- [x] Implementar mecanismos de retry com backoff exponencial para requisições falhas.232- [x] Estruturar o payload de dados de forma consistente (JSON) para envio via webhook ou API.233- [x] Validar a integridade, completude e formato dos dados extraídos antes do armazenamento final.234- [x] Configurar logs e alertas para monitorar a saúde e eventuais falhas do scraper.235236---237238## Métricas de Referência239240| Métrica | Benchmark (Médio) | Meta (Otimizado) |241|------------------------------|-------------------|------------------|242| Taxa de Sucesso de Extração | 95-98% | 99%+ |243| Latência Média por Requisição| 800-2500 ms | 300-1000 ms |244| Custo por Registro Extraído | R$ 0.005 - R$ 0.08| R$ 0.001 - R$ 0.02|245| Volume Diário de Registros | 5.000 - 50.000 | 100.000+ |246| Frequência de Quebra de Scraper| 1-2x / mês | <1x / mês |247248---249250## Erros Comuns2512521. **Bloqueio de IP ou CAPTCHA Recorrente**: **Como evitar**: Não utilizar proxies rotativos ou usar um número insuficiente de proxies de baixa qualidade. Scrapers sem `user-agents` variados ou que não simulam comportamento humano (ex: sem atrasos aleatórios entre requisições) são facilmente detectados. Solução: Implementar pool de proxies residenciais ou datacenter de alta qualidade, rotacionar `user-agents` a cada requisição, adicionar atrasos aleatórios (`time.sleep(random.uniform(2, 5))`) e integrar serviços de resolução de CAPTCHA (ex: 2Captcha, Anti-Captcha) em caso de desafios.2532. **Dados Incompletos ou Incorretos**: **Como evitar**: Seletores CSS/XPath desatualizados ou muito genéricos que não capturam os elementos exatos ou que quebram com pequenas alterações no layout do site. Solução: Validar seletores frequentemente, usar seletores mais específicos (ex: `div[data-testid="product-price"]` em vez de `span.price`), e implementar validações pós-extração para verificar a presença e o formato dos dados esperados.2543. **Performance Lenta e Consumo Excessivo de Recursos**: **Como evitar**: Não otimizar requisições HTTP, usar navegadores headless sem `networkidle` ou `domcontentloaded` adequados, ou processar grandes volumes de dados em uma única thread. Solução: Utilizar bibliotecas HTTP leves como `httpx` para APIs, otimizar `wait_until` no Playwright/Puppeteer, e considerar paralelização ou distribuição da carga de scraping usando ferramentas como Scrapy (Python) ou arquiteturas baseadas em filas (RabbitMQ, Kafka) com workers em nuvem (AWS Lambda, Google Cloud Functions).255256---257258## Dicas Avançadas2592601. **Captura de Eventos de Rede com Playwright/Puppeteer**: Em vez de fazer parsing do HTML, intercepte as requisições XHR (AJAX) que o navegador faz para carregar os dados. Muitos sites carregam dados dinamicamente via APIs internas. Use `page.on('request', ...)` e `page.on('response', ...)` para capturar payloads JSON diretamente, sendo mais rápido e menos propenso a quebras de layout. Exemplo: `page.route("**/api/products", lambda route: route.abort())` para bloquear requisições irrelevantes e `page.on("response", lambda response: print(response.json()))` para capturar as relevantes.2612. **Web Scraping Distribuído com Cloud Functions**: Para escalar extrações de grande volume, use Google Cloud Functions, AWS Lambda ou Azure Functions. Cada função pode ser acionada por um evento (ex: fila de mensagens) e executar uma tarefa de scraping específica para uma URL. Isso permite processamento paralelo e sem servidor, pagando apenas pelo tempo de execução. Configure um Pub/Sub (GCP) ou SQS (AWS) para gerenciar as URLs a serem raspadas.2623. **Técnicas de Anti-Bot Evasão Avançadas**: Além de proxies e `user-agents`, implemente `headless-stealth` (para Puppeteer/Playwright) para simular um navegador real, manipule o `navigator.webdriver` e outros atributos JavaScript que sites usam para detectar bots. Considere também simular movimentos do mouse e scrolls com `page.mouse.move()` ou `page.evaluate(() => window.scrollBy(0, 100))`.2634. **Uso de IA para Extração Semiestruturada e Resiliência**: Alimente grandes blocos de HTML ou texto para o Claude com prompts avançados que instruam a IA a identificar e extrair entidades mesmo sem seletores fixos. Isso é extremamente útil para sites com layouts variáveis ou onde os seletores mudam constantemente. Claude pode "entender" o contexto e extrair `preço`, `nome_produto`, `descrição` mesmo que o HTML mude, aumentando a resiliência do scraper.2645. **Monitoramento Ativo de Alterações Estruturais**: Crie um sistema que periodicamente raspa uma página de referência e compara o hash do HTML ou o count de elementos chaves (ex: número de itens de produto) com uma versão anterior. Se houver uma alteração significativa, dispare um alerta para o time de desenvolvimento, indicando uma possível quebra no scraper antes que os dados parem de fluir.
Run npx skillmds@latest add kursku/data-scraping-automation in your terminal (requires Node.js), paste this page's agent-chat prompt into Claude, Cursor, or any MCP-connected agent, or download the SKILL.md file and copy it into your agent's skills directory.
Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados. It is listed under Coding & Dev Tools on SkillMD.
This skill has not completed SkillMD's automated safety review yet. Independent scanners report: SkillSpector: PASS, Skill Scanner: PASS. Capability flags: makes network calls, reads secrets. SkillMD never runs a skill's scripts for you; review the SKILL.md before installing.
This skill is tagged as working with Claude Code, Claude.ai, OpenAI Codex. SKILL.md is an open format, so most agents that read a skills directory can load it too.
Yes. Installing skills from SkillMD is free. This skill is licensed under MIT.
kursku (@kursku) published this skill. Their other Agent Skills are listed on their SkillMD profile.