Como Fazer Web Scraping Ético em Python
Se você já pensou em coletar dados da web para um projeto, mas ficou com medo de ser confundido com um hacker de filmes dos anos 90, relaxe! Web scraping pode ser feito de forma ética e responsável — sem invadir sistemas, sobrecarregar servidores ou irritar administradores de sites.
Neste artigo, vamos explorar as melhores práticas para web scraping usando Python, com direito a exemplos de código bem comentados para você testar na sua máquina. Vamos de Beautiful Soup
e Requests
para extrair dados sem violar termos de serviço.

💡 Dica para aprofundar seus conhecimentos em Python: Se você está começando ou quer se tornar um expert, livros como “Introdução à Programação em Python” (Nilo Ney Coutinho) e “Curso Intensivo de Python” são ótimos recursos para dominar a linguagem antes de partir para o web scraping.
Por Que Ser Ético no Web Scraping?
Antes de sair raspando tudo que vê pela frente, é importante entender que:
- Nem todo site permite scraping– Alguns têm termos de uso explícitos contra isso (olá, LinkedIn!).
- Servidores têm limites – Muitas requisições em pouco tempo podem derrubar um site (e você pode ser bloqueado).
- Respeito à privacidade – Dados pessoais devem ser tratados com cuidado (a menos que você queira problemas com a LGPD/GDPR).
Ou seja: seja um scraper educado, não um robô malvado.

📚 Leitura recomendada: “Pense em Python” é um livro fantástico para entender melhor boas práticas de programação e pensar como um desenvolvedor Python consciente.
Regras de Ouro do Web Scraping Ético
Leia os `robots.txt` – Todo site tem um arquivo `robots.txt` (ex: `https://uol.com.br/robots.txt`) que diz quais páginas podem ou não ser acessadas por bots. Respeite isso!
Obs.: o site do Uol foi utilizado apenas como um exemplo, você pode testar os scripts aqui mencionados em qualquer site, por sua conta e risco, claro.
import requests
url = "https://uol.com.br/robots.txt"
response = requests.get(url)
print(response.text) # Veja as regras antes de prosseguir!
Se você executar o código acima, verá um resultado mais ou menos como este logo abaixo:

Identifique-se com um User-Agent – Enviar requisições sem um `User-Agent` é como bater na porta de alguém com um capuz — suspeito! Use um cabeçalho identificando seu bot
headers = {
"User-Agent": "MeuBotEducado/1.0 ([email protected])"
}
response = requests.get("https://exemplo.com", headers=headers)
Não Seja um Ataque DDoS – Faça pausas entre requisições (`time.sleep`) e evite sobrecarregar o servidor
import time
from bs4 import BeautifulSoup
urls = ["https://exemplo.com/pagina1", "https://exemplo.com/pagina2"]
for url in urls:
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
# Processe os dados aqui...
print(soup.title.text) # Exemplo: extrair o título da página
time.sleep(2) # Aguarda 2 segundos entre requisições
Siga as APIs Primeiro – Muitos sites oferecem APIs oficiais para acesso a dados. Use-as! Exemplo:
# Exemplo com a API do GitHub (que é pública e documentada)
response = requests.get("https://api.github.com/users/octocat")
data = response.json()
print(data["name"]) # Saída: The Octocat
📚 Quer dominar APIs e requisições web? O livro “curso intensivo de python” tem um capítulo excelente sobre consumo de APIs com Python.

Exemplo Prático: Raspando Dados de Notícias (Sem Ser Malvado)
Vamos extrair títulos de notícias de um site fictício (ou real, se você ajustar a URL), seguindo as boas práticas.
import requests
from bs4 import BeautifulSoup
import time
# Configurações iniciais
url = "https://exemplo-de-noticias.com/ultimas"
headers = {"User-Agent": "MeuBotDeNoticias/1.0 ([email protected])"}
try:
# Faz a requisição
response = requests.get(url, headers=headers)
response.raise_for_status() # Verifica se houve erro
# Parseia o HTML
soup = BeautifulSoup(response.text, 'html.parser')
noticias = soup.find_all('h2', class_='titulo-noticia') # Ajuste conforme o site
# Exibe os títulos
for i, noticia in enumerate(noticias, 1):
print(f"{i}. {noticia.text.strip()}")
except requests.exceptions.RequestException as e:
print(f"Erro na requisição: {e}")
finally:
time.sleep(3) # Pausa educada antes de encerrar
🔍 Se você quer se aprofundar em manipulação de HTML e extração de dados, “Introdução à Programação em Python” do Nilo Ney tem ótimos exercícios para praticar.
Quando Parar? Sinais de Alerta
- Código 403 (Forbidden) – O site bloqueou seu acesso.
- CAPTCHAs aparecendo – Você está fazendo muitas requisições.
- Seu IP foi banido – Hora de repensar sua estratégia.
Se isso acontecer, pare imediatamente e verifique se você está seguindo as regras
Conclusão: Scraping com Consciência
Web scraping é uma ferramenta poderosa, mas com grandes poderes vêm grandes responsabilidades. Siga as boas práticas:
- Respeite `robots.txt` e os termos de serviço.
- Use APIs quando disponíveis.
- Faça requisições com moderação.
- Identifique seu bot.
Assim, você coleta dados sem virar o vilão da história!
📖 Quer se tornar um mestre em Python? Confira esses livros incríveis para complementar seus estudos:
- 🐍 Introdução à Programação em Python – Ideal para iniciantes.
- ⚡ Curso Intensivo de Python – Perfeito para quem quer avançar rápido.
- 🧠 Pense em Python – Ensina a pensar como um programador Python
E aí, pronto para raspar dados como um gentleman scraper? 🎩✨
Gostou? Compartilhe e deixe seu comentário!
Quer um tutorial mais avançado com Scrapy
ou Selenium
? Me avise nos comentários!
🔗 Links Úteis:
Descubra mais sobre Alexsandro Felix
Assine para receber nossas notícias mais recentes por e-mail.