Blog

Postado em em 28 de março de 2023

Introdução ao BeautifulSoup – Raspagem de Dados com Python

Você já sabe como usar o BeautifulSoup? Nesta aula vamos fazer a introdução ao BeautifulSoup, você vai aprender a usar essa ferramenta!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse o nosso canal do YouTube!

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Na aula de hoje eu quero te mostrar como fazer uma raspagem de dados com Python (Web scraping com Python).

Para isso nós vamos fazer uma breve introdução ao BeautifulSoup, que nada mais é do que uma ferramenta de raspagem de dados (obtenção de dados na web).

Eu vou te mostrar como extrair informações da web utilizando essa ferramenta para facilitar suas automações na busca de dados.

Você vai aprender o que é o BeautifulSoup, como ele funciona, como vamos buscar os dados na web com ele, como organizar o código do site e como trazer uma informação específica!

Introdução ao BeautifulSoup

O primeiro passo é baixar o material da aula para acompanhar melhor a execução do código.

Um segundo ponto é que sempre que você for usar o BeautifulSoup você deve importar a biblioteca Requests, essas duas ferramentas devem ser usadas em conjunto porque é a biblioteca Requests que vai possibilitar fazer a raspagem dos dados.

No terminal vamos fazer as instalações:

>pip install beautifulsoup4

>pip install requests

Agora vamos importar:

Import requests

From bs4 import BeautifulSoup (para importar o BeautifulSoup é necessário colocar no início o From bs4)

Nosso exemplo é do site que faz a Cotação do Dólar em Tempo Real:

O exemplo que vamos usar nesta aula é muito simples, basicamente vamos entrar no site e pegar a cotação do dólar em tempo real.

Existem formas mais fáceis de coletar esta informação, mas, nesta aula nosso objetivo é mostrar o funcionamento do BeautifulSoup.

Vamos precisar trazer todo o código do site para dentro do Python, para isso vamos criar uma variável que vai receber o link do site que vamos utilizar.

Link do site:

https://www.google.com/search?q=cota%C3%A7%C3%A3o+dolar&oq=cota%C3%A7%C3%A3o&aqs=chrome.0.0i131i433i512j69i57j0i433i512j0i131i433i512l3j0i131i433i650j0i512j0i433i512j0i131i433i512.2780j1j15&sourceid=chrome&ie=UTF-8

Observe o link do site quando fazemos uma pesquisa, é este código gigante acima, podemos encurtar isso, basta que você copie todas as informações até o primeiro & que aparecer, desta forma você encurta o link sem comprometer a busca.

Resultado:

https://www.google.com/search?q=cota%C3%A7%C3%A3o+dolar

Código:

import requests

from bs4 import BeautifulSoup

link = “https://www.google.com/search?q=cotacao+dolar”

requisição = requests.get(link)

print(requisicao)

print(requisicao.text)

Observe que no código estamos primeiro colocando o link do site dentro da variável link, após, estamos utilizando o Requests para fazer a importação do link e logo em seguida vamos printar as informações da variável Requisição e o texto da requisição.

Se a importação da requisição foi feita de forma correta então você vai encontrar depois de printar uma linha escrito <Response [200]>

O print do texto da requisição, por outro lado, vai gerar um código em HTML (parte azul da imagem).

Introdução ao BeautifulSoup
response [200] e HTML

Da forma como este código HTML vem, nós não conseguimos trabalhar, porque está desorganizado, para ajustar isso vamos usar o BeautifulSoup:

site = BeautifulSoup(requisicao.text, "html.parser")

print(site.prettify())

Se printarmos agora o resultado fica muito maior, porque vai estar na estrutura padrão do HTML, muito mais fácil de entender:

Início do Processo de Raspagem de Dados

Para buscar o título do site vamos buscar por:

titulo = site.find(“title”)

Print(titulo)

O título que vem como resultado é o mesmo título da aba de pesquisa do site, mas, como saber qual é a tag HTML que você deve usar para acessar algo que está no site? Neste caso usamos o “title” e quando procurarmos outra informação que não seja o título?

Introdução ao BeautifulSoup
title

Para isso, temos algumas pesquisas a fazer, você deve entrar no site e clicar com o botão direito do mouse -> clique em inspecionar.

inspecionar
inspecionar

Clique na seta indicada na imagem acima, após clicar na seta você pode passar com o mouse por cima dos gráficos e textos do site, vai observar que vão aparecer blocos coloridos conforme você desliza pobre as informações.

Ao clicar sobre um deles como a área de pesquisa, por exemplo. Observe no código ao lado do símbolo “<” está a palavra input, esta é a palavra que representa a tag que coleta dados do usuário.

No entanto, apesar do site ter encontrado um input, o conteúdo do input pode não ser o mesmo da nossa pesquisa, isso pode acontecer quando temos mais de um input no código. Qual deles é o correto para coletarmos?

