DOE AGORA Qualquer valor

Web Scraping

Como fazer uma raspagem de dados (Web Scraping) que faz sentido para mim?!

Passo a passo de WebScraping para seu portfólio usando Python

Nayane Maia
Garotas de dados

·
mulher sentada programando no Unsplash

O que é Web Scraping?

Web Scraping é uma técnica de programação que permite extrair informações de páginas da web (sites).

Você provavelmente já deve ter ouvido falar sobre raspagem de dados ou já pensou em fazer um. Quando estamos iniciando nesse mundo “Data Science” sempre procuramos um banco de dados novo para mostrar nossas habilidades, e esses dados precisam representar quem somos, fazer sentido com nossos gostos e nossa especialidade quando estamos construindo nosso portfólio.

Um bom exemplo sobre isso sou eu, sou Engenharia Agronômica e trabalho com mudanças climáticas, qualidade de solos e produtividade de grandes culturas agrícolas como o Milho, Algodão e Soja. Existe um banco de dados gigante sobre esse tema no mundo inteiro, como o título diz, preciso procurar um banco de dados que faça você pensar com o que eu trabalho, por isso vou mostrar duas formas de raspagem de dados nessa área. Mas ao final da leitura você será capaz de fazer a raspagem de dados que mais faz você sentir com o seu gosto pessoal, que pode ser sobre esportes , jornalismo, preço de produtos, saúde, finanças, dados climáticos , entre outros.

Existem duas formas de se fazer a raspagem de dados:

  1. Fácil: Você abre o banco de dados diretamente na sua máquina em forma de data frame.
  2. O que vai te gerar um pouco mais de esforço: Aqui você vai precisar de um conhecimento básico de HTML para buscar informações de sites (Calmaa que vamos conseguir juntes ok?!?! Ninguém larga a mão de ninguém aqui hahaha).
mulher andando e sorrindo

Então vamos comigo e começar pelo jeito fácil né, que eu gosto é da facilidade….

Alguns cientistas de dados não compartilham essa técnica de raspagem de dados por causa de sua facilidade. Mas se o dado que você queria se encontrasse na internet e hospedado em algum site, na sua essência mais pura, você está sim realizando uma raspagem de dados!

Usando a biblioteca Pandas

Com o Pandas você consegue baixar arquivos nos formatos .txt, .csv e .xlsx a partir de links de sites. Aqui vou usar um exemplo de um banco de dados de soja que está hospedado no meu GitHub , como:

importar pandas como pdsoja = pd.read_csv(' https://raw.githubusercontent.com/nayanemaia/Dataset_Soja/main/soja%20sidra.csv' )soja.head()

Vamos visualizar esses dados:

importar seaborn como sns 
sns.set_theme(style=”whitegrid”)
g = sns.catplot(
dados=soja, tipo=”bar”,
x=”ano”, y=”Produção”,
paleta=”escuro”, alfa=.6, altura=6
)
g.despine(esquerda=True )
g.set_axis_labels(“Produção (kg/ha)”)
Produção de soja (kg/ha) no Brasil
mulher abre laptop

Agora mãos à massa (no caso, na máquina haha) porque agora vamos ter um pouco mais de trabalho!!

Primeiramente vamos lembrar alguns conceitos básicos de HTML, caso você nunca tenha visto nada sobre, esse é o momento de começar! Vou tentar ser bem breve nessa parte, mas você pode estudar mais sobre HTML aqui .

O que são Tags do HTML???

As tags são representadas por </>, e o HTML é dividido em cabeça (head) e corpo (body). Dentro do corpo vamos encontrar várias divisões <div> contendo como classes, parágrafos, imagens, links, listas e tabelas .

Exemplo de código HTML

Agora já sabemos onde achar nosso banco de dados! Sabemos que ele fica escondido dentro da Tag <body> do HTML. Agora vamos começar a dar uma olhadinha no banco de dados que vamos baixar. O banco de dados que escolhi foi sobre a produção mundial de Cebolas, que ficou hospedado nesse site. O script completo você encontra no meu GitHub . Essa é a página que vamos baixar os dados:

página da web que vamos fazer a raspagem

Fazendo a raspagem de dados

Ao encontrar uma página onde você irá realizar a raspagem de dados, clique com o lado direito do mouse sobre qualquer lugar da página, depois clique em INSPECIONAR ou F12. Ao fazer isso, vamos inspecionar a página do navegador e abrir as configurações de HTML e CSS da página no item “ Elementos ”, e começar a procurar por Corpo e Tabela . Uma forma mais rápida de você achar é passar o mouse por cima da tag Table onde você deseja realizar o webscraping, pois a tabela vai ser destacada na web, como na imagem a seguir. Cuidado para não pegar o elemento errado, precisa ser apenas a tabela!

páginahtml

Após encontrarmos a tag table , já temos a identificação ('id=') do elemento que vamos usar, e vamos para o Python!!

