Web Scraping: aquisição de dados em páginas web com Python

K. Delphino
Data Hackers
Published in
4 min readJan 31, 2020
Photo by Nicolas Picard on Unsplash

No mundo ideal, todos os dados estariam disponíveis a qualquer momento, no melhor formato possível, sem erros ou omissões. No mundo real, a qualidade dos dados é muito variada e boa parte do tempo do analista de dados é despendido na aquisição e tratamento dos dados.

Sobre a aquisição de dados, uma dificuldade frequentemente encontrada é que eles não estão disponíveis em um formato diretamente consumível por um programa de computador para tarefas de análise. É muito comum que os dados que se quer analisar estejam em formatos originalmente pensados apenas para um usuário humano visualizá-los, como uma página web ou um documento do Word, sem terem sido criadas Application User Interfaces (APIs) para que outros programas pudessem tratar aquela informação de forma automática.

Mas, se os dados estão disponíveis para usuários humanos através de algum aplicativo, seria possível criar um programa que simulasse o acesso de um usuário e coletasse “à força” aqueles dados?

Data scraping* (raspagem de dados) é o conjunto de técnicas de criação de códigos para coletar dados disponíveis em um formato pensado apenas no usuário final do sistema.

*Não confundir scraping (do verbo “to scrape”, pronuncia-se “iscreipin”) com scrapping (do verbo “to scrap”, pronuncia-se “iscrépin”)

Web scraping é o data scraping feito em páginas web. No Python, as bibliotecas BeautifulSoup e Requests são bastante utilizadas para web scraping.

BeautifulSoup

A biblioteca BeautifulSoup facilita o acesso e a coleta de dados em arquivos HTML.

Requests

A biblioteca Requests permite emitir requisições HTTP.

No exemplo acima, uma requisição foi feita para a página https://www.contabeis.com.br/tabelas/ufesp/. Essa página tem uma relação anual dos valores da Unidade Fiscal do Estado de São Paulo (UFESP), uma unidade utilizada pelo governo daquele estado para atualizar determinadas quantias monetárias. Uma vez que a requisição foi bem sucedida, temos acesso ao conteúdo do arquivo HTML retornado pela requisição. Podemos, então, utilizar o BeautifulSoup para recuperar o valor da UFESP de 2019.

Páginas dinâmicas

Muitos sites utilizam JavaScript para modificar o código HTML da página após ela ter sido renderizada pelo navegador. Porém, a biblioteca Requests não executa JavaScript. Isso significa que, mesmo que os dados apareçam em uma página acessada de um navegador, é possível que esses mesmos dados não estejam disponíveis no arquivo HTML retornado por um request.

Por exemplo, a Secretaria da Fazenda do Estado de São Paulo também possui uma página com os valores das UFESP no endereço https://portal.fazenda.sp.gov.br/Paginas/indices.aspx. Porém, ao fazer uma solicitação dessa página pelo Requests, não é possível encontra no HTML os valores ou mesmo o termo “UFESP”.

Isso ocorre porque, ao contrário do que ocorre no site Contábeis, o site da secretaria carrega esses valores de forma dinâmica por meio de chamadas JavaScript.

Uma alternativa para coletar os dados em páginas dinâmicas é utilizar as ferramentas de desenvolvedor presentes nos navegadores para analisar o funcionamento da página e identificar de onde vem a informação desejada.

Ao fazer essa análise no site da secretaria, é possível identificar uma chamada para o endereço https://portal.fazenda.sp.gov.br/_api/Web/Lists/getByTitle('Indices')/items?$Select=Title,Valor. Esse endereço retorna um arquivo XML com os valores das UFESP. Como arquivos XML também podem ser processados pelo BeautifulSoup, temos então uma solução para resgatar o valor da UFESP de 2019 do site oficial da Secretaria da Fazenda.

Selenium

O Selenium é uma biblioteca que permite a execução automática de comandos em um navegador. Originalmente criado para automatização de testes em páginas web, ele pode ser utilizado para realização de web scraping quando não for possível analisar o funcionamento de uma página dinâmica.

Para utilizar o Selenium é necessário, além de ter a biblioteca devidamente instalada em seu ambiente de desenvolvimento, baixar um WebDriver. O WebDriver é o programa que intermedia a comunicação entre um script e um navegador. Cada navegador possui seu próprio WebDriver e é geralmente disponibilizado pelos próprios desenvolvedores dos navegadores. No caso do Chrome, o WebDriver pode ser baixado em https://chromedriver.chromium.org/.

Retomando nosso exemplo, para recuperar o valor da UFESP de 2019 por meio do Selenium e do Chrome, devemos executar o seguinte código:

Ao ser executado, esse trecho abrirá uma nova janela do navegador. É essa janela que receberá os comandos programados pelo restante do script. Podemos então programar a requisição da página que contém a informação que buscamos e, através do código HTML resultante, acessar os dados. No caso da página de UFESP da secretaria, os valores estarão no código HTML pois o navegador se encarrega de executar as chamadas JavaScript que carregam aqueles dados.

Apesar de ser uma forma conveniente de realizar o web scraping, pois basta seguir os passos em um usuário no navegador para acessar a informação, o uso do Selenium tem algumas desvantagens em relação a análise da página dinâmica para coleta de dados:

  • Qualquer mudança na página pode impactar o script
  • É necessário se preocupar com as versões do navegador e do webdriver
  • Os scripts que utilizam Selenium serão mais lentos pois dependem do carregamento da página em um navegador

--

--