python - 使用Python分析YouTube评论-参数已禁用评论

标签 python youtube nlp

我正在尝试使用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/

相关文章:

python - 如何通过在字符串中使用\u 或\U 转义来正确表示 python3 (3.6.1+) 中的补充 unicode 字符

python - 在 Clearcase 中获取当前工作 View

jquery - YouTube 视频播放和暂停取决于 jquery 帧的可见性

regex - 如何从用户输入的句子中检测谁、什么、何时、何地

machine-learning - 通过全名检测性别

python - 创建具有额外功能的自定义 namedtuple 类型

Python igraph 顶点索引

php - YouTube API v3获取视频-PHP

video - 文件上传问题

python - 在 Python 中扩展英语语言收缩