Package: bnmp-scraper
BNMP ScraperSumárioInstalaçãoComo obter cookieExemplo de usoCriando extratorRaspando MandadosLendo mandados com o PandasSobre o projetoMotivaçãoObjetivoComo nosso algoritmo funcionaPrincipais desafiosMelhores insightsInstalaçãoPara esse programa funcionar você precisa ter o Python instalado no seu computador. Baixe o Pythonaqui.Você pode instalar esse framework com o distribuidor de pacotes com pip, usando seguinte comando no seuterminal:$python-mpipinstallbnmp_scraperComo obter cookieComo o Portal BNMP requer que passemos por um captcha antes de acessar o site, para que esse programa funcione você precisa antes acessar o portal, passar pelo captcha e obter um cookie válido(e não expirado), seguindo as intruções abaixo:Acessehttps://portalbnmp.cnj.jus.br/#/pesquisa-pecae passe pelo captchaSelecione um estado aleatório na aba "Pesquisar peças"Entre no modo desenvolvedor do seu navegador(tecla F12) e vá até a aba Network do modo desenvolvedorCom a aba Network aberta e o estado selecionado (como fizemos nas etapas anteriores), clique em pesquisarUma requisição com nome começando com "filter?" deve aparecer na aba Network, clique nessa requisiçãoNa aba Cabeçalho(ou "Headers") da requisição, encontre a opção "Cabeçalho da requisição"(ou "Request Headers")Dentro do "Cabeçalho da requisição" procure por um valor chamado "cookie", clique com o botão direito e copie esse valorPronto, agora você pode usar esse cookie para instanciar nosso extrator como no exemplo de uso abaixo :).Exemplo de usoCriando extratorfrombnmp_scraperimportBnmpScraperextrator=BnmpScraper("seu-cookie-aqui")Raspando MandadosmandadosAcre=extrator.estado('AC')mandadosAcre.baixar_mandados()lista_mandados=mandadosAcre.dataLendo mandados com o Pandasimportpandasaspddf=pd.json_normalize(mandadosAcre.data)Sobre o projetoMotivaçãoFomos motivados a fazer um trabalho de raspagem de dados do portal BNMP (Banco Nacional de Mandados de Prisão) por conta de uma série de matérias jornalísticas ligando esse portal a vazamentos de dados.Na nossa análise, o siteparecesimter melhorado quanto a exposição dos seus dados, porém parece ter feito issorestringindo o acesso à informaçãoPor exemplo, apesar dos dados serem públicos, não é possível baixa-los completamente. O portal até disponibiliza uma opção para baixar os dados em CSV, mas o arquivo baixado tem um limite de 10.000 mandados (para estados com muitos mandados, isso é muito pouco) e mesmo os mandados baixados não trazem as informações completas.ObjetivoNosso programa navega diretamente na API do Portal BNMP para coletar os mandados em sua totalidade, disponibilizando-os em uma pasta de arquivos jsons para qualquer um que queira analisar-los.Como funcionaPrincipais desafiosO banco de dados do portal possui um limite para o número máximo de mandados retornadas por requisição (2000 mandados por requisição do tipo POST)O banco de dados do portal também limita o número máximo de páginas de mandados disponíveis para acesso por id (para requisições de 2000 mandados, o limite é de 5 páginas - o portal limita o acesso aos 10.000 primeiros mandados)Melhores insightsConseguimos acessar mais dados diminuindo a escala com que procuramos para que, consequentemente, haja menos mandados por id. Nós buscamos porestado -> município -> órgão expedidorConseguimos aumentar o limite de páginas de informações que podem ser alcançadas de 5 para 10 páginas alterando a ordenação dos elementos(fazendo requisições com a ordenação ascendente e pegando as primeiras 5 páginas e depois descendente pegando também as primeiras 5 páginas)Por fim, para órgãos expedidores com mais de 10 páginas de mandados nós desenvolvemos uma função que aproveita as mais diferentes formas de ordenação para, por força bruta, pegar o maior número de mandados possível daquele órgão.