Web Scraping com Python e BeautifulSoup ! (Informações do Covid-19)

Felipe Jardim Fiorentino
PowerOfData

--

Bibliotecas necessárias:

Requests- Biblioteca responsável por enviar requisições HTTP para os websites. ( pip install requests )

BeautifulSoup- Biblioteca Python muito útil e muito utilizada para extração de informações em documentos HTML e XML. ( pip install BeautifulSoup )

Pandas- Biblioteca Python muito útil para se trabalhar com dados , realizar análises e transformação ( útil para pequena quantidade de dados ).

Antes de começarmos a extrair os dados da Web, temos que salientar alguns pontos :

  • Quanto maior for nosso conhecimento sobre HTML, mais fácil será a extração.
  • BeautifulSoup não consegue extrair dados de sites responsivos, sites que contém comportamentos e funções Javascript.

#Let’s Scrap!

Primeiro, precisamos definir qual será nosso alvo,então hoje, iremos extrair os dados do website : https://www.worldometers.info/coronavirus/#countries

O alvo será essa tabela acima, que contém várias informações sobre o COVID-19, separadas por país.

Iremos Inspecionar o website a procura do código HTML correspondente a essa tabela:

Para inspecionar o website, podemos utilizar o botão F12 do teclado ( Google Chrome ) , ou até, clicar com o botão direito do mouse sobre o website e clicar em Inspecionar.

Podemos realizar interações nos objetos visuais do documento HTML , utilizando o botão ao lado esquerdo do botão Elements , sinalizado no exemplo acima.

Ao clicar sobre o ícone , e depois clicar sobre algum elemento visual, temos o código HTML daquele elemento como resultado da consulta.

Ao inspecionar o código-fonte correspondente a tabela, temos:

<table id=”main_table_countries_today”>

</table>

Isso é ótimo! Temos uma tabela com um ID ! ( Se você soubesse de HTML, não iria perguntar. ) Mas, e daí ?

E daí, que , como encontramos uma tabela com um atributo ID , significa que não encontraremos outra tabela com o mesmo ID, pois, assim como na tirinha, essa tabela é uma edição limitada. (Ba dun tss)

Mãos à obra!

Iremos utilizar a biblioteca Requests dentro do Jupyter para enviar requisições ao servidor https://www.worldometers.info/ e tentar receber as informações da tabela em questão.

O que fizemos nesse código acima, foi utilizar a biblioteca Requests para enviar uma requisição GET para o domínio worldometers.info, solicitando todo conteúdo HTML daquele website.

Agora, o BeautifulSoup entra em ação !

atribuimos ao objeto “soup”, todo conteúdo do documento HTML criado anteriormente ( a função .text , da biblioteca Requests, retorna todo conteúdo HTML do website, em um objeto do tipo string ).

Logo abaixo, utilizamos a função find , da biblioteca BeautifulSoup, procurando o conteúdo da tabela, pelo seu ID.

Elementos HTML de tag <table> , são mostradas como tabelas em um navegador, sua estrutura funciona assim :

<table id='teste'>
<tr>
<th>Coluna 1</th>
<th>Coluna 2</th>
<th>Coluna 3</th>
</tr>
<tr>
<td>Linha 1 coluna 1</td>
<td>Linha 1 coluna 2</td>
<td>Linha 1 coluna 3</td>
</tr>
<tr>
<td>Linha 2 coluna 1</td>
<td>Linha 2 coluna 2</td>
<td>Linha 2 coluna 3</td>
</tr>
</table>

Visualização do exemplo acima:

As TAGS <th> ‘table headers’ indicam os Headers , são as colunas da tabela.

As TAGS <tr> ‘table rows’ indicam as linhas .

As TAGS <td> ‘table data’ indicam os dados contidos nas linhas.

Mas como iremos extrair isso via Python ?

Assim:

Primeiro, criamos uma lista vazia ( usaremos para guardar os registros da tabela ).

Depois, com a ajuda da List Comprehension em Python, podemos percorrer pela tag <th> e guardar os valores das colunas da tabela.

Percorremos também cada linha da tabela <tr> e <td> e guardamos os dados na variável data.

Existem algumas maneiras de se trabalhar com tabelas, creio que essa seja uma maneira bem viável e funciona na maioria dos casos.

Usando o Pandas, conseguimos salvar todo o conteúdo das listas em um DataFrame.

em data[7:220] , pegamos somente os items que correspondem aos países dentro da tabela , visto que a lista trouxe algumas informações irrelevantes para nosso propósito.

Criamos também, uma coluna no DataFrame Pandas chamada data_processamento, contendo, em todas as linhas ,o dia atual nesse formato ‘20200729’, isso é muito útil no caso de pensarmos em um pipeline produtivo, essa variável sistêmica nos proporciona controle sobre os dados e com isso conseguimos construir históricos dos dados e também análises mais profundas com esse elemento fantástico chamado tempo.

Para finalizar, vamos salvar todo conteúdo do DataFrame em um arquivo .csv .

Nesse artigo, aprendemos a extrair os dados do COVID-19 do site https://www.worldometers.info , mais especificamente, extrair a tabela de informações de cada país, utilizando a linguagem Python juntamente com algumas bibliotecas ( BeautifulSoup, Requests, Pandas ).

Espero ter ajudado !

Criarei mais artigos relacionados a Web-Scraping com Python, as soon as possible!

--

--

Felipe Jardim Fiorentino
PowerOfData

Engenheiro de Dados /Big Data 💻| Música | Games | Dados