data-scraping-automation
Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados.
- License 许可
- MIT
- 所属仓库
- kursku/skills
- 最近更新
- 2026-03-27
- Stars
- ★ 124
- Forks
- 35
01 前言 Front Matter
- name
- data-scraping-automation
- risk
- safe
- license
- MIT
- metadata
- { "author": "Cafe Code AI", "updated": 1772323200000, "version": "1.0.0", "category": "12-ia-automacao" }
- description
- Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados.
02 资源文件 5
- 许可证LICENSE.txt10.0 KB
- 参考文档references/scverse_qc_guidelines.md7.4 KB
- 脚本scripts/qc_analysis.py9.3 KB
- 脚本scripts/qc_core.py6.5 KB
- 脚本scripts/qc_plotting.py8.3 KB
03 SKILL.md 正文
Data Scraping Automation
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.txte Termos de Serviço: Verificar permissões para scraping no domínio alvo, por exemplo, acessandohttps://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-tituloou//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.
-
Definição do Alvo e Análise Estrutural:
- Alvo:
https://www.mercadolivre.com.br/tenis-masculino-nike/lista#D[A:tenis%20masculino%20nike] - 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.
- Alvo:
-
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.") - Criar um script Python utilizando Playwright para headless browser automation. O script deve:
-
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,urlpara as colunas da planilha.
-
Agendamento e Execução:
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
- Fonte: NewsAPI.org. Registrar-se para obter uma
- 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.namede veículos específicos (ex: "TecMundo", "Canaltech") edescriptioncom 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,urlecontent(oudescription). - Utilizar um nó "HTTP Request" (N8N) ou "Make an API Call" (Make.com) para enviar o
contentdo 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", ...] }
- Para cada artigo, extrair o
- 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"
}
Template de Configuração de Webhook (Make.com)
{
"webhookId": "abcdef12345",
"data": {
"produtos": [
{
"titulo": "Tênis Nike Air Zoom Pegasus 40",
"preco": 699.99,
"url": "https://www.mercadolivre.com.br/tenis-nike-air-zoom-pegasus-40/p/MLB25000000"
},
{
"titulo": "Tênis Nike Revolution 6 Next Nature",
"preco": 349.99,
"url": "https://www.mercadolivre.com.br/tenis-nike-revolution-6-next-nature/p/MLB25000001"
}
],
"timestamp": "2024-03-01T10:30:00Z"
}
}
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
- [x] Verificar
robots.txte Termos de Serviço do site alvo para conformidade. - [x] Identificar padrões de bloqueio do site (CAPTCHA, IP Ban, detecção de headless browser).
- [x] Selecionar a ferramenta de scraping adequada (Playwright, Puppeteer, BeautifulSoup, Scrapy, Apify, Octoparse) com base na complexidade e dinamicidade da página.
- [x] Mapear seletores CSS ou XPath robustos para todos os dados relevantes, considerando mudanças futuras na estrutura HTML.
- [x] Implementar tratamento de paginação, carregamento assíncrono (AJAX) e redirecionamentos.
- [x] Utilizar proxies rotativos (ex: Bright Data, Oxylabs) para evitar bloqueios de IP, se necessário.
- [x] Adicionar
user-agentsvariados eheadersHTTP para simular diferentes navegadores e requisições legítimas. - [x] Implementar mecanismos de retry com backoff exponencial para requisições falhas.
- [x] Estruturar o payload de dados de forma consistente (JSON) para envio via webhook ou API.
- [x] Validar a integridade, completude e formato dos dados extraídos antes do armazenamento final.
- [x] 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-agentsvariados 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, rotacionaruser-agentsa 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 despan.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
networkidleoudomcontentloadedadequados, ou processar grandes volumes de dados em uma única thread. Solução: Utilizar bibliotecas HTTP leves comohttpxpara APIs, otimizarwait_untilno 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', ...)epage.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 epage.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, implementeheadless-stealth(para Puppeteer/Playwright) para simular um navegador real, manipule onavigator.webdrivere outros atributos JavaScript que sites usam para detectar bots. Considere também simular movimentos do mouse e scrolls compage.mouse.move()oupage.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çãomesmo 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.
04 同仓库更多 Skills
wedding-marketing
Wedding Marketing — Skill especializada para criar e executar estratégias de marketing digital para o mercado de casamentos, focando em noivos e fornecedores.
travel-marketing
Travel Marketing — Skill especializada para travel marketing
tech-startup-marketing
Tech Startup Marketing — Skill especializada para tech startup marketing
saas-marketing
Saas Marketing — Skill especializada para desenvolver e executar estratégias de marketing digital focadas no crescimento de produtos SaaS.
restaurant-marketing
Restaurant Marketing — Skill especializada para otimizar a presença digital, atrair e reter clientes em restaurantes.
real-estate-marketing
Real Estate Marketing — Skill especializada para criação e execução de estratégias de marketing digital para o setor imobiliário.