import juscraper as jus
import json
= jus.scraper("jusbr") jusbr
Baixando dados e documentos com o Jus.br
Este notebook demonstra como autenticar e obter um token de acesso para o portal JUSBR usando a classe JUSBR_Scraper
.
Autenticação manual via gov.br
- Acesse https://www.jus.br
- Faça login usando o gov.br
- Entre na página https://portaldeservicos.pdpj.jus.br/consulta (ou clique no botão ‘Consultar processo’, que aparece após o login)
- Na nova página, abra a aba Network do navegador (F12 ou ‘Inspecionar elemento’)
- Atualize a página (F5 ou ctrl+R ou no botão atualizar)
- Nas requisições que vão aparecer, procure a requisição que tem nome ‘token’. Clique nela.
- Na tela ao lado, clique em ‘Resposta’.
- Selecione e copie o campo ‘access_token’ que aparece lá.
import os
from dotenv import load_dotenv
from getpass import getpass
load_dotenv()
= os.environ.get("JUSBR_ACCESS_TOKEN")
access_token if access_token is None:
# input como senha oculta
= getpass("Digite o token JWT: ") access_token
=access_token) jusbr.auth(token
True
Baixando metadados dos processos
Baixando uma lista de casos:
= ['3005317-12.2025.8.06.0000']
processos
= jusbr.cpopg(processos)
resultados
resultados
processo | numeroProcesso | idCodexTribunal | detalhes | |
---|---|---|---|---|
0 | 30053171220258060000 | 3005317-12.2025.8.06.0000 | None | {'nivelSigilo': 0, 'siglaTribunal': 'TJCE', 'n... |
= resultados['detalhes'].iloc[0]
result_list
print(json.dumps(result_list['tramitacaoAtual']['grau'], indent=2, ensure_ascii=False))
{
"sigla": "G2",
"nome": "2° Grau",
"numero": 2
}
Se quiser visualizar o texto do caso:
Baixando autos dos processos
= jusbr.download_documents(resultados)
df_docs
print(df_docs.shape)
3) df_docs.head(
(1, 18)
numero_processo | idCodex | sequencia | nome | tipo | dataHoraJuntada | nivelSigilo | hrefTexto | hrefBinario | texto | _raw_text_api | _raw_binary_api | arquivo | idOrigem | idDocumento | descricao | tipoDocumento | dataJuntada | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3005317-12.2025.8.06.0000 | 25491324303 | 4 | Decisão.html | {'codigo': 404, 'nome': 'Decisão', 'idCodex': ... | 2025-05-29T18:02:53.803 | PUBLICO | /processos/3005317-12.2025.8.06.0000/documento... | /processos/3005317-12.2025.8.06.0000/documento... | ESTADO DO CEARÁ\n \n PODER JUDICIÁRIO\n \n T... | \nESTADO DO CEARÁ\n \n PODER JUDICIÁRIO\n \n ... | b'<p><span style="font-family: arial, helvetic... | {'tipo': 'text/html', 'quantidadePaginas': 0, ... | 21009045 | None | None | None | None |
3) df_docs.head(
numero_processo | idCodex | sequencia | nome | tipo | dataHoraJuntada | nivelSigilo | hrefTexto | hrefBinario | texto | _raw_text_api | _raw_binary_api | arquivo | idOrigem | idDocumento | descricao | tipoDocumento | dataJuntada | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3005317-12.2025.8.06.0000 | 25491324303 | 4 | Decisão.html | {'codigo': 404, 'nome': 'Decisão', 'idCodex': ... | 2025-05-29T18:02:53.803 | PUBLICO | /processos/3005317-12.2025.8.06.0000/documento... | /processos/3005317-12.2025.8.06.0000/documento... | ESTADO DO CEARÁ\n \n PODER JUDICIÁRIO\n \n T... | \nESTADO DO CEARÁ\n \n PODER JUDICIÁRIO\n \n ... | b'<p><span style="font-family: arial, helvetic... | {'tipo': 'text/html', 'quantidadePaginas': 0, ... | 21009045 | None | None | None | None |
print(df_docs['texto'][0][:200])
TRIBUNAL DE JUSTIÇA DO ESTADO DE SÃO PAULO
COMARCA de São Vicente
Foro de São Vicente
1ª Vara Criminal
Rua Jacob Emmerich, 1367, Sala 13, Parque Bitarú - CEP 11310-906, Fone: (13) 2102-6454, São Vicen
Baixando uma lista grande de processos
Se a lista de processos é muito grande, pode ser uma boa prática baixar um processo por vez e salvar os resultados em um arquivo parquet, por exemplo.
No script abaixo, criamos uma pasta dentro da pasta atual, chamada jusbr/cpopg/. Ali dentro, para cada processo, criamos uma pasta com o número do processo e salvamos 2 arquivos: 1 com os metadados daquele processo e 1 com os textos dos documentos. A chave para juntar as duas bases é o número do processo.
import os
import pandas as pd
from tqdm import tqdm
from joblib import Parallel, delayed
= ['15006452620228260536']
processos
= jusbr.cpopg(processos) resultados
def download_document(proc_no, jusbr, verbose=True):
if verbose:
print(f"Baixando documentos do processo {proc_no}\n")
= jusbr.cpopg([proc_no])
resultado = resultado.iloc[0]
row = row['processo']
processo = pd.DataFrame([row])
row_df # cria a pasta
= os.path.join('jusbr/cpopg', processo)
process_path =True)
os.makedirs(process_path, exist_ok
# baixa documentos do processo
if verbose:
print(f"Baixando autos do processo {proc_no}\n")
= jusbr.download_documents(row_df)
df_docs #df_docs = pd.DataFrame()
# salva documentos
'documents.parquet'), index=False)
df_docs.to_parquet(os.path.join(process_path, # salva metadata
'metadata.parquet'), index=False)
row_df.to_parquet(os.path.join(process_path,
for proc_no in processos:
download_document(proc_no, jusbr)
Baixando documentos do processo 15006452620228260536
Baixando autos do processo 15006452620228260536