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:
- Catalogação: Extrair todos os links de uma página para análise
- Validação: Verificar links quebrados ou externos
- Navegação: Criar mapa de links de um site
- Scraping: Descobrir URLs para processar recursivamente
Como funciona internamente?
Quando extractLinks está habilitado, o sistema:
- Busca tags
<a>: Encontra todas as tags com atributo href - Filtra URLs: Remove âncoras (#) e javascript:
- Remove duplicatas: Usa Set para garantir URLs únicas
- 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
- Sitemap generator: "Criar mapa de todos os links de um site"
- Link checker: "Validar links de uma página"
- Web crawler: "Descobrir páginas para processar"
- 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