Web scraping com Python: recolher dados da web com ética e dentro da lei

📅 19 Aug 2026 📖 6 min de leitura 🏷️ Programadores ✍️ Marcus

A internet é o maior repositório de dados do planeta, mas transformar milhões de páginas web em informação estruturada e útil exige as ferramentas certas. O web scraping permite automatizar a recolha de dados públicos para pesquisas de mercado, análise de preços ou acompanhamento de notícias, sem a necessidade de copiar e colar manualmente.

Contudo, extrair informação da web não é um processo sem regras. Fazer scraping de forma irresponsável pode sobrecarregar servidores alheios, violar termos de serviço ou descumprir normas de proteção de dados, como o RGPD. Neste artigo, vais aprender a construir um extrator em Python com as bibliotecas requests e BeautifulSoup, respeitando os princípios éticos e legais, e como automatizar todo o processo através do Hermes Agent.

A ética e a legalidade no Web Scraping

Antes de escrever qualquer linha de código para extrair conteúdos, é fundamental compreender as boas práticas que distinguem uma recolha legítima de um ataque automatizado. Respeitar a infraestrutura e a privacidade dos sites alvo garante que as tuas automações funcionem de forma sustentável e dentro da lei.

  • Ficheiro robots.txt: É o padrão utilizado pelos sites para indicar quais as secções que podem ou não ser visitadas por bots e crawlers. Antes de fazer qualquer pedido, deve ser verificada a permissão neste ficheiro.
  • Termos de Serviço (ToS): Muitos sites proíbem expressamente a recolha automatizada de dados nos seus termos de utilização. É essencial rever essas condições antes de iniciar um projeto.
  • Frequência de requisições (Rate Limiting): Enviar centenas de pedidos por segundo pode derrubar um servidor. Incluir pausas (delays) entre requisições evita causar indisponibilidade no serviço.
  • Identificação clara (User-Agent): Identificar o teu script através de um cabeçalho User-Agent personalizado com um contacto válido demonstra transparência.
  • Dados Pessoais e RGPD: Evita recolher dados pessoais (como emails, nomes ou números de telefone) sem base legal. Foca-te exclusivamente em dados públicos não sensíveis.

Tutorial prático: Extrair dados públicos com Python

Para criar o nosso extrator responsável, vamos utilizar duas das bibliotecas mais populares do ecossistema Python: o requests para efetuar chamadas HTTP e o BeautifulSoup (da suite bs4) para analisar o HTML retornado.

Passo 1: Instalar as bibliotecas necessárias

Abre o teu terminal e instala as dependências necessárias executando o seguinte comando:

pip install requests beautifulsoup4

Este comando descarrega as ferramentas necessárias para realizar pedidos à web e para navegar pela estrutura HTML das páginas.

Passo 2: Criar o script Python com verificação de ética

Vamos escrever um script Python completo que verifica as permissões do ficheiro robots.txt antes de aceder à página e extrai os títulos das notícias disponíveis.

import time
import urllib.parse
import urllib.robotparser
import requests
from bs4 import BeautifulSoup

def pode_raspar(url_alvo, user_agent="MeuBotEtico/1.0"):
    """Verifica se o ficheiro robots.txt permite o acesso à URL."""
    parsed = urllib.parse.urlparse(url_alvo)
    robots_url = f"{parsed.scheme}://{parsed.netloc}/robots.txt"
    
    rp = urllib.robotparser.RobotFileParser()
    rp.set_url(robots_url)
    try:
        rp.read()
        return rp.can_fetch(user_agent, url_alvo)
    except Exception as e:
        print(f"Aviso: Não foi possível ler o robots.txt ({e}). A prosseguir com cautela.")
        return True

def extrair_titulos(url_alvo):
    user_agent = "MeuBotEtico/1.0 (+https://meusite.pt/contacto)"
    headers = {"User-Agent": user_agent}

    print(f"A verificar permissões para: {url_alvo}")
    if not pode_raspar(url_alvo, user_agent):
        print("Acesso negado pelas regras do robots.txt.")
        return

    print("A enviar requisição HTTP...")
    resposta = requests.get(url_alvo, headers=headers)

    if resposta.status_code == 200:
        soup = BeautifulSoup(resposta.text, "html.parser")
        # Procura por todos os elementos h2 na página
        titulos = soup.find_all("h2")
        
        print(f"\n--- Títulos Encontrados ({len(titulos)}) ---")
        for idx, titulo in enumerate(titulos, 1):
            texto = titulo.get_text(strip=True)
            if texto:
                print(f"{idx}. {texto}")
        
        # Pausa respeitosa de 2 segundos após a recolha
        time.sleep(2)
    else:
        print(f"Falha ao aceder à página. Código de estado: {resposta.status_code}")

