如何从YouTube播放列表转录提取文本并存入GetText变量?
提取YouTube播放列表视频转录文本的解决方案
已通过API获取到目标播放列表的视频ID及对应转录内容,srt列表中每个元素为以视频ID为键、转录字典列表为值的字典(原代码中需先修正get_transcripts返回值的处理逻辑)。以下是提取所有text字段并拼接为GetText变量的完整实现:
修正后的完整代码
from googleapiclient.discovery import build from youtube_transcript_api import YouTubeTranscriptApi import os api_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" nextPageToken = None srt = [] vid_ids = [] vid_title = [] while True: # 1. 调用API获取播放列表项 rq = build("youtube", "v3", developerKey=api_key).playlistItems().list( part="contentDetails, snippet", playlistId="PLNIs-AWhQzckr8Dgmgb3akx_gFMnpxTN5", maxResults=50, pageToken=nextPageToken ).execute() # 2. 收集视频ID和标题 for item in rq["items"]: vid_ids.append(item["contentDetails"]["videoId"]) vid_title.append(item["snippet"]["title"]) nextPageToken = rq.get('nextPageToken') if not nextPageToken: break # 3. 获取转录内容(修正:正确处理get_transcripts的返回值) for i in vid_ids: try: # get_transcripts返回(成功转录字典, 失败ID列表),仅保留成功部分 successful_transcripts, _ = YouTubeTranscriptApi.get_transcripts([i]) srt.append(successful_transcripts) except Exception as e: print(f"{i} 无法获取转录内容: {str(e)}") # 4. 提取所有text字段并拼接 # 方法1:循环遍历拼接(可读性强) GetText = "" for transcript_dict in srt: for transcript_list in transcript_dict.values(): for entry in transcript_list: GetText += entry["text"] + " " # 方法2:列表推导式(简洁高效) # GetText = " ".join([entry["text"] for transcript_dict in srt for transcript_list in transcript_dict.values() for entry in transcript_list]) print(GetText)
关键说明
- 返回值修正:
YouTubeTranscriptApi.get_transcripts()返回的是元组,原代码直接存入元组会导致后续遍历异常,修正后仅提取成功的转录字典存入srt。 - 文本提取逻辑:通过三层遍历依次处理
srt中的视频转录字典、转录条目列表、单个转录条目,提取text字段并完成拼接,两种实现方式效果一致。
内容的提问来源于stack exchange,提问作者José Angel Bernal
相关产品推荐
相关产品推荐

