Web scraper automático para consultar dados de escolas do site da Secretaria de Educação do Estado da Bahia (SEC-BA).
- ✅ Leitura automática de dados de escolas do arquivo
DadosUnidades.json - ✅ Consulta do site SEC-BA para cada escola
- ✅ Extração de informações: código, nome, município, NTE, tipo de polo e situação
- ✅ Retry automático em caso de falhas
- ✅ Fallback de HTTP para HTTPS
- ✅ Salva resultados em JSON com timestamp
- ✅ Log detalhado do processo
npm installDependências:
jsdom- Para parsing de HTML
npm run scrapenpm run scrape:devForam adicionados endpoints serverless para consulta de matriculas de professores/servidores usando o arquivo data/ServidoresSecBA.jsonl.
GET /api/healthGET /api/matriculasPOST /api/matriculas
Buscar por matricula exata:
/api/matriculas?matricula=92179811Buscar por nome (parcial):
/api/matriculas?nome=alex+sandroSomente professores em atividade:
/api/matriculas?somente_professores=true&situacao=em+atividade&page=1&limit=20Filtros disponiveis:
matricula(exata)nome(parcial)cargo(parcial)situacao(parcial)escola(parcial)somente_professores(true/false)page(padrao1)limit(padrao20, max100)
Body JSON:
{
"matriculas": ["92179811", "111703573"]
}- Suba o projeto para um repositorio Git.
- Importe no Vercel.
- O Vercel detecta automaticamente a pasta
api/. - Apos deploy, teste:
https://SEU-DOMINIO.vercel.app/api/health
https://SEU-DOMINIO.vercel.app/api/matriculas?matricula=92179811const ScraperSecBA = require('./scraper_sec.js');
const scraper = new ScraperSecBA({
delay: 500, // Delay entre requisições (ms)
protocolo: 'http', // 'http' ou 'https'
timeout: 15000, // Timeout por requisição (ms)
maxTentativas: 3 // Máximo de tentativas por requisição
});
// Buscar uma escola específica
const resultado = await scraper.buscarEscola('COLEGIO ESTADUAL SAO SEBASTIAO');
console.log(resultado);
// Processar todas as escolas
await scraper.processarTodasEscolas('DadosUnidades.json', 'ResultadosSEC.json');DadosUnidades.json- Entrada com lista de escolas (formato:{ ept: [...] })ResultadosSEC.json- Saída com resultados de buscascraper_sec.js- Código principal do scraperpackage.json- Configuração e dependências do projeto
{
"timestamp": "2026-05-12T10:30:00.000Z",
"total_processadas": 576,
"total_encontradas": 450,
"total_erros": 126,
"escolas": [
{
"status": "sucesso",
"nome": "COLEGIO ESTADUAL SAO SEBASTIAO",
"cod_inep": "29057809",
"cod_sec": "1125747",
"tipo_unidade": "SEDE",
"escolas": [
{
"codigo": "29057809",
"nome_site": "COLEGIO ESTADUAL SAO SEBASTIAO",
"municipio": "IRECÊ",
"nte": "NTE-03",
"polo": "SEDE do POLO",
"situacao": "ATIVA",
"link": "..."
}
]
}
]
}Se seu sistema usar proxy corporativo, configure as variáveis de ambiente:
set HTTP_PROXY=http://proxy.seu-dominio.com:8080
set HTTPS_PROXY=http://proxy.seu-dominio.com:8080
npm run scrapenode --max-old-space-size=4096 scraper_sec.jsPara integrar com uma rota Next.js:
// pages/api/scrape-sec.js
import ScraperSecBA from '@/lib/scraper_sec';
export default async function handler(req, res) {
const scraper = new ScraperSecBA({ delay: 500 });
if (req.method === 'POST') {
const { nomeEscola } = req.body;
try {
const resultado = await scraper.buscarEscola(nomeEscola);
res.status(200).json(resultado);
} catch (erro) {
res.status(500).json({ erro: erro.message });
}
} else {
res.status(405).json({ erro: 'Método não permitido' });
}
}- O site pode estar fora do ar ou inacessível
- Verifique sua conexão com a internet
- Tente acessar manualmente: http://www.sec.ba.gov.br/siig/sistemaescolar/asp/pesquisaEscola/pesquisaescola.asp
- O servidor está lento
- Aumente o timeout na configuração:
new ScraperSecBA({ timeout: 30000 }) - Aumente o delay entre requisições:
new ScraperSecBA({ delay: 2000 })
- Verifique se o nome no JSON está correto
- O site pode ter formatação diferente para o nome
- Tente buscar manualmente no site
- Tempo estimado: ~5 minutos para 576 escolas (com delay de 500ms)
- Sem delay entre requisições: ~2-3 minutos (não recomendado)
- O script respeitará o delay para não sobrecarregar o servidor SEC-BA
- Este scraper respeita um delay entre requisições para não sobrecarregar o servidor
- Os dados são consultados em tempo real do site SEC-BA
- Resultados são salvos com timestamp para rastreabilidade
- O script é idempotente: pode ser executado múltiplas vezes com segurança
Para melhorias ou correções, considere:
- Adicionar suporte para extrair mais campos das escolas
- Implementar cache para evitar requisições duplicadas
- Adicionar validação de dados de entrada
MIT
Desenvolvido para SEC Matricula - Consultas em tempo real da Secretaria de Educação da Bahia