Telegram机器人是否可运行Python脚本?如何实现爬取网站图片并推送?
方案可行性判断
你设计的实现方案完全可行,无需额外使用Telegram官方的专属功能,只要符合Telegram Bot API的调用规则,推送的图片在移动端、桌面端、网页端都可以正常显示。
实现注意事项
- 爬虫模块:使用BeautifulSoup解析页面提取图片URL的逻辑没有问题,需要注意两点:一是要匹配目标网站的反爬规则,添加合规的请求头、控制爬取频率,避免被目标网站封禁;二是要处理相对路径的图片URL,补全域名前缀后再调用发送接口。
- 发送模块:
bot.send_photo(chat_id, 图片URL)是Telegram Bot API原生支持的调用方式,调用后由Telegram官方服务器拉取对应URL的图片资源再推送给你的账号,不存在移动端兼容问题。 - 异常&限流处理:
- 爬取的URL可能存在失效、图片格式不被Telegram支持的情况,要添加异常捕获逻辑,避免单张图片发送失败导致整个推送任务中断
- Telegram官方对机器人接口调用有频率限制,单机器人每分钟发送消息不能超过20条,批量推送图片时建议每发送1张添加2~3秒的等待间隔,避免触发限流被临时封禁接口权限。
参考实现代码
import time import requests from bs4 import BeautifulSoup from telegram import Bot # 配置参数 BOT_TOKEN = "你的Telegram机器人令牌" TARGET_CHAT_ID = "接收推送的聊天ID" CRAWL_TARGET_URL = "需要爬取图片的目标网站地址" # 初始化机器人实例 bot = Bot(token=BOT_TOKEN) def crawl_image_urls(target_url: str) -> list: 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" } resp = requests.get(target_url, headers=headers, timeout=10) resp.encoding = resp.apparent_encoding soup = BeautifulSoup(resp.text, "lxml") raw_img_urls = [img.attrs.get("src") for img in soup.find_all("img") if img.attrs.get("src")] # 补全相对路径URL processed_urls = [] for url in raw_img_urls: if url.startswith(("http://", "https://")): processed_urls.append(url) else: processed_urls.append(f"{target_url.rstrip('/')}/{url.lstrip('/')}") return processed_urls def push_images(img_urls: list): for idx, url in enumerate(img_urls): try: bot.send_photo(chat_id=TARGET_CHAT_ID, photo=url) print(f"第{idx+1}张图片推送成功") time.sleep(3) except Exception as e: print(f"第{idx+1}张图片推送失败,URL:{url}, 错误信息:{str(e)}") if __name__ == "__main__": img_urls = crawl_image_urls(CRAWL_TARGET_URL) push_images(img_urls)
内容的提问来源于stack exchange,提问作者Miguel Arrieche
相关产品推荐
相关产品推荐

