Вместо того, чтобы использовать replace_more
, просто замените каждый MoreComments
объект по мере его поступления. Это предотвратит замену любых MoreComments
объектов, которые не находятся на верхнем уровне.
Ниже приведена функция, которая будет перебирать комментарии верхнего уровня, заменяя каждый MoreComments
при его обнаружении. Это основано на примере кода из документации PRAW :
from praw.models import MoreComments
def iter_top_level(comments):
for top_level_comment in comments:
if isinstance(top_level_comment, MoreComments):
yield from iter_top_level(top_level_comment.comments())
else:
yield top_level_comment
Этот генератор работает так, что он выдает комментарии верхнего уровня из представления, но когда он встречает MoreComments
объект, он загружает эти комментарии и рекурсивно вызывает себя. Рекурсивный вызов необходим, поскольку в больших потоках каждый объект MoreComments
содержит в конце еще один объект MoreComments
верхнего уровня.
Вот пример того, как его можно использовать:
submission = reddit.submission('fgi5bd')
for comment in iter_top_level(submission.comments):
print(comment.author)