Web Scraping com Python e BeautifulSoup ! (Informações do Covid-19)
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!