Scraping Python: Guia Completo Para Iniciantes com Exemplo Prático
- JP
- 1 de abr.
- 5 min de leitura

Aprenda como coletar dados da web com Scraping Python, passo a passo, usando BeautifulSoup e requests.
Se você já se perguntou como alguns sites conseguem coletar dados da internet de forma automática, a resposta provavelmente passa por uma técnica chamada web scraping. E adivinha quem é o queridinho para isso? Exatamente: o scraping com Python!
Neste post, vamos explorar:
O que é scraping;
Casos de uso;
Vantagens e desvantagens;
Um exemplo prático completo com explicação do código.
O que é Scraping Python?
Scraping é o processo de coletar informações de sites automaticamente. No caso de scraping com Python, usamos bibliotecas específicas para simular a navegação, capturar conteúdo de páginas e transformar em dados utilizáveis.
Casos de Uso de Scraping com Python
Monitoramento de preços em e-commerces;
Coleta de dados para análise de mercado;
Extração de informações de sites de notícias;
Agregadores de conteúdo (como buscadores de promoções);
Atualização automática de bancos de dados com dados públicos;
Extração de dados para uso em ETLs;
Vantagens do Scraping com Python
Python tem diversas bibliotecas poderosas pra scraping;
Código simples e legível, ideal pra quem está começando;
Automação de tarefas repetitivas e coleta de dados em larga escala;
Integração fácil com bibliotecas de data science, como pandas e matplotlib.
Desvantagens
Sites com proteção (como Cloudflare ou captchas) dificultam o scraping;
Mudanças na estrutura do site quebram o código;
Legalidade: nem todo site permite scraping (veja o robots.txt);
Pode ser bloqueado por excesso de requisições.
Exemplo Prático Completo de Scraping com Python
Vamos usar as bibliotecas requests e BeautifulSoup para extrair dados do site Books to Scrape, um site criado justamente para treinar scraping.
Instale as bibliotecas
pip install requests beautifulsoup4
Agora, vamos desenvolver o código
Resultado da execução
Título: A Light in the Attic
Preço: £51.77
Disponibilidade: In stock
---
Título: Tipping the Velvet
Preço: £53.74
Disponibilidade: In stock
---
Título: Soumission
Preço: £50.10
Disponibilidade: In stock
---
Título: Sharp Objects
Preço: £47.82
Disponibilidade: In stock
---
Título: Sapiens: A Brief History of Humankind
Preço: £54.23
Disponibilidade: In stock
---
Entendo o código fonte
Entendendo a função - requests.get(url)
O que essa linha faz?
response = requests.get(url)
Ela envia uma requisição HTTP do tipo GET para a URL informada, ou seja, ela acessa o site como se fosse um navegador pedindo o conteúdo da página.
Se a URL for:
url = "http://books.toscrape.com/"
Então requests.get(url) vai fazer a mesma coisa que você digitar esse endereço no seu navegador e apertar "Enter".
O que é o requests?
O requests é uma biblioteca super popular no Python pra lidar com requisições HTTP (GET, POST, PUT, DELETE...). Ela é tipo o "correio" do seu código: você manda uma carta (a requisição) e espera a resposta (o conteúdo do site).
O que vem dentro de response?
O objeto response traz várias informações importantes sobre a resposta da página. Algumas que a gente usa bastante:
response.status_code → mostra o código de status HTTP (200, 404, 500...);
200 = Sucesso ✨
404 = Página não encontrada ❌
response.text → o HTML completo da página (em formato string);
response.content → igual ao text, mas em bytes (útil pra imagens, PDFs etc.);
response.headers → os headers HTTP que o servidor enviou (dá pra ver tipo o tipo de conteúdo, encoding etc.).
Dica de ouro:
Sempre teste o status_code antes de seguir com o scraping, tipo:
if response.status_code == 200:
# Tudo certo, bora continuar
else:
print("Erro ao acessar a página")
Assim seu código não quebra se o site estiver fora do ar ou mudar o caminho.
Entendendo a função - BeautifulSoup()
O que essa linha faz?
soup = BeautifulSoup(response.text, 'html.parser')
O BeautifulSoup é uma ferramenta de parsing HTML (ou seja, de “entender” o HTML). Ele transforma aquele texto enorme que vem do site em um objeto navegável, onde você pode buscar tags, atributos, classes, textos... tudo de forma simples.
response.text: é o HTML da página, que veio da requisição com requests.get().
'html.parser': é o parser usado, ou seja, o motor que vai interpretar esse HTML.
Existem outros parsers como 'lxml' ou 'html5lib', mas o 'html.parser' já vem com o Python e funciona bem na maioria dos casos.
O que a variável soup vira?
Ela vira um objeto BeautifulSoup. Esse objeto representa toda a estrutura da página, e aí você pode usar métodos como:
.find() → pega o primeiro elemento que corresponde ao que você procura.
.find_all() → pega todos os elementos que batem com o filtro.
.select() → busca usando seletores CSS (como .classe, #id, tag tag).
.text ou .get_text() → extrai só o texto do elemento, sem tags HTML.
🔍 Exemplo visual:
html = "<html><body><h1>Oi!</h1></body></html>"
soup = BeautifulSoup(html, 'html.parser')
print(soup.h1) # <h1>Oi!</h1>
print(soup.h1.text) # Oi!
Em contexto com scraping:
response = requests.get("http://books.toscrape.com/")
soup = BeautifulSoup(response.text, 'html.parser')
# Agora dá pra buscar qualquer tag:
title_tag = soup.find('title')
print(title_tag.text) # Vai imprimir o título da página
Entendendo a função - soup.find_all()
O que essa linha faz?
books = soup.find_all('article', class_='product_pod')
Ela busca todos os elementos HTML que representam livros na página, usando como base a tag HTML article e a classe CSS product_pod. No site Books to Scrape, cada livro é exibido dentro de uma estrutura mais ou menos assim:
<article class="product_pod">
<h3><a title="Book Title"></a></h3>
<p class="price_color">£51.77</p>
<p class="instock availability">In stock</p>
</article>
Ou seja, essa linha está dizendo:
“Ei, BeautifulSoup, pega pra mim todos os elementos article que tenham a classe product_pod, e me devolve em uma lista chamada books.”
Que tipo de dado ela retorna?
books será uma lista de objetos BeautifulSoup, cada um representando um livro. Aí a gente pode percorrer essa lista com um for, e extrair os dados de cada livro individualmente (como o título, o preço e a disponibilidade).
[
<article class="product_pod">...</article>,
<article class="product_pod">...</article>,
...
(20 vezes)
]
Entendendo a função - book.find()
O que essa linha faz?
price = book.find('p', class_='price_color').text
O método .find() é usado para buscar o primeiro elemento HTML que corresponda ao filtro que você indicar.
A estrutura básica é:
elemento = objeto_soup.find(nome_da_tag, atributos_opcionais)
No nosso caso:
book.find('p', class_='price_color')
Significa:
“Procure dentro do book pela primeira tag <p> que tenha a classe price_color.”
🔍 Exemplos com .find():
Pegando o preço:
preco = book.find('p', class_='price_color').text
# Resultado: "£13.76"
Pegando o título:
titulo = book.find('h3').a['title']
# O h3 tem uma tag <a> dentro com o atributo "title"
Conclusão: Vale a pena usar Scraping com Python?
Com certeza! Scraping com Python é uma habilidade super útil pra qualquer pessoa que trabalha com dados, automação ou simplesmente quer otimizar tarefas repetitivas. Com algumas linhas de código e bibliotecas como requests e BeautifulSoup, você consegue extrair informações valiosas da web de forma rápida e eficiente.
Além disso, Python é acessível, tem uma comunidade gigante, e uma tonelada de tutoriais e recursos — ou seja, você nunca tá sozinho nessa jornada.
Porém, é importante lembrar:
Nem todo site permite scraping — sempre respeite o robots.txt e os termos de uso;
Mudanças na estrutura do HTML podem quebrar seu código — então mantenha seu scraper atualizado;
Sites mais complexos (com JavaScript, login etc.) podem exigir ferramentas mais avançadas como Selenium ou Scrapy.
Se você está começando agora, esse post foi só o primeiro passo. Daqui pra frente, você pode evoluir pra salvar os dados em planilhas usando Pandas, bancos de dados, integrar com dashboards, ou até criar bots de automação mais complexos.
Quer Aprender Mais? Inscreva-se na nossa Newsletter semanal!
Não perca nossas dicas exclusivas de Tech e Data!
Receba semanalmente:
Tutoriais práticos e diretos sobre Engenharia de Software e Dados
Insights de tecnologia e notícias da semana
Comments