Поскольку вы упоминаете 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 обеспечивает удобный метод, список(), который возвращает список комментариев, пройденных в том же порядке, что и код выше. Таким образом, выше, можно переписать так:
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, ...]
В этом случае не так сложно разбить их на основе идентификаторов и parent_ids.
Да, мне нужно будет прочитать 4.0 документа. Благодаря!! – nighthowler