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

如何使用Python获取Twitch特定频道的全部剪辑链接?

获取Twitch特定频道的剪辑链接

首先,你的现有代码有两个核心问题:一是爬取的是英雄联盟游戏分类的剪辑页面,而非特定频道的;二是抓取了页面上所有<a>标签,包含大量导航、侧边栏等无关链接。我们一步步来修改:

一、静态爬取第一页剪辑(快速实现)

先把目标URL换成特定频道的剪辑页面,比如你要爬取riotgames频道的话,URL是https://www.twitch.tv/riotgames/clips。然后筛选出仅属于剪辑的链接——Twitch的剪辑相对路径都是以/clip/开头的,我们可以据此过滤:

from bs4 import BeautifulSoup
from urllib.request import Request, urlopen

# 替换为你要爬取的频道名
CHANNEL_NAME = "riotgames"
req = Request(f"https://www.twitch.tv/{CHANNEL_NAME}/clips")
# 加上User-Agent避免被反爬拦截
req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36')

html_page = urlopen(req)
soup = BeautifulSoup(html_page, "html.parser")

clip_links = []
for link in soup.findAll('a'):
    href = link.get('href')
    # 筛选仅剪辑的链接,并拼接完整URL
    if href and href.startswith('/clip/'):
        full_link = f"https://www.twitch.tv{href}"
        clip_links.append(full_link)

# 去重(页面可能有重复的剪辑链接)
unique_clips = list(set(clip_links))
for clip in unique_clips:
    print(clip)

注意:这种方法只能获取页面初始加载的第一页剪辑,因为Twitch的剪辑是滚动动态加载的,往下翻页才会加载更多内容。

二、获取所有剪辑(稳定方案:使用Twitch API)

如果要获取频道的所有剪辑,官方API是最可靠的选择(不会被反爬,还能批量获取分页内容)。步骤如下:

  1. 先去Twitch开发者控制台申请一个Client ID(免费,注册账号即可创建应用)。
  2. 使用API先获取目标频道的broadcaster_id(因为API需要用ID而非频道名)。
  3. 调用clips端点分页获取所有剪辑。

示例代码:

import requests

# 替换为你的Client ID
CLIENT_ID = "your_client_id_here"
CHANNEL_NAME = "riotgames"

# 第一步:获取频道的broadcaster_id
headers = {"Client-ID": CLIENT_ID, "Accept": "application/vnd.twitchtv.v5+json"}
user_url = f"https://api.twitch.tv/kraken/users?login={CHANNEL_NAME}"
user_response = requests.get(user_url, headers=headers)
broadcaster_id = user_response.json()["users"][0]["_id"]

# 第二步:分页获取所有剪辑
clip_links = []
cursor = None
while True:
    clips_url = f"https://api.twitch.tv/kraken/clips/broadcaster/{broadcaster_id}"
    params = {"limit": 100}
    if cursor:
        params["cursor"] = cursor
    
    clips_response = requests.get(clips_url, headers=headers, params=params)
    clips_data = clips_response.json()
    
    # 提取剪辑链接
    for clip in clips_data["clips"]:
        clip_links.append(clip["url"])
    
    # 检查是否还有下一页
    cursor = clips_data.get("_cursor")
    if not cursor:
        break

print(f"共获取到 {len(clip_links)} 条剪辑链接")
for clip in clip_links:
    print(clip)

关键提示

  • 静态爬取适合快速测试,但容易被Twitch的反爬机制拦截,且只能拿到第一页内容。
  • API方案更稳定,支持批量获取所有历史剪辑,但需要申请Client ID,遵守Twitch的API调用限制。

内容的提问来源于stack exchange,提问作者Odd-Harald Myhren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:36:19