Pular para o conteúdo

apps/api/html-scraping

122 · API & Integração · ≈ 5 min de estudo

HTML Scraping

Extração de dados de uma página HTML quando a origem não oferece API. O HTML vira o contrato — e muda sem aviso —, então o extrator ancora em data-testid, converte cada valor com parser estrito e só entrega o resultado depois de uma validação de borda que recusa página quebrada em vez de gravar dado errado. Use como integração de último recurso, quando não há API, Open Finance ou arquivo CNAB/OFX.

passos
5
arquivos
2
testes
0
tecnologias
4
Lógica puraTypeScriptBunElysiascrape-it
Baixar cartão

Cenário

O banco digital precisa do extrato de uma conta mantida num internet banking legado que só exibe HTML. O portal já foi redesenhado sem aviso: um redesenho de CSS não pode quebrar a integração, e uma reconstrução que remova os pontos de ancoragem tem de parar a extração com alerta — nunca gravar saldo zero ou lançamento sem valor.

Planta

Fluxo
6/6
Internet banking legadoso HTMLfetch educadoUser-Agent, timeout,intervalo minimoscrapeHTMLseletores data-testidconversao estritaR$ para centavos,DD/MM/AAAA para ISOvalidacao de bordaExtrato para o dominioErrorScrapeLayoutnada entregueGET /extratookvazio, NaNou sem itens
6

6 passos — reproduza para seguir o fluxo

Como funciona

5 passos

Extrai dados do HTML quando não há API.

Esconde cada passo: lembre antes de tocar para revelar.

  1. 01

    fetcherPoliteCreate busca a página com User-Agent identificado, timeout e intervalo mínimo entre requisições, para não sobrecarregar a origem

  2. 02

    statementScrape aplica o schema do scrape-it sobre a string: seletores [data-testid], attr: "href" para o id do lançamento, convert para valor e data

  3. 03

    amountBrToCents aceita só o formato brasileiro exato (R$ 12.345,67 → 1234567) e devolve NaN para o resto — nunca 0, porque Number("") é zero

  4. 04

    statementProblems trata string vazia, lista vazia e NaN como layout quebrado; qualquer problema lança ErrorScrapeLayout com a lista

  5. 05

    Redesenho de CSS (classes renomeadas) passa intacto; página sem data-testid é recusada inteira

Trade-offs

O que se ganha, o que se paga

4 vantagenscada ganho tem um preço4 custos

Vantagens

  • Integra origem que não tem API

  • Âncora em data-testid sobrevive a redesenho visual

  • Validação de borda impede gravar dado errado

  • Parser puro testável sobre HTML salvo

Custos

  • O HTML muda sem versão nem aviso

  • Depende de a origem manter esses atributos

  • Uma linha inválida recusa o extrato inteiro

  • HTML salvo envelhece: validar também em produção

apps/api/html-scraping

2 arquivos

src/

  • scraper_statement.tsSchema de seletores, conversões, validação de borda e fetch educado
  • portal_legacy.tsO portal legado com três layouts: original, redesenho de CSS e reconstrução sem âncoras

Executar · só Bun

  1. bun install# dependências
  2. bun run demo# roda o cenário
  3. bun run test# testes unitários
Requisitos
Bun

Por que se relacionam

Teste rápido

Qual destes combina com HTML Scraping?

Próximo projeto · API & IntegraçãoMCP Server
Esc

↑ ↓ navegarEnter abrir191 resultados