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

如何用Selenium完整爬取视频字幕?求优化爬取方案

解决网页字幕完整爬取问题

方法一:改进Selenium脚本触发全字幕加载

网页字幕采用懒加载机制,仅在视频播放到对应位置或字幕区域被滚动时才渲染内容。可以通过模拟滚动字幕容器的方式,强制加载所有字幕:

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

driver = webdriver.Chrome()
driver.get("https://www.luyennghetienganh.com/learn-by-listening-level-1/1060-learn-english-by-listening-level-1-unit-001.html")

# 等待页面基础元素加载
time.sleep(3)

# 执行JS滚动字幕容器到底部,触发懒加载
driver.execute_script("""
    const container = document.querySelector('.rabbit-lyrics');
    container && (container.scrollTop = container.scrollHeight);
""")

# 等待新加载的字幕渲染
time.sleep(2)

# 再次滚动确保全部加载
driver.execute_script("""
    const container = document.querySelector('.rabbit-lyrics');
    container && (container.scrollTop = container.scrollHeight);
""")

time.sleep(1)

# 提取所有非空字幕行
engsubs = driver.find_elements(By.CSS_SELECTOR, "div.rabbit-lyrics__line")
full_subtitles = [line.text for line in engsubs if line.text.strip()]

print(full_subtitles)
driver.quit()

方法二:直接抓取字幕API接口(更高效)

这类网站的字幕通常通过API接口异步加载,无需依赖浏览器模拟,直接请求接口速度更快:

  1. 打开浏览器开发者工具(F12)→ 切换到「Network」标签,刷新页面后,在XHR/Fetch分类下查找包含lyric或subtitle的请求,复制其接口URL。
  2. 用requests直接请求接口提取字幕:
import requests

# 替换为实际找到的字幕API接口URL
api_url = "https://www.luyennghetienganh.com/api/lyrics/1060"
headers = {
    "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"
}

response = requests.get(api_url, headers=headers)
if response.status_code == 200:
    subtitle_data = response.json()
    # 根据实际返回的JSON结构提取字幕内容
    full_subtitles = [item["text"] for item in subtitle_data["lyrics"] if item["text"].strip()]
    print(full_subtitles)
else:
    print(f"请求失败,状态码:{response.status_code}")

内容的提问来源于stack exchange,提问作者Thanh Hoàng

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 09:37:28