input
input

Como encontrar o input correto?

Para isso vamos ter que fazer uma busca de forma mais generalizada, ao invés de usar o find vamos usar o find_All.

titulo = site.find(“title”)

Print(titulo)

pesquisa = site.find_all("input")

# print(pesquisa[1])

Usando o find_all vamos ter como resultado uma lista com todos os inputs da página, todos os disponíveis no código, agora só resta achar o que tem a frase da nossa busca e esse será o input que estamos procurando.

Neste caso, lendo os inputs, vemos que o input que queremos é o segundo dessa lista, mas, e se o site modificar isso e o input passar a ser o primeiro ou o terceiro da lista, nosso código pode deixar de funcionar?

Sim, isso pode acontecer…

Isso porque, o BeautifulSoup traz as informações do site e depois disso as trata, então é preciso trabalhar com sites estáticos como o Google, a maioria dos sites de notícias.

Sites como o YouTube que não carregam todo o conteúdo de uma só vez e sempre tem mais informações à medida que você desce a barra ou sites onde você tem interação com coleta de senhas NÃO são indicados para o BeautifulSoup e essa é uma desvantagem da ferramenta.

Uma vantagem é que o BeautifulSoup faz a busca de uma maneira padrão, então se você trocar o link, ele consegue coletar as mesmas informações de qualquer página usando a mesma estrutura.

Outra vantagem do BeautifulSoup é ser rápido para coletar dados e a desvantagem como falamos é servir apenas para sites estáticos, se você quiser trabalhar com sites dinâmicos você terá que usar outra ferramenta como o Selenium, por exemplo.

Mudança de Posição do Input

Vamos imaginar que o input que estava em segundo lugar na lista que pesquisamos usando o find_all, agora não é mais o segundo. Uma forma de pesquisar este input de modo a sempre encontrar o correto é usando mais de uma característica daquele input na busca, perceba que a linha de código do input possui muitas outras características, podemos usar a class, por exemplo.

pesquisa2 = site.find("input", class_="gLFyf")

print(pesquisa2)

Obs. Sempre que pesquisar por class você deve colocar o underline -> class_ -> isso porque class é uma palavra usada no Python para identificação, portanto para pesquisar class como uma característica do código do site para uma busca é necessário fazer essa diferenciação.

Importante -> este código acima onde colocamos 2 características do input vai dar um erro quando executado, por quê?

Isso ocorre porque o navegador consegue saber que você está pedindo esta requisição por meio do Python e isso causa o erro, se a requisição viesse de outro navegador a pesquisa seria feita de forma correta. Como resolvemos isso?

Você precisa fazer o navegador entender que a requisição vem de um navegador, porque assim ele te entrega o resultado no formato correto, no formato de Python algumas informações podem vir faltando.

Volte na página do site e clique novamente com o botão direito -> inspecionar -> vá na guia Network -> dentro de Network você vai ver várias listas, se não aparecerem, clique em f5 para verificar as listas, feito isso, clique em qualquer uma dessas linhas de código.

Dentro desta linha vai haver a parte de Request URL, Request Method e Request Headers, este último é o que estamos procurando.

Introdução ao BeautifulSoup
Request Headers

Dentro de Request Headers você vai encontrar a parte de user-agent, esta é a linha que diz qual a versão do navegador que estamos pedindo.

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36

Vamos precisar passar essa informação para o código:

import requests

from bs4 import BeautifulSoup

link = "https://www.google.com/search?q=cotacao+dolar"

headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"}

Agora só precisamos colocar o Headers na requisição:

requisicao = requests.get(link, headers=headers)

print(requisicao)

Nosso código já consegue encontrar o input correto agora, com uma chance muito menor de erro.

Mais um Exemplo: Como pegar a informação do valor do Dólar usando tudo que já vimos nesta aula!

cotacao_dolar = site.find("span", class_="SwHCTb")

print(cotacao_dolar.get_text()) -> pega a informação em formato de texto (valor arredondado)

print(cotacao_dolar["data-value"]) -> busca a cotação do site (valor com mais casas decimais)

Conclusão – Introdução ao BeautifulSoup

Pessoal, fiz esta aula para mostrar a vocês o máximo de informações possíveis para uma boa introdução ao BeautifulSoup, conseguimos ver o que podemos fazer com a ferramenta.

Então, nesta aula aprendemos como usar a ferramenta, como trabalhar dentro do site, os possíveis erros e qual tipo de site podemos usar.

Espero que gostem, a Introdução ao BeautifulSoup é mais um conhecimento para aplicar nos seus projetos!

Até breve! Abraço,

Hashtag Treinamentos

Para acessar outras publicações de Python, clique aqui!


Quer aprender mais sobre Python com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador