我希望能够迭代帖子中的评论,最高可达 n
级别,并记录每个评论及其深度。不过,我认为在 Praw 中没有办法轻松做到这一点。
我想做这样的事情:
def get_post_comments(post, comment_limit):
comments = []
post.comments.replace_more(limit=comment_limit)
for comment in post.comments.list():
# do something
return [comment.body, comment_depth]
但我不确定如何获得评论的深度。
您使用 post.comments.list()
,PRAW 文档对此进行了解释 returns a flattened list of the comments 。出于您的目的,由于您关心深度,因此您不需要一个平面列表!您想要原始的未展平的 CommentForest
。
使用递归,我们可以使用生成器通过深度优先遍历来访问此森林中的评论:
def process_comment(comment, depth=0):
"""Generate comment bodies and depths."""
yield comment.body, depth
for reply in comment.replies:
yield from process_comment(reply, depth + 1)
def get_post_comments(post, more_limit=32):
"""Get a list of (body, depth) pairs for the comments in the post."""
comments = []
post.comments.replace_more(limit=more_limit)
for top_level in post.comments:
comments.extend(process_comment(top_level))
return comments
或者,您可以在不使用递归的情况下执行广度优先遍历(我们也可以在不使用递归的情况下执行深度优先,显式使用堆栈)作为 PRAW documentation explains — 请参阅以“但是,评论森林可以任意深......”开头的部分。
我是一名优秀的程序员,十分优秀!