Um guia para iniciantes para aprender Web Scraping e visualização de dados com Python

Guias, Python, Scraping, Dez-19-20215 minutos de leitura

Como você pode extrair informações importantes de sites de forma rápida e eficiente? A extração manual dos dados leva muito tempo. Você pode usar a Web scraping, um método automatizado de aquisição de dados não tabulares ou mal estruturados de sites. Posteriormente, você pode converter esses dados em um formato estruturado e utilizável, como uma planilha

Índice

Como você pode extrair informações importantes de sites de forma rápida e eficiente? A extração manual dos dados leva muito tempo. Você pode usar a Web scraping, um método automatizado de aquisição de dados não tabulares ou mal estruturados de sites. Posteriormente, você pode converter esses dados em um formato estruturado e utilizável, como uma planilha ou um arquivo .csv.

O site scraping permite arquivar dados e rastrear alterações de dados on-line. As empresas o utilizam amplamente para diferentes finalidades. Por exemplo, as lojas on-line o utilizam para scrape os itens de preço de seus concorrentes e as páginas disponíveis publicamente. Em seguida, usam essas informações para ajustar seus preços. Outra prática comum da Web scraping é o contato scraping, no qual as organizações coletam dados pessoais como números de telefone ou endereços de e-mail para fins de marketing. 

Por que a Web Scraping é usada?

Por que alguém precisa extrair grandes quantidades de informações de sites? Para entender isso, veja os seguintes aplicativos da Web scraping.

  • Pesquisa e desenvolvimento - Você pode coletar grandes conjuntos de dados (temperatura, informações gerais etc.) de sites e analisá-los para realizar pesquisas para pesquisa e desenvolvimento.
  • Comparação de preços - Empresas e serviços como o ParseHub usam a Web scraping para coletar dados de sites de compras on-line e comparar preços de produtos.
  • Listagens de empregos - Você pode usar o site scraping para coletar detalhes sobre vagas de emprego e entrevistas de diferentes sites e listá-los em um só lugar. 
  • Mídias sociais Scraping - Você pode usar a Web scraping para coletar dados de sites de mídias sociais, como Instagram e Twitter, e descobrir quais são as tendências.
  • Coleta de endereços de e-mail - Muitas empresas usam o e-mail como meio de marketing. Elas usam a Web scraping para coletar IDs de e-mail e, em seguida, enviar e-mails em massa.

Web Scraping usando Python

Você pode acessar scrape dados de sites seguindo as etapas abaixo.

  • Obtenha o URL que você deseja scrape
  • Inspecionar a página
  • Encontre os dados que você precisa extrair
  • Escreva o código
  • Execute o código e extraia os dados
  • Armazenar os dados no formato desejado

As bibliotecas que podemos usar para a Web scraping em Python são:

Pandas - O Pandas é usado para manipular e analisar os dados. Você pode usar essa biblioteca para extrair os dados e armazená-los no formato necessário.

Beautiful Soup - É um pacote Python para analisar documentos HTML e XML. Ele cria árvores de análise que são úteis para facilitar a extração de dados de sites.

Requests - É uma biblioteca HTTP simples.

Usaremos esse site para extrair o número de casos de COVID. Em seguida, analisaremos os dados e criaremos algumas visualizações.

Importar bibliotecas

Você pode importar solicitações e o BeautifulSoup no Python para a Web scraping, conforme mostrado abaixo.

importar solicitações 
from bs4 import BeautifulSoup

URL para Scraping Data

Especifique o URL do site a partir do qual você deve acessar scrape os dados. Você deve usar o método requests.get() para enviar uma solicitação GET para o URL especificado. Além disso, você deve criar um construtor BeautifulSoup que receberá os dois argumentos de cadeia de caracteres, conforme mostrado no código abaixo.

url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
page = requests.get(url) 
soup = BeautifulSoup(page.text, 'html.parser') 
  
dados = []

Scrape Cada elemento

Você pode scrape cada elemento da tabela URL'sURL's usando o método soup.find_all(). Ele retorna um objeto que oferece acesso baseado em índice às ocorrências encontradas e pode ser impresso usando um loop for ou while.

data_iterator = iter(soup.find_all('td'))

Usando um loop

Você pode usar um loop while True que se repete até que haja dados disponíveis no iterador.

while True: 
   try: 
        country = next(data_iterator).text 
        confirmed = next(data_iterator).text 
        deaths = next(data_iterator).text 
        continente = next(data_iterator).text

Para as colunas "confirmed" e "deaths", certifique-se de remover as vírgulas e converter para int. 

data.append(( 
            country, 
            (confirmed.replace(', ', '')), 
            (deaths.replace(',', '')), 
            continente
        )) 
    
    exceto StopIteration: 
       break

Quando o número de elementos restantes para iteração for zero, será gerado o erro StopIteration.

Criar um Dataframe do Pandas

Você pode extrair os dados do site depois de executar o código acima. Você precisa criar um quadro de dados do Pandas para analisar os dados posteriormente. No código abaixo, classificamos os dados pelo número de casos confirmados de COVID.

Importe a biblioteca pandas para criar um dataframe.

data.sort(key = lambda row: row[1], reverse = True)
importar pandas como pd
df = pd.DataFrame(data,columns=['country','Number of cases','Deaths','Continent'],dtype=float)
df.head()
df['Number of cases'] = [x.replace(',', '') for x in df['Number of cases']]
df['Number of cases' ] = pd.to_numeric(df['Number of cases'])
df

Você obterá o resultado abaixo:

Para obter informações sobre o Dataframe, use df.info().

df.info()

Criar coluna Death_rate

Criaremos uma nova coluna chamada Death_rate, conforme mostrado abaixo.

