探索PRAW中特定深度的评论?

时间:2016-12-01 09:29:47

标签: python praw reddit

有没有办法限制reddit上特定帖子的评论探索深度。我们有replace_more_comments尝试替换尽可能多的more_comments但我们可以限制此扩展。或者我是否需要在这些评论上编写自己的dfs版本?

由于

1 个答案:

答案 0 :(得分:2)

因为你提到replace_more_comments我假设你在谈论PRAW 3.5。

可悲的是,PRAW不提供comment.depth形式的信息。它实际上并没有将这些信息保存在任何地方。

如果你想得到一个设定的评论深度,这个评论很低(只有一级和二级评论),那么你可以不用dfs或bfs来做。

submission.replace_more_comments(limit=None,threshold=0)
for top_level_comment in submission.comments:
    for second_level_comment in top_level_comment.replies:
        print(second_level_comment.body)

如果您想要非固定深度,那么您将拥有自己的实现。但是由于如何设置和从reddit api检索注释,你应该使用bfs而不是dfs。

还有另一种方法,即在PRAW 4.0中使用它(昨天发布)。 Here是我所指的文档的特定部分:

submission.comments.replace_more(limit=0)
comment_queue = submission.comments[:]  # Seed with top-level
while comment_queue:
    comment = comment_queue.pop(0)
    print(comment.body)
    comment_queue.extend(comment.replies)
  

尽管能够进行自己的广度优先遍历真是太棒了,但是CommentForest提供了一个方便的方法list(),它以与上面代码相​​同的顺序返回遍历的注释列表。因此,上述内容可以改写为:

submission.comments.replace_more(limit=0)
for comment in submission.comments.list():
    print(comment.body)

从这里你收到一份评论列表,以便bfs给你。

[first_level_comment, first_level_comment, first_level_comment, second_level_comment, 
second_level_comment, third_level_comment, ...]

在这种情况下,基于id和parent_id拆分它们并不复杂。