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

如何使用Python通过链接下载Tenor GIF动图

解决Tenor及普通GIF链接的统一下载问题

问题说明

我使用以下代码下载GIF:

import requests
url = 'GIF-URL'
with open('downloaded.gif', 'wb') as f:
  f.write(requests.get(url).content)

这段代码对普通GIF链接有效,但无法下载Tenor的GIF。试过Tenor API(无通过链接直接下载的端点)、urllib.request和wget.download()都不行,现有tenor-dl库仅支持终端使用,需要代码实现的方案,能同时处理Tenor链接(如https://tenor.com/view/thumbs-up-double-thumbs-up-like-agreed-yup-gif-11663223)和普通GIF链接。

解决方案

Tenor网页URL返回的是HTML页面而非GIF内容,核心思路是解析页面HTML提取真实的GIF源地址,再统一执行下载操作。

实现步骤

  1. 区分链接类型:判断是否为Tenor链接
  2. 解析Tenor页面:用HTML解析工具提取页面中的GIF真实地址
  3. 统一下载:对提取到的真实GIF地址或普通GIF链接执行下载保存

代码实现

首先安装依赖库:

pip install beautifulsoup4

完整代码:

import requests
from bs4 import BeautifulSoup

def download_gif(url, save_path='downloaded.gif'):
    # 定义请求头,避免被反爬拦截
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
    }

    # 处理Tenor链接
    if 'tenor.com/view' in url:
        # 获取页面HTML内容
        page_response = requests.get(url, headers=headers)
        soup = BeautifulSoup(page_response.text, 'html.parser')
        
        # 尝试从img标签提取GIF地址
        gif_img = soup.find('img', class_='Gif')
        if gif_img:
            gif_url = gif_img['src']
        else:
            # 备用:从video标签的source提取地址
            video_tag = soup.find('video', class_='Gif')
            if not video_tag or not video_tag.find('source'):
                raise ValueError("无法从Tenor页面提取GIF源地址")
            gif_url = video_tag.find('source')['src']
        
        # 下载GIF
        gif_response = requests.get(gif_url, headers=headers)
    else:
        # 处理普通GIF链接
        gif_response = requests.get(url, headers=headers)
    
    # 保存文件
    with open(save_path, 'wb') as f:
        f.write(gif_response.content)
    print(f"GIF已成功保存至:{save_path}")

# 测试示例
if __name__ == '__main__':
    # 测试Tenor链接
    tenor_gif_url = 'https://tenor.com/view/thumbs-up-double-thumbs-up-like-agreed-yup-gif-11663223'
    download_gif(tenor_gif_url, 'double_thumbs_up.gif')

    # 测试普通GIF链接(替换为实际有效链接)
    normal_gif_url = 'https://i.imgur.com/example.gif'
    download_gif(normal_gif_url, 'normal_example.gif')

代码说明

  • 添加User-Agent请求头,避免被Tenor的反爬机制拦截
  • 优先从class为Gif的img标签提取地址,若失败则从video标签的source节点提取(适配Tenor不同的资源加载方式)
  • 函数自动识别链接类型,统一处理下载逻辑,无需区分调用

内容的提问来源于stack exchange,提问作者Baby Yoda

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 20:23:28