if __name__ == "__main__":
    # Exemplo com uma página de teste
    url_exemplo = "https://news.ycombinator.com/"
    extrair_titulos(url_exemplo)

O código acima define uma função de verificação automática do robots.txt recorrendo ao módulo nativo urllib.robotparser. Se a recolha for permitida, o script faz a requisição adicionando um User-Agent identificável, extrai o texto de todos os elementos <h2> com o BeautifulSoup e aguarda 2 segundos antes de encerrar, respeitando a carga do servidor.

Integrar a recolha de dados com o Hermes Agent

O Hermes Agent permite transformar scripts simples em automações inteligentes que podem ser executadas sob procura ou integradas em fluxos de trabalho complexos com Inteligência Artificial.

Passo 3: Criar uma Skill personalizada no Hermes Agent

Para disponibilizar esta capacidade ao teu agente, cria o ficheiro de definição da skill em formato Markdown no diretório correspondente do Hermes. Salva o ficheiro abaixo como SKILL.md:

---
name: web-scraper-etico
description: Extrai dados públicos de websites respeitando as regras éticas e o ficheiro robots.txt.
author: MarctechJA
version: "1.0"
platforms:
  - macos
  - linux
  - windows
metadata:
  hermes:
    tags: [web-scraping, python, automacao]
---

# web-scraper-etico
Skill para recolha automatizada e responsável de conteúdos públicos na web.

## When to Use
Utiliza esta skill sempre que for necessário recolher informações, notícias, preços ou dados estruturados de páginas web públicas mantendo total conformidade com boas práticas legais e éticas.

## Instruções
1. Recebe o URL de destino e os seletores HTML pretendidos fornecidos pelo utilizador.
2. Executa a verificação prévia das regras do ficheiro `robots.txt` do domínio correspondente.
3. Utiliza o script Python com as bibliotecas `requests` e `BeautifulSoup` para descarregar o conteúdo.
4. Aplica um intervalo mínimo de 2 segundos entre pedidos sequenciais.
5. Apresenta os dados recolhidos num formato limpo e estruturado (JSON ou lista organizada).

## Critérios de conclusão
- Confirmação de autorização concedida pelo `robots.txt`.
- Extração bem-sucedida dos dados sem erros de rede.
- Apresentação clara do resultado final no terminal ou guardado em ficheiro.

Esta estrutura padronizada informa o Hermes Agent sobre as regras de funcionamento da ferramenta, os cenários de aplicação e os passos exatos que deve seguir na hora de executar a automação.

Passo 4: Executar a Skill no Hermes Agent

Depois de guardar a skill, podes verificar se ela foi reconhecida corretamente pelo sistema listando as skills ativas:

hermes skills list

Para iniciar uma sessão interativa e pedir ao agente que efetue a recolha de dados utilizando a tua nova skill, executa o comando:

hermes chat -s web-scraper-etico

Dentro do chat, podes fornecer um URL e indicar ao Hermes Agent exatamente que dados pretendes extrair e resumir. O agente tratará da execução do código Python e da organização da informação recolhida.

Conclusão

O web scraping é uma técnica indispensável para quem trabalha com análise de dados e automação digital. Ao adotar uma postura ética — consultando o robots.txt, identificando a origem dos pedidos e controlando o ritmo das requisições —, garantes que a tua recolha de informação é feita de forma sustentável e transparente.

Combinar scripts Python eficientes com o poder do Hermes Agent eleva estas tarefas a um novo nível, permitindo agendar, processar e analisar dados de forma totalmente autónoma.

Se queres aprofundar os teus conhecimentos na criação de agentes inteligentes, automações avançadas e construção de skills personalizadas em Python, podes consultar o Guia Completo do Hermes Agent, um recurso prático para dominar esta plataforma de automação.

Comentários