Minha primeira experiência com Scraping

Cézar Antonio de Sousa
IO Publishing
Published in
5 min readJul 25, 2016

Vou começar este artigo fazendo uma pergunta simples: Qual Deputado Brasileiro possui menos Secretários de Gabinete atualmente?

Durante o início do ano, uma organização de desenvolvedores voluntários, da qual participo e que investiga informações políticas, teve a necessidade de responder essa pergunta.

Uma vez que estes dados não estão presentes no site da Câmara de forma agrupada, me encarreguei de realizar sua extração e agrupá-los.

Como nunca havia feito scraping de forma sistemática antes, aprendi muito neste processo e acredito que pode ser interessante falar um pouco sobre os desafios que encontrei para realizar tal tarefa.

Scraping

Basicamente, Web Scraping é uma técnica para extrair informações públicas em websites, que não estejam num formato otimizado para serem lidas por máquinas. Tendo conhecimento de como as páginas de um site estão organizadas, um desenvolvedor pode capturar esses dados de forma automatizada.

No meu caso, o alvo era esta página de onde seriam retiradas as informações a respeito dos parlamentares. Ao selecionar o nome do Deputado e clicar em Pesquisar, uma lista com os secretários de gabinete do parlamentar é entregue. Meu objetivo seria apenas automatizar este trabalho para todos os mais de 500 parlamentares que o nosso parlamento possui atualmente.

Página da extração

Primeiro desafio

Ao consultarmos um parlamentar qualquer no site da câmara, somos direcionados a uma página que utiliza um id como parâmetro em sua URL. Veja neste exemplo que o parlamentar Abel Salvador possui o id 178957.

Baseando-se nisso, a primeira coisa que nos vem a cabeça é que este valor de id vá ser utilizado em todos os combos e listagens que venham a aparecer pelo sistema certo?

Porém na figura abaixo é possível observar que ao analisarmos o código HTML da página utilizando as ferramentas de desenvolvimento do Google Chrome, verificamos que os valores são totalmente diferentes e a descrição do componente select aponta para um campo chamado “lotacao”

Se analisarmos ainda mais a fundo, vamos perceber que o parâmetro enviado ao formulário através do método POST é sim o valor de lotação do deputado.

Este problema me levou a ter que vasculhar o site da Câmara em busca de algum lugar onde os parlamentares estivessem listados com seus respectivos id’s e comparar com os nomes mostrados na página de secretários por parlamentar citada acima.

Segundo desafio

Apesar de nada satisfeito com essa decisão, (o que você faria?) comparei a listagem que possuía valores de lotação, com a listagem que continha os valores de id de cada parlamentar.

E é claro, o óbvio aconteceu. A descrição de alguns nomes não batia, uma vez que pelo visto, eram carregados de bases de dados diferentes e alguns tinham tinham características pontuais como apóstrofos ou abreviações (Dr.Jorge Silva, Chico D’Angelo….)

Uma vez que a quantidade de cadastros que possuíam alguma irregularidade não era grande (19 parlamentares), pude realizar o procedimento de vinculação dos registros “órfãos” manualmente, olhando nome por nome.

Terceiro Desafio

Aqui foi me apresentado o desafio técnico mais interessante. Alguns parlamentares tem uma grande quantidade de Secretários. O que por algumas vezes gera paginações.

Intuitivamente, uma situação dessas nos sugere a utilização de uma prática de programação chamada Recursividade.

Porém, aplicar recursividade com elegância no nodejs (ambiente de programação que eu escolhi pra realizar o scraping) não é uma tarefa das mais fáceis.

Encontrei soluções utilizando Promises, temporizadores de 200ms e até Expressões Lambda. Mas após obter resultados ruins com todas, optei por uma solução caseira mesmo, não muito elegante, porém eficiente: Fazer o script “chamar a si mesmo”.

Uma vez que o nodejs é um servidor Web, ele pode chamar a si mesmo passando algum valor como parâmetro. Desta forma, o problema da paginação foi resolvido.

Conclusão

Abaixo seguem algumas conclusões a respeito da minha primeira experiência realizando scraping:

1 — É muito enriquecedor explorar as ferramentas da Aba “desenvolvedor” do Navegador Chrome. Quase todas as informações que consegui neste artigo, ficaram bem mais fáceis com a utilização deste recurso.

2 —Em determinados casos, mesmo não tendo muito orgulho de dizer isso, vi que temos que recorrer a algumas gambiarras para transformar informação em dados. Neste caso em especial, não tinha acesso aos desenvolvedores do site e alguns dados não estavam estruturados de forma clara. Então não haviam muitas opções.

3 — Com a facilidade que eu (que não tenho um profundo conhecimento de Segurança da Informação) tive para cadastrar um boletim eletrônico de acompanhamento para um deputado que não existe (Frank Underwood da série House of Cards), fico pensando se esta estrutura confusa dos dados do site não contribuem para o torná-lo um tanto inseguro.

Caso queira ver o resultado do Scraping, ele está carregado neste link. E se quiser ver o código fonte que usei, ele se encontra aqui.

Quer colaborar conosco? Você pode fazer isso enviando artigos, ou assinando nossa newsletter para receber novidades toda a semana. Se quiser, também pode nos seguir no Facebook, Twitter e Linkedin.

--

--