我正在尝试使用YouTube评论进行文本分析。我一直在使用以下网站上的代码来抓取YouTube:
https://www.pingshiuanchua.com/blog/post/using-youtube-api-to-analyse-youtube-comments-on-python
该脚本开始工作,但是如果禁用了注释,则代码的一部分会生成错误,并且我找不到一种方法来查看是否禁用了注释或注释是否存在,并且无法跳过该视频如果没有任何留言要刮,请继续播放下一个视频。
有问题的代码创建错误是:
# =============================================================================
# Get Comments of Top Videos
# =============================================================================
video_id_pop = []
channel_pop = []
video_title_pop = []
video_desc_pop = []
comments_pop = []
comment_id_pop = []
reply_count_pop = []
like_count_pop = []
from tqdm import tqdm
for i, video in enumerate(tqdm(video_id, ncols = 100)):
response = service.commentThreads().list(
part = 'snippet',
videoId = video,
maxResults = 100, # Only take top 100 comments...
order = 'relevance', #... ranked on relevance
textFormat = 'plainText',
).execute()
comments_temp = []
comment_id_temp = []
reply_count_temp = []
like_count_temp = []
for item in response['items']:
comments_temp.append(item['snippet']['topLevelComment']['snippet']['textDisplay'])
comment_id_temp.append(item['snippet']['topLevelComment']['id'])
reply_count_temp.append(item['snippet']['totalReplyCount'])
like_count_temp.append(item['snippet']['topLevelComment']['snippet']['likeCount'])
comments_pop.extend(comments_temp)
comment_id_pop.extend(comment_id_temp)
reply_count_pop.extend(reply_count_temp)
like_count_pop.extend(like_count_temp)
video_id_pop.extend([video_id[i]]*len(comments_temp))
channel_pop.extend([channel[i]]*len(comments_temp))
video_title_pop.extend([video_title[i]]*len(comments_temp))
video_desc_pop.extend([video_desc[i]]*len(comments_temp))
query_pop = [query] * len(video_id_pop)
编辑添加:创建代码的人留下了一条消息来纠正该错误:
“您可以将代码的查询部分包装在try ... except语句中,如果try语句(查询部分)失败,则可以将空白响应或“错误”字符串以外的内容推送到列表中。”
我对NFI有帮助的人(如果对其他人有意义)如何执行此操作...
最佳答案
注意:这不一定是“好的”编码风格,但是如果我在为自己的短期个人使用编写脚本时遇到此问题,那将是我要做的事情。
Python(和许多其他语言)具有捕获异常并处理它们而不会崩溃的方法。如果使用得当,这可能是处理不良数据的一种很好的方法。
https://docs.python.org/3.8/tutorial/errors.html是一个很好的异常(exception)概述。通常,它们采用的格式类似于
try:
code_that_can_error()
except ExceptionThatWIllBeThrown as ex:
handle_exception()
print(ex) # ex is an object that has information about what went wrong
finally:
clean_up()
(最后,如果需要调用某些东西(例如文件),则特别有用。如果引发了异常,则可能不会关闭它,但是即使引发了异常,也保证可以调用finally。)在您的情况下,我们所需要做的就是忽略该错误并继续播放下一个视频。
for i, video in enumerate(tqdm(video_id, ncols = 100)):
try:
response = service.commentThreads().list(
part = 'snippet',
videoId = video,
maxResults = 100, # Only take top 100 comments...
order = 'relevance', #... ranked on relevance
textFormat = 'plainText',
).execute()
comments_temp = []
[...]
video_desc_pop.extend([video_desc[i]]*len(comments_temp))
except:
# Something threw an error. Skip that video and move on
print(f"{video} has comments disabled, or something else went wrong")
query_pop = [query] * len(video_id_pop)
关于python - 使用Python分析YouTube评论-参数已禁用评论,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63617007/