Você já sentiu a necessidade de acompanhar notícias de um site específico sem ter que abrir o navegador a cada cinco minutos? Criar um Web Scraper de notícias e enviar para o Telegram é uma das formas mais eficientes de colocar a Python para automação em prática. Neste guia completo, vamos construir do zero um robô capaz de ler as principais manchetes de um portal e enviar alertas diretamente para o seu celular. Essa técnica é fundamental para profissionais que precisam de monitoramento em tempo real ou entusiastas que desejam aprender como as máquinas interpretam a web.
O que é Web Scraping e por que usar Python?
O Web Scraping, ou raspagem de dados, é o processo de extrair informações de sites de forma automatizada. Em vez de copiar e colar manualmente, criamos um script que simula a navegação humana e coleta apenas o que nos interessa, como títulos, links ou preços. Python se tornou a linguagem favorita para essa tarefa devido à sua sintaxe limpa e ao ecossistema rico de bibliotecas em Python especializadas em processamento de HTML.
Links importantes para aprofundamento externo:
- Consulte a documentação oficial da BeautifulSoup para entender a árvore de nós do HTML.
- Aprenda mais sobre o protocolo HTTP na MDN Web Docs.
Configurando o Ambiente de Desenvolvimento
Antes de escrevermos a primeira linha de código, precisamos preparar o terreno. É altamente recomendável que você utilize um ambiente virtual venv no Python para manter as dependências do projeto organizadas e evitar conflitos com outros scripts no seu sistema.
Abra o seu terminal e execute os seguintes comandos para instalar as ferramentas necessárias:
pip install requests
pip install beautifulsoup4
pip install python-dotenvA biblioteca requests é responsável por fazer a requisição ao site, enquanto a beautifulsoup4 faz o “parse” (análise) do conteúdo HTML para que possamos encontrar as tags específicas. Já a python-dotenv ajuda a gerenciar chaves de API com segurança, evitando que você exponha seu token do Telegram publicamente.
Criando o Bot no Telegram
Para enviar as notícias, você precisa de um “mensageiro”. O Telegram facilita muito esse processo através do BotFather. Siga estes passos:
- Abra o Telegram e procure por @BotFather.
- Digite o comando
/newbote siga as instruções para dar um nome e um username ao seu robô. - Ao final, você receberá um Token de API. Guarde este código, ele é a chave de acesso do seu bot.
- Inicie uma conversa com seu novo bot e envie qualquer mensagem.
- Para descobrir seu Chat ID (necessário para o script saber para quem enviar), acesse a URL
https://api.telegram.org/bot<SEU_TOKEN>/getUpdatesno seu navegador e procure pelo campo “id” dentro do bloco “chat”.
Se você tiver dificuldades nessa etapa, recomendo ler nosso guia sobre como criar um bot para telegram com python para detalhes visuais.
Estruturando o Raspador de Notícias
Agora que temos o bot pronto, vamos focar na extração dos dados. Neste exemplo, vamos simular a captura de um portal de notícias genérico. O segredo do Web Scraping está em identificar o padrão das tags HTML do site alvo. Na maioria das vezes, as manchetes estão dentro de tags <h2> ou <a> com uma classe específica.
Fazendo a Requisição HTTP
O primeiro passo é obter o código-fonte da página. Utilizamos a biblioteca requests para isso. É importante sempre verificar o status da conexão para evitar erros inesperados.
import requests
from bs4 import BeautifulSoup
url = "https://exemplo-noticias.com"
resposta = requests.get(url)
if resposta.status_code == 200:
print("Conexão bem-sucedida!")
html = resposta.text
else:
print("Erro ao acessar o site.")Limpando e Filtrando os Dados
Com o HTML em mãos, usamos a BeautifulSoup para encontrar os elementos. Vamos supor que as notícias estejam em tags <h3> com a classe “titulo-noticia”. Se você encontrar problemas de visualização de caracteres, verifique se precisa resolver erros codificacao utf-8 python no seu terminal.
soup = BeautifulSoup(html, 'html.parser')
noticias = soup.find_all('h3', class_='titulo-noticia')
lista_mensagens = []
for noticia in noticias:
titulo = noticia.get_text().strip()
link = noticia.find('a')['href']
lista_mensagens.append(f"{titulo}\nLeia mais: {link}")Conectando o Scraper ao Telegram
Com a lista de notícias pronta, precisamos enviá-la. A API do Telegram funciona através de requisições web simples. Para uma melhor organização de código, utilize funções em python para separar a lógica de envio da lógica de raspagem.
def enviar_telegram(mensagem):
token = "SEU_TOKEN_AQUI"
chat_id = "SEU_CHAT_ID_AQUI"
api_url = f"https://api.telegram.org/bot{token}/sendMessage"
dados = {
"chat_id": chat_id,
"text": mensagem,
"parse_mode": "Markdown"
}
return requests.post(api_url, data=dados)Automatizando o Processo
Um rastreador de notícias só é útil se rodar sozinho. Você pode configurar seu script para rodar a cada hora. Para isso, você pode usar um while em python com um temporizador ou agendar uma tarefa no Windows/Linux. Para quem busca maior estabilidade, colocar o rodar script python docker é a solução profissional para garantir que o bot nunca pare.
Código Completo do Projeto
Abaixo está o código unificado. Lembre-se de substituir os placeholders pelo seu Token e Chat ID reais, e ajustar as tags HTML de acordo com o portal que você deseja monitorar.
import requests
from bs4 import BeautifulSoup
import time
# Configurações do Telegram
TOKEN = "SEU_TOKEN_AQUI"
CHAT_ID = "SEU_CHAT_ID_AQUI"
def extrair_noticias(url_alvo):
"""Extrai manchetes de um site de notícias."""
try:
headers = {'User-Agent': 'Mozilla/5.0'}
resposta = requests.get(url_alvo, headers=headers)
soup = BeautifulSoup(resposta.content, 'html.parser')
# Ajuste estas tags conforme o site escolhido
postagens = soup.find_all('h2', limit=5)
resultados = []
for post in postagens:
texto = post.get_text().strip()
link = post.find('a')['href'] if post.find('a') else "Link não disponível"
resultados.append(f"<b>Notícia:</b> {texto}\n<a href="{link}">Clique aqui para ler</a>")
return resultados
except Exception as e:
print(f"Erro na extração: {e}")
return []
def enviar_para_telegram(mensagem):
"""Envia uma mensagem formatada para o bot do Telegram."""
url_api = f"https://api.telegram.org/bot{TOKEN}/sendMessage"
payload = {
"chat_id": CHAT_ID,
"text": mensagem,
"parse_mode": "HTML"
}
requests.post(url_api, data=payload)
def executar_bot():
"""Loop principal de execução."""
url = "https://g1.globo.com" # Exemplo de site
print("Iniciando monitoramento...")
noticias = extrair_noticias(url)
if noticias:
for noticia in noticias:
enviar_para_telegram(noticia)
time.sleep(2) # Evita spam e bloqueio da API
print("Notícias enviadas com sucesso!")
else:
print("Nenhuma notícia encontrada.")
if __name__ == "__main__":
executar_bot()Considerações Éticas e Legais
Ao criar um Web Scraper de notícias e enviar para o Telegram, é vital respeitar o arquivo robots.txt do site original. Esse arquivo indica quais partes do site podem ou não ser acessadas por robôs. Além disso, não faça requisições em intervalos muito curtos (milissegundos), pois isso pode sobrecarregar o servidor do portal e resultar no banimento do seu IP. O uso de cabeçalhos (headers) que simulam um navegador real ajuda a evitar bloqueios de segurança.
Perguntas Frequentes
Meu script retorna uma lista vazia, o que fazer?
Isso geralmente acontece porque as classes ou IDs das tags HTML mudaram ou o site usa carregamento dinâmico via JavaScript. Verifique o código-fonte no navegador (F12) e atualize os seletores no seu código.
É possível enviar imagens junto com a notícia?
Sim! A API do Telegram possui o endpoint /sendPhoto. Você precisaria capturar a URL da imagem com o Scraper e enviá-la usando esse método específico da API.
O Telegram pode banir meu bot por spam?
Se você enviar centenas de mensagens por minuto, sim. O ideal é manter um intervalo de pelo menos 1 a 2 segundos entre cada mensagem e enviar apenas as atualizações mais importantes.
Posso rodar esse script na nuvem de graça?
Sim, plataformas como Google Cloud (nível gratuito), Heroku ou GitHub Actions permitem a execução agendada de scripts Python sem custos iniciais elevados.
Como filtrar apenas notícias com palavras-chave específicas?
Dentro do seu loop for, você pode adicionar uma estrutura if-elif-e-else no python para verificar se um termo (como “futebol” ou “economia”) está presente no título antes de enviar para o Telegram.
Como evitar o envio de notícias repetidas?
O ideal é salvar o link das notícias já enviadas em um banco de dados simples como o SQLite ou um arquivo TXT. Antes de enviar, o script verifica se aquele link já existe na lista de “enviados”.
O que fazer se o site exigir login?
Para sites com login, você pode precisar usar a biblioteca Selenium em vez de BeautifulSoup, pois ela consegue interagir com formulários e clicar em botões como um usuário real.
A biblioteca Requests é a melhor para isso?
Para sites simples, sim. Para projetos que exigem alta performance e milhares de requisições simultâneas, você deve considerar o uso de asyncio no python para processamento assíncrono.
Agora que você domina as bases da extração de dados e integração com o Telegram, o próximo passo é expandir este projeto. Você poderia, por exemplo, integrar uma análise de sentimento nas manchetes ou criar um banco de dados histórico para acompanhar tendências de assuntos ao longo do mês.







