Realizando Web Scraping em ambientes que necessitam de autenticação.

Olá, pessoal. Tudo em bem? Espero que sim.

Eu sempre compartilhei as minhas experiências em diversos ambientes (blog, postagem em redes sociais etc.), mas agora decidi centralizar todas as coisas em um único ambiente. Avaliando tudo, eu decidi por utilizar esse aqui e este aqui é o meu primeiro post. Sem mais delongas, vamos ao que interessa.

Essa semana, eu recebi uma demanda bastante interessante e que, aparentemente, me parecia fácil de resolver. Realizar uma ação de Web Scraping e recuperar um conjunto de dados de um ambiente de versões passadas do mesmo projeto do qual gerencio. Para quem ainda não ouviu falar em Web Scraping…

Web scraping é uma técnica de extração de dados utilizada para coletar dados de sites. (Fonte Westcon)

Até aqui, tudo bem… a questão é que os dados (páginas) estão em uma área restrita e que só com senha seria possível o acesso. Ok… ok… vamos utilizar algum mecanismo que realize a autenticação e que permita capturar os dados. É… o mundo não é tão simples assim. O ambiente em questão é o twiki.

O Twiki é uma ferramenta de escrita colaborativa na web, ou seja, um wiki, que consiste em possibilitar várias pessoas, separadas geograficamente, de interagir criando conteúdo utilizando apenas um navegador. (Fonte Wikipédia)

Além da questão da autenticação, as páginas não são armazenadas em um diretório. Então, tecnicamente, eu só teria acesso ao conteúdo das páginas se, e somente se, eu tivesse acesso à URL de cada página do projeto e, é claro, se eu estivesse autenticado no sistema. Tudo bem. Vamos lá.

Então eu pensei que, para capturar as URL das páginas, eu só preciso “varrer”o conteúdo de cada página e capturar os links existentes (âncoras) nelas. Perfeito! No entanto, se eu não tiver cuidado, vou baixar todo o conteúdo da Internet!

Entenda o processo: Já que o processo é recursivo e, para cada página, eu devo capturar todos os links existentes nela, se as páginas no ambiente tiverem links para portais tais como o UOL etc. entraria em uma captura infinita de dados (cada portal “linka” com outros portais etc.). Cada novo link me disponibilizaria uma nova página e, com ela, mais um conjunto de links e assim por diante.

Você pode até dizer: cara, você não precisava fazer isso. Você poderia acessar as páginas e capturar as informações sem precisar de um programinha. Você poderia utilizar algum aplicativo específico… pois é. Se estivéssemos falando de 5 ao 10 páginas. Mas estamos falando de mais de 500 páginas! Ah… já ia me esquecendo. Não bastava capturar o texto. Eu também teria que salvar a própria página em si, com a mesma formatação da página no ambiente.

Então, para resolver esses e outros problemas (regras?) que foram surgindo ao longo do desenvolvimento da solução, eu desenvolvi um “pequeno script em Python” e o disponibilizei em meu GitHub. Todo o código está comentado, inclusive digo o por quê de fazer cada coisa no próprio script.

Como não achei nada parecido na Web — pode até ter, sei lá… não fiz uma revisão sistemática sobre, eu resolvi compartilhar o que fiz e, quem sabe, ajudar a alguém na comunidade que está “sofrendo” com algo do mesmo tipo de problema.

Para ter acesso ao script, acesse aqui.

Obs: Tenham cuidado com o que você irá fazer com essas informações. Entenda que eu tenho permissão para fazer isso, visto que os dados são do projeto que eu gerencio.

Senior Computer Vision Data Scientist at Conception Ro-Main (Quebec — CA). DSc in Computer Science. MTAC Brazil. https://github.com/adrianosantospb

Senior Computer Vision Data Scientist at Conception Ro-Main (Quebec — CA). DSc in Computer Science. MTAC Brazil. https://github.com/adrianosantospb