Mini Web Scraper com Python – Coletando dados de um site simples usando requests e BeautifulSoup

A internet é um imenso repositório de informações. Muitas vezes, precisamos coletar dados de sites para análise, automação de relatórios ou simplesmente por curiosidade. É aí que entra o Web Scraping.

Neste artigo, vamos criar um mini web scraper em Python, capaz de acessar uma página da web e extrair informações de forma automatizada usando duas bibliotecas poderosas:

  • requests → para fazer requisições HTTP e obter o conteúdo da página.

  • BeautifulSoup → para analisar (parsear) o HTML e facilitar a coleta dos dados.

⚠️ Aviso importante: sempre verifique se o site permite scraping. Consulte o arquivo robots.txt (exemplo: https://example.com/robots.txt) e leia os termos de uso.


Passo 1 – Instalando as bibliotecas necessárias

Antes de começar, instale as bibliotecas:

pip install requests beautifulsoup4

Passo 2 – Fazendo a primeira requisição com requests

A biblioteca requests permite que o Python "visite" uma página da web e obtenha seu conteúdo.

import requests

url = "https://quotes.toscrape.com/"  # site de exemplo para scraping
response = requests.get(url)

print("Status:", response.status_code)  # 200 significa sucesso
print("HTML recebido:")
print(response.text[:500])  # mostra apenas os primeiros 500 caracteres

Se tudo deu certo, você verá o HTML da página. Esse é o material bruto que vamos processar.


Passo 3 – Analisando o HTML com BeautifulSoup

Agora que temos o código-fonte da página, precisamos navegar pelo HTML e extrair apenas as informações que queremos.

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "html.parser")

# Exemplo: pegar o título da página
titulo = soup.title.text
print("Título da página:", titulo)

Passo 4 – Coletando dados específicos

O site de exemplo quotes.toscrape.com possui várias frases (quotes) e autores. Vamos coletar todas as frases e seus respectivos autores:

quotes = soup.find_all("span", class_="text")
authors = soup.find_all("small", class_="author")

for i in range(len(quotes)):
    print(f"{quotes[i].text} — {authors[i].text}")

👉 Esse código percorre todos os elementos <span class="text"> (frases) e <small class="author"> (autores), exibindo-os em pares.

Exemplo de saída:

“The world as we have created it is a process of our thinking.” — Albert Einstein  
“It is our choices, Harry, that show what we truly are.” — J.K. Rowling  

Passo 5 – Coletando links

Muitas vezes queremos navegar para páginas relacionadas. Vamos coletar os links de todas as tags:

links = soup.find_all("a")

for link in links:
    print(link.get("href"))

Isso mostra todos os links encontrados na página.


Passo 6 – Salvando os dados em um arquivo CSV

Agora que já sabemos coletar os dados, vamos salvar em um arquivo CSV para análise posterior.

import csv

with open("quotes.csv", "w", newline="", encoding="utf-8") as file:
    writer = csv.writer(file)
    writer.writerow(["Frase", "Autor"])

    for i in range(len(quotes)):
        writer.writerow([quotes[i].text, authors[i].text])

Agora teremos um arquivo quotes.csv com todas as frases e autores.


Código Completo – Mini Web Scraper

Aqui está a versão final do projeto:

import requests
from bs4 import BeautifulSoup
import csv

# URL de exemplo
url = "https://quotes.toscrape.com/"
response = requests.get(url)

# Verifica se a requisição foi bem-sucedida
if response.status_code == 200:
    soup = BeautifulSoup(response.text, "html.parser")

    quotes = soup.find_all("span", class_="text")
    authors = soup.find_all("small", class_="author")

    # Salvar em CSV
    with open("quotes.csv", "w", newline="", encoding="utf-8") as file:
        writer = csv.writer(file)
        writer.writerow(["Frase", "Autor"])

        for i in range(len(quotes)):
            writer.writerow([quotes[i].text, authors[i].text])

    print("✅ Dados salvos em quotes.csv")
else:
    print("❌ Erro ao acessar a página:", response.status_code)

Exercícios para praticar

  1. Coletar também as tags das frases (<div class="tags">).

  2. Fazer o scraper percorrer várias páginas do site (use soup.find("li", class_="next") para pegar o link da próxima).

  3. Criar uma função que receba uma URL e retorne os dados em lista de dicionários.

  4. Melhorar o projeto para ler e gravar JSON além de CSV.


Conclusão

Com poucas linhas de código, conseguimos criar um mini web scraper em Python que acessa páginas da web, coleta informações e salva em arquivos para análise.

✔ Aprendemos a usar requests para obter o HTML.
✔ Usamos BeautifulSoup para navegar no conteúdo.
✔ Extraímos frases, autores e links.
✔ Salvamos os dados em um arquivo CSV.

Esse é apenas o primeiro passo no mundo do Web Scraping. A partir daqui, você pode evoluir para projetos mais avançados, como:

  • Scrapers que percorrem múltiplas páginas automaticamente.

  • Coleta de preços de produtos em e-commerces.

  • Integração com bancos de dados.

  • Scraping com Selenium para páginas dinâmicas (JavaScript).

Comentários

Postagens mais visitadas deste blog

Laços de Repetição em Python: Conceitos e Exemplos Práticos

Manipulação de Arquivos no C#: Como Ler, Escrever e Trabalhar com Arquivos de Forma Simples

Como Instalar o Xamarin com C#: Passo a Passo Completo