[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EC2RY4RAKP9TM7GMF3TMYR":3,"skill-same:01M6EC2RY4RAKP9TM7GMF3TMYR":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":48,"commitSha":49,"skillDirectory":50,"forksCount":51,"repositoryHtmlUrl":52,"repositoryHomepageUrl":53,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6EC2RY4RAKP9TM7GMF3TMYR","data-scraping-automation",null,"Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados.","kursku\u002Fskills","kursku","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F15705647?v=4","01M6E5VWJKMRJQ1PNFP2P0PYVZ","01M6E5VWSCHN2C3RVE67795NRC",124,"MIT","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F12-ia-automacao\u002Fdata-scraping-automation\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[28,29,30,31,32,33,34,35,36,37],"automation","data","scraping","data scraping automation","safe","web","code","para","de","ia","2026-11-10 10:12:30",false,"---\nname: data-scraping-automation\ndescription: \"Data Scraping Automation — Skill especializada para projetar, implementar e otimizar automações de extração de dados web e estruturados.\"\nlicense: MIT\nmetadata:\n  version: 1.0.0\n  author: Cafe Code AI\n  category: 12-ia-automacao\n  updated: 2026-03-01\nrisk: safe\n---\n\n# Data Scraping Automation\n\nEsta 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.\n\n---\n\n## Keywords\n\nweb 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.\n\n---\n\n## Quick Start\n\n1.  **Analisar `robots.txt` e Termos de Serviço**: Verificar permissões para scraping no domínio alvo, por exemplo, acessando `https:\u002F\u002Fwww.exemplo.com\u002Frobots.txt`.\n2.  **Identificar Seletores**: Usar o inspetor de elementos do navegador para mapear seletores CSS ou XPath de itens como `div.produto-titulo` ou `\u002F\u002Fspan[@class='preco']`.\n3.  **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:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345`.\n4.  **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:\u002F\u002Fwww.exemplo.com\u002Fprodutos\"); dados = page.locator(\".item-info\").all_inner_texts(); requests.post(webhook_url, json={\"data\": dados})`.\n5.  **Processamento e Armazenamento**: No Make\u002FN8N, 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\").\n\n---\n\n## Core Workflows\n\n### Workflow 1: Extração de Preços de E-commerce com Monitoramento Contínuo\n\nEste workflow detalha a automação da extração de preços de produtos de um site de e-commerce e seu monitoramento contínuo.\n\n1.  **Definição do Alvo e Análise Estrutural**:\n    *   **Alvo**: `https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-masculino-nike\u002Flista#D[A:tenis%20masculino%20nike]`\n    *   **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`.\n2.  **Desenvolvimento do Scraper com Playwright (Python)**:\n    *   Criar um script Python utilizando Playwright para headless browser automation. O script deve:\n        *   Navegar para a URL inicial.\n        *   Iterar pelas páginas de resultados (simulando clique em \"Próxima página\" ou manipulando o parâmetro `_Desde_`).\n        *   Para cada produto, extrair o título, preço e URL.\n        *   Tratar eventuais pop-ups ou carregamentos assíncronos (AJAX).\n        *   Montar um objeto JSON com os dados de cada produto.\n        *   Enviar o objeto JSON para um webhook de ingestão.\n\n    ```python\n    # Exemplo de trecho de scraper Python com Playwright\n    from playwright.sync_api import sync_playwright\n    import requests\n    import json\n\n    webhook_url = \"https:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345\" # Seu webhook do Make.com\n\n    with sync_playwright() as p:\n        browser = p.chromium.launch(headless=True)\n        page = browser.new_page(user_agent=\"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\")\n        page.goto(\"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-masculino-nike\u002Flista#D[A:tenis%20masculino%20nike]\", wait_until=\"networkidle\")\n\n        all_products_data = []\n        for _ in range(3): # Limita a 3 páginas para exemplo\n            products = page.locator(\"li.ui-search-layout__item\").all()\n            for product in products:\n                try:\n                    title = product.locator(\"h2.ui-search-item__title\").text_content().strip()\n                    price = product.locator(\"span.andes-money-amount__fraction\").text_content().strip()\n                    product_url = product.locator(\"a.ui-search-item__group__element\").get_attribute(\"href\")\n                    all_products_data.append({\n                        \"titulo\": title,\n                        \"preco\": float(price.replace('.', '').replace(',', '.')), # Convertendo para float\n                        \"url\": product_url\n                    })\n                except Exception as e:\n                    print(f\"Erro ao extrair produto: {e}\")\n            \n            # Tenta ir para a próxima página\n            next_button = page.locator(\"li.andes-pagination__button.andes-pagination__button--next\")\n            if next_button.is_visible():\n                next_button.click()\n                page.wait_for_load_state(\"networkidle\")\n            else:\n                break\n        \n        browser.close()\n        \n        # Envia os dados para o webhook\n        if all_products_data:\n            response = requests.post(webhook_url, json={\"produtos\": all_products_data})\n            print(f\"Dados enviados ao webhook. Status: {response.status_code}\")\n        else:\n            print(\"Nenhum dado para enviar.\")\n    ```\n3.  **Configuração de Webhook de Ingestão (Make.com)**:\n    *   No Make.com, criar um novo cenário.\n    *   Primeiro módulo: \"Webhooks\" > \"Custom Webhook\". Copiar o endereço gerado (ex: `https:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345`).\n    *   Segundo módulo: \"Iterator\" para iterar sobre a lista de produtos recebida no array `produtos`.\n    *   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.\n4.  **Agendamento e Execução**:\n    *   **Scraper**: O script Python pode ser agendado para rodar em um servidor VPS usando `cronjob` (ex: `0 9 * * * python3 \u002Fcaminho\u002Fdo\u002Fscript.py`).\n    *   **Make.com**: O cenário do Make.com é acionado automaticamente pelo webhook.\n\n### Workflow 2: Coleta de Artigos de Notícias via API e Análise Semântica com Claude\n\nEste workflow utiliza uma API de notícias para coletar artigos e o Claude para resumir e extrair informações chave.\n\n1.  **Utilização de API de Notícias**:\n    *   **Fonte**: NewsAPI.org. Registrar-se para obter uma `API Key`.\n    *   **Requisição**: Fazer uma requisição GET para a API buscando notícias sobre \"inteligência artificial\" em português do Brasil.\n    *   Exemplo de URL da API: `https:\u002F\u002Fnewsapi.org\u002Fv2\u002Feverything?q=inteligencia%20artificial&language=pt&sortBy=publishedAt&apiKey=SUA_API_KEY`\n2.  **Filtro e Seleção de Tópicos (N8N\u002FMake.com)**:\n    *   No N8N, usar o nó \"HTTP Request\" para chamar a NewsAPI.\n    *   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.\n    *   Iterar sobre os artigos filtrados.\n3.  **Envio de Conteúdo para Claude para Resumo e Análise**:\n    *   Para cada artigo, extrair o `title`, `url` e `content` (ou `description`).\n    *   Utilizar um nó \"HTTP Request\" (N8N) ou \"Make an API Call\" (Make.com) para enviar o `content` do artigo ao Claude (`anthropic.com\u002Fv1\u002Fmessages`).\n    *   **Prompt para Claude**:\n        ```\n        Você é um analista de dados especializado em sumarização e extração de entidades.\n        Recebi o seguinte artigo de notícias:\n\n        Título: {{ $json.title }}\n        URL: {{ $json.url }}\n        Conteúdo:\n        {{ $json.content }}\n\n        Por favor, faça o seguinte:\n        1. Crie um resumo conciso do artigo em 3-5 sentenças.\n        2. Liste as 3-5 entidades principais (pessoas, organizações, locais, tecnologias) mencionadas no artigo.\n        3. Identifique o sentimento geral do artigo (Positivo, Negativo, Neutro).\n        4. Sugira 2-3 tags relevantes para categorizar este artigo.\n\n        Formato de saída (JSON):\n        {\n          \"resumo\": \"...\",\n          \"entidades_principais\": [\"entidade1\", \"entidade2\", ...],\n          \"sentimento\": \"...\",\n          \"tags\": [\"tag1\", \"tag2\", ...]\n        }\n        ```\n4.  **Armazenamento e Alerta**:\n    *   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.\n    *   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\").\n\n---\n\n## Templates\n\n### Template de Prompt para Normalização de Dados Scrapados\n\n```\nVocê é um especialista em processamento e normalização de dados brutos de web scraping.\nRecebi o seguinte bloco de texto\u002FHTML extraído de uma página de produto.\nMinha tarefa é extrair e estruturar os dados chave em um formato JSON limpo.\n\nConteúdo bruto:\n```html\n\u003Cdiv class=\"product-detail\">\n    \u003Ch1 class=\"product-name\">Smart TV Samsung Neo QLED 55\" 4K\u003C\u002Fh1>\n    \u003Cspan class=\"product-price\">R$ 4.999,00\u003C\u002Fspan>\n    \u003Cp class=\"product-description\">A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.\u003C\u002Fp>\n    \u003Cul class=\"product-specs\">\n        \u003Cli>Tamanho: 55 polegadas\u003C\u002Fli>\n        \u003Cli>Resolução: 3840 x 2160 (4K)\u003C\u002Fli>\n        \u003Cli>Marca: Samsung\u003C\u002Fli>\n        \u003Cli>Modelo: QN55QN90CAGXZD\u003C\u002Fli>\n    \u003C\u002Ful>\n    \u003Cdiv class=\"availability out-of-stock\">Sem estoque\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\nPor favor, extraia as seguintes informações e formate-as como um objeto JSON.\n- `nome_produto`: (string)\n- `preco`: (float, use ponto como separador decimal)\n- `descricao`: (string)\n- `especificacoes`: (objeto com chaves como \"Tamanho\", \"Resolução\", \"Marca\", \"Modelo\")\n- `disponibilidade`: (string, \"Em estoque\" ou \"Sem estoque\")\n\nSe um campo não for encontrado, use `null`.\n\n```json\n{\n  \"nome_produto\": \"Smart TV Samsung Neo QLED 55\\\" 4K\",\n  \"preco\": 4999.00,\n  \"descricao\": \"A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.\",\n  \"especificacoes\": {\n    \"Tamanho\": \"55 polegadas\",\n    \"Resolução\": \"3840 x 2160 (4K)\",\n    \"Marca\": \"Samsung\",\n    \"Modelo\": \"QN55QN90CAGXZD\"\n  },\n  \"disponibilidade\": \"Sem estoque\"\n}\n```\n\n### Template de Configuração de Webhook (Make.com)\n\n```\n{\n  \"webhookId\": \"abcdef12345\",\n  \"data\": {\n    \"produtos\": [\n      {\n        \"titulo\": \"Tênis Nike Air Zoom Pegasus 40\",\n        \"preco\": 699.99,\n        \"url\": \"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-nike-air-zoom-pegasus-40\u002Fp\u002FMLB25000000\"\n      },\n      {\n        \"titulo\": \"Tênis Nike Revolution 6 Next Nature\",\n        \"preco\": 349.99,\n        \"url\": \"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-nike-revolution-6-next-nature\u002Fp\u002FMLB25000001\"\n      }\n    ],\n    \"timestamp\": \"2024-03-01T10:30:00Z\"\n  }\n}\n```\n*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.*\n\n---\n\n## Checklist\n\n- [x] Verificar `robots.txt` e Termos de Serviço do site alvo para conformidade.\n- [x] Identificar padrões de bloqueio do site (CAPTCHA, IP Ban, detecção de headless browser).\n- [x] Selecionar a ferramenta de scraping adequada (Playwright, Puppeteer, BeautifulSoup, Scrapy, Apify, Octoparse) com base na complexidade e dinamicidade da página.\n- [x] Mapear seletores CSS ou XPath robustos para todos os dados relevantes, considerando mudanças futuras na estrutura HTML.\n- [x] Implementar tratamento de paginação, carregamento assíncrono (AJAX) e redirecionamentos.\n- [x] Utilizar proxies rotativos (ex: Bright Data, Oxylabs) para evitar bloqueios de IP, se necessário.\n- [x] Adicionar `user-agents` variados e `headers` HTTP para simular diferentes navegadores e requisições legítimas.\n- [x] Implementar mecanismos de retry com backoff exponencial para requisições falhas.\n- [x] Estruturar o payload de dados de forma consistente (JSON) para envio via webhook ou API.\n- [x] Validar a integridade, completude e formato dos dados extraídos antes do armazenamento final.\n- [x] Configurar logs e alertas para monitorar a saúde e eventuais falhas do scraper.\n\n---\n\n## Métricas de Referência\n\n| Métrica                      | Benchmark (Médio) | Meta (Otimizado) |\n|------------------------------|-------------------|------------------|\n| Taxa de Sucesso de Extração  | 95-98%            | 99%+             |\n| Latência Média por Requisição| 800-2500 ms       | 300-1000 ms      |\n| Custo por Registro Extraído  | R$ 0.005 - R$ 0.08| R$ 0.001 - R$ 0.02|\n| Volume Diário de Registros   | 5.000 - 50.000    | 100.000+         |\n| Frequência de Quebra de Scraper| 1-2x \u002F mês      | \u003C1x \u002F mês        |\n\n---\n\n## Erros Comuns\n\n1.  **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.\n2.  **Dados Incompletos ou Incorretos**: **Como evitar**: Seletores CSS\u002FXPath 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.\n3.  **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\u002FPuppeteer, 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).\n\n---\n\n## Dicas Avançadas\n\n1.  **Captura de Eventos de Rede com Playwright\u002FPuppeteer**: 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(\"**\u002Fapi\u002Fproducts\", lambda route: route.abort())` para bloquear requisições irrelevantes e `page.on(\"response\", lambda response: print(response.json()))` para capturar as relevantes.\n2.  **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\u002FSub (GCP) ou SQS (AWS) para gerenciar as URLs a serem raspadas.\n3.  **Técnicas de Anti-Bot Evasão Avançadas**: Além de proxies e `user-agents`, implemente `headless-stealth` (para Puppeteer\u002FPlaywright) 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))`.\n4.  **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.\n5.  **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.","# Data Scraping Automation\n\nEsta 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.\n\n---\n\n## Keywords\n\nweb 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.\n\n---\n\n## Quick Start\n\n1.  **Analisar `robots.txt` e Termos de Serviço**: Verificar permissões para scraping no domínio alvo, por exemplo, acessando `https:\u002F\u002Fwww.exemplo.com\u002Frobots.txt`.\n2.  **Identificar Seletores**: Usar o inspetor de elementos do navegador para mapear seletores CSS ou XPath de itens como `div.produto-titulo` ou `\u002F\u002Fspan[@class='preco']`.\n3.  **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:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345`.\n4.  **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:\u002F\u002Fwww.exemplo.com\u002Fprodutos\"); dados = page.locator(\".item-info\").all_inner_texts(); requests.post(webhook_url, json={\"data\": dados})`.\n5.  **Processamento e Armazenamento**: No Make\u002FN8N, 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\").\n\n---\n\n## Core Workflows\n\n### Workflow 1: Extração de Preços de E-commerce com Monitoramento Contínuo\n\nEste workflow detalha a automação da extração de preços de produtos de um site de e-commerce e seu monitoramento contínuo.\n\n1.  **Definição do Alvo e Análise Estrutural**:\n    *   **Alvo**: `https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-masculino-nike\u002Flista#D[A:tenis%20masculino%20nike]`\n    *   **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`.\n2.  **Desenvolvimento do Scraper com Playwright (Python)**:\n    *   Criar um script Python utilizando Playwright para headless browser automation. O script deve:\n        *   Navegar para a URL inicial.\n        *   Iterar pelas páginas de resultados (simulando clique em \"Próxima página\" ou manipulando o parâmetro `_Desde_`).\n        *   Para cada produto, extrair o título, preço e URL.\n        *   Tratar eventuais pop-ups ou carregamentos assíncronos (AJAX).\n        *   Montar um objeto JSON com os dados de cada produto.\n        *   Enviar o objeto JSON para um webhook de ingestão.\n\n    ```python\n    # Exemplo de trecho de scraper Python com Playwright\n    from playwright.sync_api import sync_playwright\n    import requests\n    import json\n\n    webhook_url = \"https:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345\" # Seu webhook do Make.com\n\n    with sync_playwright() as p:\n        browser = p.chromium.launch(headless=True)\n        page = browser.new_page(user_agent=\"Mozilla\u002F5.0 (Windows NT 10.0; Win64; x64) AppleWebKit\u002F537.36 (KHTML, like Gecko) Chrome\u002F120.0.0.0 Safari\u002F537.36\")\n        page.goto(\"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-masculino-nike\u002Flista#D[A:tenis%20masculino%20nike]\", wait_until=\"networkidle\")\n\n        all_products_data = []\n        for _ in range(3): # Limita a 3 páginas para exemplo\n            products = page.locator(\"li.ui-search-layout__item\").all()\n            for product in products:\n                try:\n                    title = product.locator(\"h2.ui-search-item__title\").text_content().strip()\n                    price = product.locator(\"span.andes-money-amount__fraction\").text_content().strip()\n                    product_url = product.locator(\"a.ui-search-item__group__element\").get_attribute(\"href\")\n                    all_products_data.append({\n                        \"titulo\": title,\n                        \"preco\": float(price.replace('.', '').replace(',', '.')), # Convertendo para float\n                        \"url\": product_url\n                    })\n                except Exception as e:\n                    print(f\"Erro ao extrair produto: {e}\")\n            \n            # Tenta ir para a próxima página\n            next_button = page.locator(\"li.andes-pagination__button.andes-pagination__button--next\")\n            if next_button.is_visible():\n                next_button.click()\n                page.wait_for_load_state(\"networkidle\")\n            else:\n                break\n        \n        browser.close()\n        \n        # Envia os dados para o webhook\n        if all_products_data:\n            response = requests.post(webhook_url, json={\"produtos\": all_products_data})\n            print(f\"Dados enviados ao webhook. Status: {response.status_code}\")\n        else:\n            print(\"Nenhum dado para enviar.\")\n    ```\n3.  **Configuração de Webhook de Ingestão (Make.com)**:\n    *   No Make.com, criar um novo cenário.\n    *   Primeiro módulo: \"Webhooks\" > \"Custom Webhook\". Copiar o endereço gerado (ex: `https:\u002F\u002Fhook.us1.make.com\u002Fabcdef12345`).\n    *   Segundo módulo: \"Iterator\" para iterar sobre a lista de produtos recebida no array `produtos`.\n    *   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.\n4.  **Agendamento e Execução**:\n    *   **Scraper**: O script Python pode ser agendado para rodar em um servidor VPS usando `cronjob` (ex: `0 9 * * * python3 \u002Fcaminho\u002Fdo\u002Fscript.py`).\n    *   **Make.com**: O cenário do Make.com é acionado automaticamente pelo webhook.\n\n### Workflow 2: Coleta de Artigos de Notícias via API e Análise Semântica com Claude\n\nEste workflow utiliza uma API de notícias para coletar artigos e o Claude para resumir e extrair informações chave.\n\n1.  **Utilização de API de Notícias**:\n    *   **Fonte**: NewsAPI.org. Registrar-se para obter uma `API Key`.\n    *   **Requisição**: Fazer uma requisição GET para a API buscando notícias sobre \"inteligência artificial\" em português do Brasil.\n    *   Exemplo de URL da API: `https:\u002F\u002Fnewsapi.org\u002Fv2\u002Feverything?q=inteligencia%20artificial&language=pt&sortBy=publishedAt&apiKey=SUA_API_KEY`\n2.  **Filtro e Seleção de Tópicos (N8N\u002FMake.com)**:\n    *   No N8N, usar o nó \"HTTP Request\" para chamar a NewsAPI.\n    *   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.\n    *   Iterar sobre os artigos filtrados.\n3.  **Envio de Conteúdo para Claude para Resumo e Análise**:\n    *   Para cada artigo, extrair o `title`, `url` e `content` (ou `description`).\n    *   Utilizar um nó \"HTTP Request\" (N8N) ou \"Make an API Call\" (Make.com) para enviar o `content` do artigo ao Claude (`anthropic.com\u002Fv1\u002Fmessages`).\n    *   **Prompt para Claude**:\n        ```\n        Você é um analista de dados especializado em sumarização e extração de entidades.\n        Recebi o seguinte artigo de notícias:\n\n        Título: {{ $json.title }}\n        URL: {{ $json.url }}\n        Conteúdo:\n        {{ $json.content }}\n\n        Por favor, faça o seguinte:\n        1. Crie um resumo conciso do artigo em 3-5 sentenças.\n        2. Liste as 3-5 entidades principais (pessoas, organizações, locais, tecnologias) mencionadas no artigo.\n        3. Identifique o sentimento geral do artigo (Positivo, Negativo, Neutro).\n        4. Sugira 2-3 tags relevantes para categorizar este artigo.\n\n        Formato de saída (JSON):\n        {\n          \"resumo\": \"...\",\n          \"entidades_principais\": [\"entidade1\", \"entidade2\", ...],\n          \"sentimento\": \"...\",\n          \"tags\": [\"tag1\", \"tag2\", ...]\n        }\n        ```\n4.  **Armazenamento e Alerta**:\n    *   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.\n    *   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\").\n\n---\n\n## Templates\n\n### Template de Prompt para Normalização de Dados Scrapados\n\n```\nVocê é um especialista em processamento e normalização de dados brutos de web scraping.\nRecebi o seguinte bloco de texto\u002FHTML extraído de uma página de produto.\nMinha tarefa é extrair e estruturar os dados chave em um formato JSON limpo.\n\nConteúdo bruto:\n```html\n\u003Cdiv class=\"product-detail\">\n    \u003Ch1 class=\"product-name\">Smart TV Samsung Neo QLED 55\" 4K\u003C\u002Fh1>\n    \u003Cspan class=\"product-price\">R$ 4.999,00\u003C\u002Fspan>\n    \u003Cp class=\"product-description\">A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.\u003C\u002Fp>\n    \u003Cul class=\"product-specs\">\n        \u003Cli>Tamanho: 55 polegadas\u003C\u002Fli>\n        \u003Cli>Resolução: 3840 x 2160 (4K)\u003C\u002Fli>\n        \u003Cli>Marca: Samsung\u003C\u002Fli>\n        \u003Cli>Modelo: QN55QN90CAGXZD\u003C\u002Fli>\n    \u003C\u002Ful>\n    \u003Cdiv class=\"availability out-of-stock\">Sem estoque\u003C\u002Fdiv>\n\u003C\u002Fdiv>\n```\n\nPor favor, extraia as seguintes informações e formate-as como um objeto JSON.\n- `nome_produto`: (string)\n- `preco`: (float, use ponto como separador decimal)\n- `descricao`: (string)\n- `especificacoes`: (objeto com chaves como \"Tamanho\", \"Resolução\", \"Marca\", \"Modelo\")\n- `disponibilidade`: (string, \"Em estoque\" ou \"Sem estoque\")\n\nSe um campo não for encontrado, use `null`.\n\n```json\n{\n  \"nome_produto\": \"Smart TV Samsung Neo QLED 55\\\" 4K\",\n  \"preco\": 4999.00,\n  \"descricao\": \"A melhor experiência visual com tecnologia Neo QLED. Processador Neural Quantum 4K.\",\n  \"especificacoes\": {\n    \"Tamanho\": \"55 polegadas\",\n    \"Resolução\": \"3840 x 2160 (4K)\",\n    \"Marca\": \"Samsung\",\n    \"Modelo\": \"QN55QN90CAGXZD\"\n  },\n  \"disponibilidade\": \"Sem estoque\"\n}\n```\n\n### Template de Configuração de Webhook (Make.com)\n\n```\n{\n  \"webhookId\": \"abcdef12345\",\n  \"data\": {\n    \"produtos\": [\n      {\n        \"titulo\": \"Tênis Nike Air Zoom Pegasus 40\",\n        \"preco\": 699.99,\n        \"url\": \"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-nike-air-zoom-pegasus-40\u002Fp\u002FMLB25000000\"\n      },\n      {\n        \"titulo\": \"Tênis Nike Revolution 6 Next Nature\",\n        \"preco\": 349.99,\n        \"url\": \"https:\u002F\u002Fwww.mercadolivre.com.br\u002Ftenis-nike-revolution-6-next-nature\u002Fp\u002FMLB25000001\"\n      }\n    ],\n    \"timestamp\": \"2024-03-01T10:30:00Z\"\n  }\n}\n```\n*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.*\n\n---\n\n## Checklist\n\n- [x] Verificar `robots.txt` e Termos de Serviço do site alvo para conformidade.\n- [x] Identificar padrões de bloqueio do site (CAPTCHA, IP Ban, detecção de headless browser).\n- [x] Selecionar a ferramenta de scraping adequada (Playwright, Puppeteer, BeautifulSoup, Scrapy, Apify, Octoparse) com base na complexidade e dinamicidade da página.\n- [x] Mapear seletores CSS ou XPath robustos para todos os dados relevantes, considerando mudanças futuras na estrutura HTML.\n- [x] Implementar tratamento de paginação, carregamento assíncrono (AJAX) e redirecionamentos.\n- [x] Utilizar proxies rotativos (ex: Bright Data, Oxylabs) para evitar bloqueios de IP, se necessário.\n- [x] Adicionar `user-agents` variados e `headers` HTTP para simular diferentes navegadores e requisições legítimas.\n- [x] Implementar mecanismos de retry com backoff exponencial para requisições falhas.\n- [x] Estruturar o payload de dados de forma consistente (JSON) para envio via webhook ou API.\n- [x] Validar a integridade, completude e formato dos dados extraídos antes do armazenamento final.\n- [x] Configurar logs e alertas para monitorar a saúde e eventuais falhas do scraper.\n\n---\n\n## Métricas de Referência\n\n| Métrica                      | Benchmark (Médio) | Meta (Otimizado) |\n|------------------------------|-------------------|------------------|\n| Taxa de Sucesso de Extração  | 95-98%            | 99%+             |\n| Latência Média por Requisição| 800-2500 ms       | 300-1000 ms      |\n| Custo por Registro Extraído  | R$ 0.005 - R$ 0.08| R$ 0.001 - R$ 0.02|\n| Volume Diário de Registros   | 5.000 - 50.000    | 100.000+         |\n| Frequência de Quebra de Scraper| 1-2x \u002F mês      | \u003C1x \u002F mês        |\n\n---\n\n## Erros Comuns\n\n1.  **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.\n2.  **Dados Incompletos ou Incorretos**: **Como evitar**: Seletores CSS\u002FXPath 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.\n3.  **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\u002FPuppeteer, 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).\n\n---\n\n## Dicas Avançadas\n\n1.  **Captura de Eventos de Rede com Playwright\u002FPuppeteer**: 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(\"**\u002Fapi\u002Fproducts\", lambda route: route.abort())` para bloquear requisições irrelevantes e `page.on(\"response\", lambda response: print(response.json()))` para capturar as relevantes.\n2.  **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\u002FSub (GCP) ou SQS (AWS) para gerenciar as URLs a serem raspadas.\n3.  **Técnicas de Anti-Bot Evasão Avançadas**: Além de proxies e `user-agents`, implemente `headless-stealth` (para Puppeteer\u002FPlaywright) 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))`.\n4.  **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.\n5.  **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.",{"name":5,"risk":32,"license":14,"metadata":43,"description":7},{"author":44,"updated":45,"version":46,"category":47},"Cafe Code AI",1772323200000,"1.0.0","12-ia-automacao","master","346c313fd2ec241a088c68274da26c538422568b","packs\u002Fkit-510-ptbr\u002F12-ia-automacao\u002Fdata-scraping-automation",35,"https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills","https:\u002F\u002Fclaude.ai","https:\u002F\u002Fgithub.com\u002Fkursku","2026-03-27 22:43:37",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add kursku\u002Fskills --skill data-scraping-automation",{"tool":62,"command":63},"bunx","bunx skills add kursku\u002Fskills --skill data-scraping-automation",{"tool":65,"command":66},"pnpm","pnpm dlx skills add kursku\u002Fskills --skill data-scraping-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F12-ia-automacao\u002Fdata-scraping-automation\u002FSKILL.md",true,[70,76,82,88,92],{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"LICENSE.txt","LICENSE","许可证",10254,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fknowledge-work-plugins-main\u002Fbio-research\u002Fskills\u002Fsingle-cell-rna-qc\u002FLICENSE.txt",{"path":77,"resourceType":78,"resourceTypeDesc":79,"sizeBytes":80,"sourceHtmlUrl":81},"references\u002Fscverse_qc_guidelines.md","REFERENCE","参考文档",7587,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fknowledge-work-plugins-main\u002Fbio-research\u002Fskills\u002Fsingle-cell-rna-qc\u002Freferences\u002Fscverse_qc_guidelines.md",{"path":83,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"scripts\u002Fqc_analysis.py","SCRIPT","脚本",9533,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fknowledge-work-plugins-main\u002Fbio-research\u002Fskills\u002Fsingle-cell-rna-qc\u002Fscripts\u002Fqc_analysis.py",{"path":89,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":90,"sourceHtmlUrl":91},"scripts\u002Fqc_core.py",6675,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fknowledge-work-plugins-main\u002Fbio-research\u002Fskills\u002Fsingle-cell-rna-qc\u002Fscripts\u002Fqc_core.py",{"path":93,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":94,"sourceHtmlUrl":95},"scripts\u002Fqc_plotting.py",8501,"https:\u002F\u002Fgithub.com\u002Fvitalikpestov\u002FSkills-Catalog\u002Fblob\u002Fmain\u002F_AI-Automation\u002Fknowledge-work-plugins-main\u002Fbio-research\u002Fskills\u002Fsingle-cell-rna-qc\u002Fscripts\u002Fqc_plotting.py",[97,113,124,136,147,157],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":109,"publishedAt":38},"01M6ECKM7725267ZM3XNYWH608","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.","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Fwedding-marketing\u002FSKILL.md",[103,106],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000019","营销推广",{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000035","市场营销",[110,111,112,36,35,34],"wedding marketing","marketing","marketing digital",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":121,"publishedAt":38},"01M6ECKGP656JQC2C6CK5JH3ZG","travel-marketing","Travel Marketing — Skill especializada para travel marketing","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Ftravel-marketing\u002FSKILL.md",[119,120],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},[122,123,111,35,34,32],"travel marketing","travel",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":132,"publishedAt":38},"01M6ECKBY53SJ7E167D6BXTMRK","tech-startup-marketing","Tech Startup Marketing — Skill especializada para tech startup marketing","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Ftech-startup-marketing\u002FSKILL.md",[130,131],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},[133,134,111,135,35,34,32],"tech startup marketing","tech","startup",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":144,"publishedAt":38},"01M6ECK7W2W0J5MZ8BZHFM516P","saas-marketing","Saas Marketing — Skill especializada para desenvolver e executar estratégias de marketing digital focadas no crescimento de produtos SaaS.","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Fsaas-marketing\u002FSKILL.md",[142,143],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},[145,111,146,32,112,36,35,34],"saas marketing","saas",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":155,"publishedAt":38},"01M6ECK42ZSX5ND0SCTRKD7XKB","restaurant-marketing","Restaurant Marketing — Skill especializada para otimizar a presença digital, atrair e reter clientes em restaurantes.","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Frestaurant-marketing\u002FSKILL.md",[153,154],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},[156,111,34,35],"restaurant marketing",{"skillNo":158,"name":159,"nameZh":6,"description":160,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":161,"categories":162,"keywords":165,"publishedAt":38},"01M6ECK0S48CPYE9P7PRAG9R3T","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.","https:\u002F\u002Fgithub.com\u002Fkursku\u002Fskills\u002Fblob\u002Fmaster\u002Fpacks\u002Fkit-510-ptbr\u002F16-nichos-especificos\u002Freal-estate-marketing\u002FSKILL.md",[163,164],{"categoryNo":104,"categoryName":105,"taxonomyType":20,"taxonomyTypeDesc":21},{"categoryNo":107,"categoryName":108,"taxonomyType":25,"taxonomyTypeDesc":26},[111,166,167,34,35,36,112,32],"real estate","real estate marketing"]