You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python和telebot实现Telegram机器人提取链接预览文本

解决Telegram机器人提取链接预览文本的问题

核心说明

Telegram Bot API不会主动返回链接预览的文本内容——因为预览是Telegram服务器生成的,不会把提取到的文本传递给机器人。要实现需求,需要自己对用户发送的URL进行网页抓取和内容解析。

具体实现步骤

1. 从消息中提取URL

先用telebot捕获用户消息,通过正则表达式从message.text里匹配出URL:

import re
import telebot

bot = telebot.TeleBot("你的机器人Token")

def extract_urls(text):
    # 匹配http/https开头的链接
    url_pattern = re.compile(r'https?://\S+')
    return url_pattern.findall(text)

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    urls = extract_urls(message.text)
    if not urls:
        bot.reply_to(message, "请发送包含URL的消息")
        return
    # 优先处理第一个URL(多URL场景可循环处理)
    target_url = urls[0]
    # 后续步骤:抓取网页内容

2. 抓取网页并提取预览文本

使用requests获取网页内容,再用BeautifulSoup解析HTML,提取Telegram预览会展示的标题、描述等核心文本:

import requests
from bs4 import BeautifulSoup

def get_preview_text(url):
    try:
        # 设置请求头模拟浏览器,避免被反爬拦截
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
        }
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()  # 捕获HTTP请求错误
        soup = BeautifulSoup(response.text, 'html.parser')
        
        # 提取页面标题
        title = soup.title.string.strip() if soup.title else "无标题"
        # 提取页面描述(对应meta标签的description字段)
        description = ""
        meta_desc = soup.find('meta', attrs={'name': 'description'})
        if meta_desc and meta_desc.get('content'):
            description = meta_desc['content'].strip()
        
        # 组合成预览文本
        return f"标题: {title}\n描述: {description}"
    except Exception as e:
        return f"无法获取预览内容: {str(e)}"

3. 整合机器人逻辑

将上述功能整合到消息处理流程中:

@bot.message_handler(func=lambda message: True)
def handle_message(message):
    urls = extract_urls(message.text)
    if not urls:
        bot.reply_to(message, "请发送包含URL的消息")
        return
    target_url = urls[0]
    preview_text = get_preview_text(target_url)
    bot.reply_to(message, preview_text)

# 启动机器人
bot.polling()

注意事项

  • 先安装依赖包:pip install pytelegrambotapi requests beautifulsoup4
  • 部分网站有反爬机制,若遇到403/404错误,可尝试更换User-Agent或添加代理
  • 务必处理超时和异常,避免单个请求失败导致机器人崩溃

内容的提问来源于stack exchange,提问作者Валентин Резаков

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:33:22