如何用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接口异步加载,无需依赖浏览器模拟,直接请求接口速度更快:
- 打开浏览器开发者工具(F12)→ 切换到「Network」标签,刷新页面后,在XHR/Fetch分类下查找包含
lyric或subtitle的请求,复制其接口URL。 - 用
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
相关产品推荐
相关产品推荐