dff = df.sort_values(by ='Number of cases',ascending = False)
dff['Death_rate'] = (dff['Deaths']/dff['Number of cases'])*100
dff.head()

A saída é a seguinte.

Web Scraping com Proxies

Um servidor proxy permite que você use um endereço IP exclusivo para acessar as informações que deseja scrape. Dessa forma, o site não vê seu endereço IP real, permitindo que você acesse os dados scrape anonimamente. Você precisa usar o proxies para a Web scraping pelos seguintes motivos.

  • Você pode enviar várias solicitações simultâneas a um servidor da Web sem ser banido usando um pool de proxies.
  • Com a ajuda do proxies, você pode fazer solicitações de um determinado local, dispositivo, ISP ou rede móvel. Você também pode rastrear o conteúdo exibido para uma área ou dispositivo específico.
  • Alguns sites têm proibições de IP, e você pode contorná-las com a ajuda do proxies. 

Tipos de Proxies para a Web Scraping

Você pode usar os dois sites abaixo proxies para scrape dados de sites.

  • Datacenter proxies - Os endereços IP do datacenter são os endereços IP do servidor. Os servidores estão localizados em centros de dados. O principal objetivo do datacenter proxies é ocultar seu endereço dos sites que você rastreia. Esses proxies são usados principalmente para scrape dados comerciais.
  • Residencial Proxies - Os endereços IP residenciais são mais caros do que os IPs do data center e são difíceis de obter. Esses proxies permitem que você escolha um local específico, ou seja, cidade, país etc., e navegue na Web como um usuário real nessa área geográfica.

Visualização de dados com Python

Você sabe que a visualização de dados é a representação gráfica de dados ou informações. Você pode usar ferramentas visuais como tabelas, mapas e gráficos como uma forma acessível de entender os dados representados. Vamos ver como podemos visualizar os dados extraídos desse site usando ferramentas de visualização de dados.

Importar bibliotecas

Você precisa importar as seguintes bibliotecas para visualizar os dados, conforme mostrado abaixo.

import seaborn as sns
import matplotlib.pyplot as plt
from pylab import rcParams

Plotagem de um gráfico de pares

Você pode traçar um gráfico de pares para demonstrar as relações entre pares em um conjunto de dados. Você pode implementá-lo facilmente usando o código abaixo e pode identificar tendências nos dados para análise posterior.

rcParams['figure.figsize'] = 15, 10
from matplotlib.pyplot import figure
figure(num=None, figsize=(20, 6), dpi=80, facecolor='w', edgecolor='k')
sns.pairplot(dff,hue='Continent')

Você obterá o resultado como.

Traçando um gráfico de barras

Você pode traçar um gráfico de barras que mostre dados categóricos como barras retangulares e compare os valores de diferentes categorias nos dados. 

sns.barplot(x = 'country',y = 'Number of cases',data = dff.head(10))

A saída é a seguinte.

Traçando um gráfico de dispersão

Você pode entender a relação entre os valores numéricos usando um gráfico de dispersão. Ele usa pontos para representar a relação entre as variáveis. 

sns.scatterplot(x = "Number of cases", y = "Deaths",hue = "Continent",data = dff)

A saída é a seguinte.

Agrupar e classificar os dados

No código abaixo, agruparemos os dados por Continente e os classificaremos pelo número de casos de COVID.

dfg = dff.groupby(by = 'Continent',as_index = False).agg({'Number of cases':sum,'Deaths':sum})
dfgg = dfg[1:]
df1 = dfgg.sort_values(by = 'Number of cases',ascending = False)
df1['Death_rate'] = (df1['Deaths']/df1['Number of cases'])*100
df1.sort_values(by = 'Death_rate',ascending = False)

A saída é a seguinte.

Agora, traçaremos um gráfico de barras entre "Continent" (Continente) e "Death_rate" (Taxa de mortalidade), conforme mostrado abaixo.

sns.barplot(x = 'Continent',y = 'Death_rate',data = df1.sort_values(by = 'Death_rate',ascending = False))

A saída é a seguinte.

Esse gráfico de barras mostra que a taxa de mortalidade é a mais alta na América do Sul e a mais baixa na Austrália entre todos os países. 

Importar tabela de texto

Instale texttable para criar uma tabela ASCII simples. Em seguida, importe-a como tt.

!pip install texttable

importar texttable como tt

Criar um objeto de tabela de texto

Você deve criar um objeto de tabela de texto conforme mostrado abaixo. Você deve adicionar uma linha vazia no início da tabela para os cabeçalhos e alinhar as colunas.

tabela = tt.Texttable() 

table.add_rows([(None, None, None, None)] + data) table.set_cols_align(('c', 'c', 'c', ' c', 'c'))  # 'l' indica a esquerda, 'c' indica o centro e 'r' indica a direita 
table.header((' Country ', ' Number of cases ', ' Deaths ', ' Continent ')) 
  
print(table.draw())

Aqui, a saída representa algumas das linhas da tabela como.

Conclusão

Com o site scraping, você pode extrair grandes quantidades de dados de sites de forma rápida e eficiente. Você pode converter os dados não estruturados extraídos em um formato utilizável, como um arquivo .csv. Vimos que podemos scrape os dados da Web usando dois módulos, ou seja, Pandas e BeautifulSoup. Proxies permite extrair os dados da Web de forma anônima. Você pode usar o centro de dados ou o proxies residencial para a Web scraping. O proxies residencial é mais confiável, porém mais caro do que o proxies do data center. Além disso, podemos fazer a análise de dados para obter informações perspicazes com base em nossas necessidades. Neste artigo, analisamos os dados usando ferramentas de visualização de dados, como gráficos de barras, gráficos de pares e gráficos de dispersão.