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-Agentpersonalizado 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