Pular para conteúdo

EXTRACT_LINKS - Extração de Links do HTML

O que é este Node?

O EXTRACT_LINKS é o node responsável por extrair todos os links (URLs) presentes em um documento HTML, retornando uma lista única de URLs encontradas.

Por que este Node existe?

Links em HTML podem estar espalhados por todo o documento. O EXTRACT_LINKS existe para:

  1. Catalogação: Extrair todos os links de uma página para análise
  2. Validação: Verificar links quebrados ou externos
  3. Navegação: Criar mapa de links de um site
  4. Scraping: Descobrir URLs para processar recursivamente

Como funciona internamente?

Quando extractLinks está habilitado, o sistema:

  1. Busca tags <a>: Encontra todas as tags com atributo href
  2. Filtra URLs: Remove âncoras (#) e javascript:
  3. Remove duplicatas: Usa Set para garantir URLs únicas
  4. Retorna array: Lista limpa de URLs

Código interno (html-parser-executor.service.ts:411-423):

private extractLinks($: CheerioAPI): string[] {
  const links: string[] = [];

  $('a[href]').each((index, element) => {
    const href = $(element).attr('href');
    if (href && !href.startsWith('#') && !href.startsWith('javascript:')) {
      links.push(href);
    }
  });

  // Remove duplicates and return
  return [...new Set(links)];
}

Quando você DEVE usar este Node?

Use extractLinks sempre que precisar de listar todos os links de um HTML:

Casos de uso

  1. Sitemap generator: "Criar mapa de todos os links de um site"
  2. Link checker: "Validar links de uma página"
  3. Web crawler: "Descobrir páginas para processar"
  4. Análise SEO: "Verificar links externos vs internos"

Parâmetros

Campo Tipo Obrigatório Descrição
inputVariable string Sim Variável com HTML
parseMode string Sim Qualquer modo (text/markdown/structured/custom)
extractLinks boolean Sim Deve ser true
metadataVariable string Sim Variável para armazenar os links
outputVariable string Não Variável para conteúdo parseado

Exemplo: Web Crawler Simples

Objetivo: Extrair todos os links de uma página e processar cada um

JSON para Importar

{
  "name": "Web Crawler - Extração de Links",
  "nodes": [
    {
      "id": "start_1",
      "type": "start",
      "position": { "x": 100, "y": 100 },
      "data": { "label": "Início" }
    },
    {
      "id": "input_1",
      "type": "input",
      "position": { "x": 300, "y": 100 },
      "data": {
        "label": "URL Inicial",
        "parameters": {
          "message": "Digite a URL para crawlear:",
          "variableName": "url"
        }
      }
    },
    {
      "id": "scraper_1",
      "type": "web_scraper",
      "position": { "x": 500, "y": 100 },
      "data": {
        "label": "Buscar Página",
        "parameters": {
          "url": "{{url}}",
          "outputVariable": "html"
        }
      }
    },
    {
      "id": "parser_1",
      "type": "html_parser",
      "position": { "x": 700, "y": 100 },
      "data": {
        "label": "Extrair Links",
        "parameters": {
          "inputVariable": "html",
          "parseMode": "text",
          "extractLinks": true,
          "outputVariable": "texto",
          "metadataVariable": "meta"
        }
      }
    },
    {
      "id": "message_1",
      "type": "message",
      "position": { "x": 900, "y": 100 },
      "data": {
        "label": "Mostrar",
        "parameters": {
          "message": "🔗 Encontrados {{meta.links.length}} links:\n\n{{meta.links}}"
        }
      }
    },
    {
      "id": "end_1",
      "type": "end",
      "position": { "x": 1100, "y": 100 },
      "data": { "label": "Fim" }
    }
  ],
  "edges": [
    { "source": "start_1", "target": "input_1" },
    { "source": "input_1", "target": "scraper_1" },
    { "source": "scraper_1", "target": "parser_1" },
    { "source": "parser_1", "target": "message_1" },
    { "source": "message_1", "target": "end_1" }
  ]
}

Saída esperada:

Sistema: 🔗 Encontrados 15 links:

["https://example.com/page1", "https://example.com/page2", "/about", ...]

Resposta do Node

{
  "success": true,
  "data": {
    "parsed_content": "...",
    "metadata": {
      "links": ["url1", "url2", "url3"]
    }
  }
}

Boas Práticas

SIM: - Use com web_scraper para criar crawlers - Combine com LOOP para processar cada link - Filtre links relativos vs absolutos se necessário - Use para validação de links quebrados

NÃO: - Não processe muitos links sem rate limiting - Não confie que todos os links são válidos - Não esqueça de tratar URLs relativas

Dicas

💡 Dica 1: Links são retornados como encontrados (podem ser relativos ou absolutos)

💡 Dica 2: Âncoras (#) e javascript: são automaticamente filtrados

💡 Dica 3: Duplicatas são removidas automaticamente

Próximo Node

EXTRACT_IMAGES - Extrai todas as imagens do HTML → PARSE_CUSTOM - Extrai elementos específicos