YouTube频道统计匹配异常求助:API调用后数据重复问题
解决YouTube Data API统计字段重复问题
调用YouTube Data API时,首次获取视频片段数据,二次调用获取多个视频统计数据并整合到原循环后,存入pandas DataFrame发现播放量、点赞量等统计字段出现重复值。问题出在始终取response_2['items'][0],但移除[0]会报错,以下是修正方案:
问题根源
原代码每次固定取统计API返回结果的第一个视频数据,导致所有视频复用同一组统计值;同时统计数据未与对应的视频片段数据关联,直接移除[0]会因response_2['items']是列表类型,无法直接访问statistics字段而报错。
修正思路
- 先批量收集所有目标视频的片段数据和对应的
video_id,存储到列表中 - 将所有需要查询的
video_id批量传给统计API,一次获取所有统计数据 - 把统计数据转换为以
video_id为键的字典,方便快速匹配对应视频 - 遍历片段数据列表,通过
video_id匹配对应的统计数据,最终整合为完整数据集
修正后的代码
import requests import pandas as pd # 替换为你的API密钥 API_KEY = "YOUR_API_KEY" # 第一步:收集所有视频的基础片段数据 snippet_data = [] for video in response['items']: if video['id']['kind'] == "youtube#video": video_id = video['id']['videoId'] video_title = video['snippet']['title'] video_description = video['snippet']['description'] channel_title = video['snippet']['channelTitle'] date_upload = video['snippet']['publishedAt'].split('T')[0] # 将单条视频数据存入列表 snippet_data.append({ 'video_id': video_id, 'title': video_title, 'description': video_description, 'channel_title': channel_title, 'upload_date': date_upload }) # 第二步:批量获取统计数据 # 提取所有需要查询的video_id video_ids = [item['video_id'] for item in snippet_data] # 构建统计API请求URL video_stats_url = f"https://www.googleapis.com/youtube/v3/videos?part=statistics&key={API_KEY}" for vid in video_ids: video_stats_url += f"&id={vid}" # 发送请求并解析响应 response_2 = requests.get(video_stats_url).json() # 将统计数据转为字典,key为video_id,value为统计信息 stats_dict = {} for item in response_2['items']: vid = item['id'] stats = item['statistics'] stats_dict[vid] = { 'view_count': int(stats.get('viewCount', 0)), 'like_count': int(stats.get('likeCount', 0)), 'favorite_count': int(stats.get('favoriteCount', 0)), 'comment_count': int(stats.get('commentCount', 0)) } # 第三步:整合基础数据与统计数据 final_data = [] for item in snippet_data: vid = item['video_id'] # 匹配对应统计数据,无数据则用默认值填充 stats = stats_dict.get(vid, { 'view_count': 0, 'like_count': 0, 'favorite_count': 0, 'comment_count': 0 }) # 合并两类数据 final_item = {**item, **stats} final_data.append(final_item) # 转为pandas DataFrame df = pd.DataFrame(final_data) print(df.head())
关键修改说明
- 批量收集基础数据:避免循环内重复操作,统一存储所有视频的基础信息
- 统计数据字典化:通过
video_id作为键,实现O(1)时间复杂度的匹配,彻底解决重复值问题 - 安全取值:用
get()方法获取统计字段,避免部分视频缺失字段导致报错 - 数据对应整合:确保每条视频的基础数据与统计数据一一匹配
内容的提问来源于stack exchange,提问作者Quadri
相关产品推荐
相关产品推荐

