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

youtube.com/channels页面链接加载机制及批量获取订阅频道咨询

YouTube订阅频道列表加载机制与批量获取方法

一、滚动加载的实现机制

YouTube采用**懒加载(动态异步加载)**机制,不会将所有订阅频道一次性放在初始页面中:

  • 初始页面仅渲染前10个频道的内容,同时在页面中嵌入用于后续加载的分页标记(continuation token)。
  • 当滚动到页面底部时,前端JS会触发异步请求(XHR/Fetch),将分页标记发送到YouTube内部后端接口,后端根据标记返回下一批10个频道的结构化数据(多为JSON格式),前端再将这些数据渲染到页面上。
  • 所有后续加载的频道数据都来自内部API接口,而非单独的页面。

二、获取所有订阅频道的可行方法

1. 模拟浏览器滚动(Selenium)

通过控制浏览器模拟人工滚动,触发所有频道的加载,再解析页面元素提取链接:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 初始化浏览器
driver = webdriver.Chrome()
driver.get("https://www.youtube.com/anyuser/channels")

# 循环滚动直到没有新内容
last_scroll_height = driver.execute_script("return document.documentElement.scrollHeight")
while True:
    # 滚动到底部
    driver.execute_script("window.scrollTo(0, document.documentElement.scrollHeight);")
    # 等待加载完成(时间可根据网络调整)
    time.sleep(3)
    current_scroll_height = driver.execute_script("return document.documentElement.scrollHeight")
    # 高度不变说明加载完毕
    if current_scroll_height == last_scroll_height:
        break
    last_scroll_height = current_scroll_height

# 提取所有频道链接
channel_links = driver.find_elements(By.XPATH, '//a[@id="channel-link"]')
for link in channel_links:
    print(link.get_attribute("href"))

driver.quit()

2. 解析内部API请求

通过浏览器开发者工具抓包分析滚动时的异步请求,直接模拟这些请求批量获取数据:

  • 打开目标页面后按F12进入开发者工具,切换到Network标签,筛选XHR/Fetch类型请求。
  • 滚动页面,找到带有continuation参数的请求,分析其请求头、参数格式和返回的JSON结构。
  • 用requests库循环发送请求,每次带上上一次返回的continuation token,直到返回结果中没有新的token为止。
  • 注意:这类内部API无公开文档,参数和格式可能随时变动,需要自行维护抓包逻辑。

3. 使用YouTube Data API(官方方案)

官方API默认返回6条结果,但可通过分页参数获取全部公开订阅:

import googleapiclient.discovery

# 替换为你的API密钥和目标用户频道ID
DEVELOPER_KEY = "你的API密钥"
TARGET_CHANNEL_ID = "目标用户的频道ID"

youtube = googleapiclient.discovery.build(
    "youtube", "v3", developerKey=DEVELOPER_KEY
)

all_subscriptions = []
next_page_token = None

while True:
    request = youtube.subscriptions().list(
        part="snippet",
        channelId=TARGET_CHANNEL_ID,
        maxResults=50,  # 单次请求最大返回数
        pageToken=next_page_token
    )
    response = request.execute()
    all_subscriptions.extend(response["items"])
    
    next_page_token = response.get("nextPageToken")
    if not next_page_token:
        break

# 输出频道信息
for item in all_subscriptions:
    channel_title = item["snippet"]["title"]
    channel_id = item["snippet"]["resourceId"]["channelId"]
    print(f"{channel_title}: https://www.youtube.com/channel/{channel_id}")
  • 注意:使用官方API需申请密钥,有请求配额限制;仅能获取用户设置为公开的订阅列表,私有订阅无法获取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 08:48:20