Resumidamente, vamos precisar instalar duas bibliotecas:

  • Requests: A biblioteca requests fará uma solicitação GET ao servidor, que fará o download dos conteúdos HTML da página solicitada para nós. Existem vários tipos de solicitação diferentes que podemos realizar utilizando essa biblioteca. Se você quiser aprender mais sobre isso, acesse este link .
  • BeautifulSoup : É uma ferramenta incrível para extrair informações de uma página da web. A biblioteca Requests permite fazer uso do HTTP dentro de seus programas Python em um formato legível, e o módulo Beautiful Soup é projetado para fazer web scraping rapidamente.
importar pandas como 
solicitações de importação pd
do bs4 importar BeautifulSoup

Agora vamos fazer uma requisição de página usando o GET, vamos verificar se a requisição foi bem-sucedida e usar o conteúdo para acessar uma página.

req = requests.get(' https://www.atlasbig.com/en-us/countries-onion-production' ) 
if req.status_code == 200:
print('Requisição bem sucedida!')
content = req.content

Agora que temos acesso à página, vamos usar a biblioteca BeautifulSoup para acessar as tabelas. Nessa etapa vamos baixar a tabela em forma de objeto de acordo com as Tags da página, lembra que falamos das tags logo acima?! Agora vamos pedir a permissão da Tag Table.

sopa = BeautifulSoup(content, 'html.parser') 
tabela = sopa.find(nome='tabela')

Agora que já temos acesso à nossa tabela, vamos usar a biblioteca pandas para usar esse objeto. Antes vamos transformá-la em sting , para depois usá-la como lista no DataFrame, começando pela posição 0 para ter acesso a todos os dados da tabela.

tabela_str = str(tabela) 
df = pd . read_html(tabela_str))[0]

Se a página tiver mais de uma tabela, vamos usar a identificação da Tag, como falamos anteriormente. Assim, as chances de pegar só o dado que você quer é mais certo! Nesse passo vamos usar a função attrs do find , usando o inspetor do navegador para achar esse “id=”, como mostrado na figura anterior. Após achar o id, o código da nossa tabela é esse:

tabela = sopa.find(nome='tabela', attrs={'id':'tabela de dados-2–0–1'})

Agora já temos acesso a nossa tabela, a próxima etapa é a limpeza de nossos dados. Nessa etapa vamos limpar os dados que se repetem, no caso da minha tabela, vamos apagar os dados dos países que se repetem, como:

drop_indexes = df[df['Country'] == 'Country'].index # Pega índices onde a coluna 'Country' possui valor 'Country' 
df.drop(drop_indexes, inplace=True) # elimina os valores dos índices passados ​​da tabela
df.head()
Tabela com os dados de produção mundial de cebola

Prontinho!!

Agora já temos a nossa tabela, mas vamos prestar atenção em um detalhe importante: quando baixamos nossa tabela da web usando essas bibliotecas, nossos dados sempre vêm em formato de objetos , e com esse formato não podemos fazer nem uma análise com esses dados! !! Uma forma de verificar qual o tipo de nossos dados é usando o Type , como no código abaixo:

df.dtypes
usando o tipo

Ao analisar o resultado do nosso tipo, percebemos que eu tive um pouco de sorte quando baixei esses dados, todos os meus dados vieram corretamente em forma numérica através de int64 e float64. Mas os países ainda são como objetos, precisamos transformar para dados categóricos para que as pessoas consigam usar esses dados (se quiser saber mais sobre a diferença entre dados categóricos e numéricos veja aqui ), usando o astype , como no código abaixo:

df = df.astype({“País”:'categoria'}) 
df.dtypes
usando o tipo, mudança para categoria

Se todos os nossos dados foram baixados como objetos , também seria necessário transformar nossas variações em números, como no código abaixo:

df['Produção (Toneladas)'] = pd.to_numeric(df['Produção (Toneladas)'], erros='coagir') 
df['Produção por Pessoa (Kg)'] = pd.to_numeric(df['Produção por pessoa (Kg)'], erros='coagir')
df['Acreage (Hectare)'] = pd.to_numeric(df['Acreage (Hectare)'], erros='coagir')
df['Rendimento (Kg) / Hectare)'] = pd.to_numeric(df['Rendimento (Kg / Hectare)'], erros='coercer')

Agora que todos os nossos dados são numéricos e categóricos, vamos visualizar esses dados:

importar matplotlib como plt 
importar seaborn como sns
df.pairplot (dados)
Distribuição dos dados da produção mundial de Cebola

Conclusão

Agora já temos o nosso passo a passo de raspagem de dados da web, agora é só achar um material legal que faça sentido para você e embarque no mundo da ciência de dados na sua área!!! Lembrando que esse exemplo é apenas um entre outros métodos que existem de raspagem de dados, eu mostrei um exemplo utilizando banco de dados de tabelas em formato público, mas você também pode testar a raspagem de dados vários usando:

  • Banco de textos de uma página web .
  • Preços de produtos de páginas de lojas comerciais.
  • Nomes e avaliações de filmes .
  • Baixe vários arquivos de uma única vez, exemplo de arquivos .txt de um site .

A possibilidade de bancos de dados que fazem você achar que é infinita, esse artigo é apenas o começo das possibilidades que você pode testar! Em caso de dúvidas ou sugestões, estou aberto para conexões no LinkedIn !

Comentários

Ebook

Postagens mais visitadas