Linha de comandos
A referência completa de node src/cli.mjs - todas as opções com o seu valor por predefinição, saídas (NDJSON, CSV, relatório HTML), comparação, segmentos, retoma, sitemap e extração.
Utilização
node src/cli.mjs <url> [options]
node src/cli.mjs --list urls.txt [options]
A CLI mostra a pontuação e os problemas no seu idioma, grava o rastreio em NDJSON gzip (que a interface abre com Importar ou a partir do histórico), e com --csv exporta pages.csv e issues.csv, com --report escreve um relatório de auditoria HTML com a sua marca, que pode imprimir em PDF. JSON, CSV e relatório são escritos cada um em fluxo e de forma independente: uma falha não bloqueia os outros, e o código de saída é 1 se algum falhou.
Exemplos
node src/cli.mjs https://www.example.com --max 2000 --csv --report --lang pt
node src/cli.mjs https://www.example.com --render --ua googlebotMobile --report --client "ACME" --author "Your name"
node src/cli.mjs --list urls.txt --lang de --csv
node src/cli.mjs --sitemap https://www.example.com/sitemap.xml --extract "price=.price" --extract "sku=xpath://meta[@itemprop='sku']/@content" --csv
node src/cli.mjs https://www.example.com --report --compare crawls/previous.jsonl.gz
node src/cli.mjs --resume crawls/.en-cours/www.example.com_2026-10-21T09-00-00.ndjson --csv
node src/cli.mjs https://www.example.com --max 20000 --segments segments.json --csv --report
node src/cli.mjs https://www.example.com --ga4-key ga4-key.json --ga4-property 123456789 --csv
node src/cli.mjs https://staging.example.com --auth user:pass --rate 2 --robots report --path-limit "/blog/=200" --extract "price=.price" --remove-params "utm_*,gclid"
node src/cli.mjs --help
Opções
Gerado a partir de node src/cli.mjs --help no repositório (3.21.0); os valores por predefinição vêm do código.
| Opção | Descrição | Por predefinição |
|---|---|---|
--max N | Número máximo de URLs | 500 |
--depth N | Profundidade máxima | 20 |
--concurrency N | Pedidos simultâneos | 5 |
--delay MS | Pausa entre dois pedidos por worker, em ms | 0 |
--ua NAME | User-agent: arachnide | googlebot | googlebotMobile | chrome | arachnide |
--render | Renderização JavaScript com o Chrome / Edge (navegador instalado) | |
--list FILE | Modo lista: rastrear apenas os URLs de um ficheiro de texto (um por linha) | |
--external | Verificar os links externos | |
--images | Verificar o peso e o estado das imagens | |
--rate N | URLs por segundo no máximo (limite global) | |
--robots MODE | respect | report (ignorar mas assinalar) | ignore | respect |
--custom-robots F | Usar este ficheiro robots.txt em vez do ficheiro do site | |
--per-depth N | URLs no máximo por nível de profundidade | |
--folder-depth N | Profundidade máxima de pastas | |
--max-params N | Número máximo de parâmetros de URL | |
--max-redirects N | Redirecionamentos seguidos no máximo | 10 |
--path-limit P=N | Limite por caminho de URL, ex. "/blog/=200" (repetível) | |
--remove-params L | Remover parâmetros de URL, ex. "utm_*,gclid" | |
--auth USER:PASS | Autenticação HTTP (sites de pré-produção) | |
--header "K: V" | Cabeçalho HTTP personalizado (repetível) | |
--extract N=SEL | Extração personalizada (repetível): N=SEL (CSS, texto), N=/regex/, N=xpath:EXPR, N=attr:href:SEL, N=html:SEL, N=count:SEL; uma coluna por regra em pages.csv | |
--sitemap URL | Modo lista a partir de um sitemap ou de um índice de sitemaps: rastrear exatamente os URLs listados | |
--keep-params | Manter os parâmetros de URL tal como estão (por predefinição: ordenados, parâmetros de acompanhamento utm_*/gclid/fbclid… removidos) | |
--robots-unavailable allow|disallow | robots.txt em 5xx ou inacessível: proibir tudo (RFC 9309, por predefinição) ou permitir tudo | disallow |
--psi N | PageSpeed Insights + Core Web Vitals (CrUX) para as N páginas mais importantes | |
--psi-key KEY | Chave de API Google (ou variável ARACHNIDE_PSI_KEY) · --psi-strategy mobile|desktop | |
--gsc-key FILE | Search Console: ficheiro de chave JSON da conta de serviço | |
--gsc-property P | Propriedade Search Console (sc-domain:example.com), detetada automaticamente se omitida | |
--gsc-days N | Período Search Console em dias | 90 |
--gsc-csv FILE | Importar uma exportação CSV «Páginas» do Search Console em vez da API | |
--ga4-key FILE | Google Analytics 4: ficheiro de chave JSON da conta de serviço (a do Search Console funciona se tiver acesso) | |
--ga4-property ID | ID de propriedade GA4 (123456789), detetado a partir do domínio se omitido | |
--ga4-days N | Período GA4 em dias | 90 |
--ga4-csv FILE | Importar uma exportação CSV GA4 «Páginas e ecrãs» (ou «Página de destino») em vez da API | |
--alert-email A,B | Enviar um alerta por e-mail se o rastreio piorou em relação ao anterior (para cron) | |
--alert-score-drop N | Limiar de alerta em pontos de pontuação | 5 |
--ignore-robots | Ignorar o robots.txt (equivale a --robots ignore) | |
--subdomains | Rastrear também os subdomínios | |
--no-sitemap | Não ler os sitemaps XML | |
--include REGEX | Rastrear apenas os URLs que correspondem à regex (repetível: uma regex por opção) | |
--exclude REGEX | Ignorar os URLs que correspondem à regex (repetível) | |
--stay-in-folder | Não sair da pasta do URL inicial (https://x.com/blog/ → apenas /blog/…) | |
--search TEXT | Pesquisa personalizada no código-fonte (/regex/ aceite) | |
--segments FILE | Segmentos (JSON exportado da aplicação, ou [{ "name", "match", "rules": [{ "field", "op", "value" }] }]): pontuação, erros e médias por secção, coluna segmento no CSV, secção no relatório | |
--segment-folders | Um segmento por diretório de primeiro nível (automático) | |
--segment ID | Relatório e CSV apenas sobre este segmento (ex. --segment blog) | |
--lang CODE | en | fr | de | es | it | pt (etiquetas, CSV, relatório) | |
--csv | Exportar também pages.csv e issues.csv | |
--report | Gerar também um relatório de auditoria HTML profissional (para imprimir em PDF) · --report-title, --client, --author, --company, --contact, --website, --color "#5b8c1e" | |
--compare FILE | Rastreio anterior para mostrar a evolução no relatório | |
--out DIR | Pasta de saída | ./crawls |
--resume FILE | Retomar um rastreio interrompido a partir do seu diário (<out>/.en-cours/*.ndjson) | |
--no-journal | Não escrever o diário de retoma durante o rastreio |
Regras de extração
--extract NOME=REGRA, repetível, uma coluna por regra em pages.csv:
| Regra | Significado |
|---|---|
price=.price | Seletor CSS, conteúdo de texto |
author=attr:content:meta[name=author] | Seletor CSS, valor de um atributo |
menu=html:nav.main | Seletor CSS, HTML interno |
links=count:a[href] | Seletor CSS, número de correspondências |
sku=xpath://meta[@itemprop='sku']/@content | XPath (Chrome em modo de renderização, jsdom caso contrário) |
phone=/\+34 \d{3} \d{3} \d{3}/ | Expressão regular (tempo limite de 2 segundos por página) |
Saídas
Os ficheiros são escritos em --out (por predefinição ./crawls), com o nome <anfitrião>_<data>:
<anfitrião>_<data>.jsonl.gz: o rastreio completo (NDJSON, um objeto JSON por linha, gzip);<anfitrião>_<data>_pages.csve_issues.csvcom--csv(separados por ponto e vírgula, UTF-8 com BOM, uma coluna por extração, uma coluna Segmento quando há segmentos definidos);<anfitrião>_<data>_report_<idioma>.htmlcom--report;crawls/.en-cours/<anfitrião>_<data>.ndjson: o diário de retoma enquanto um rastreio corre (conservado após Ctrl+C, eliminado no fim).
Prima Ctrl+C para parar um rastreio de forma limpa; a CLI mostra então o comando --resume para o retomar mais tarde.
Cron e alertas
--alert-email you@example.com --alert-score-drop 5 compara o rastreio com o rastreio anterior do mesmo anfitrião na pasta de saída e envia-lhe um e-mail apenas quando algo piorou (definições SMTP da aplicação, ou ARACHNIDE_SMTP_URL). Consulte Dados Google, rastreios agendados e alertas.
Outros comandos
| Comando | Função |
|---|---|
npm start | A interface web em http://localhost:4000 (PORT e HOST para mudar; ARACHNIDE_NO_SCHEDULER=1 desativa os rastreios agendados) |
npm run mcp | O servidor MCP por stdio (também arachnide-mcp como bin) |
npm run scheduler | Os rastreios agendados sem a interface |
npm run bench -- --pages 200000 | O benchmark do site sintético |
npm test | A suite de testes (Node 18, 20 e 22) |