Получение дочерних комментариев к комментарию на Reddit с помощью Praw в Python

Я использую praw для сбора информации из ветки Reddit. Я могу использовать r.get_submission(thread).comments, чтобы дать мне все комментарии в потоке, но теперь я хочу перебрать все эти комментарии и получить дочерние комментарии.

Вот что у меня есть:

r = praw.Reddit(user_agent="archiver v 1.0")
thread = "https://www.reddit.com/r/AskReddit/comments/4h4o7s/what_do_you_regret_doing_at_university/"
r.login(settings['username'], settings['password'], disable_warning=True)
submission = r.get_submission(thread)

for comment in submission.comments:
    #this works, prints out the comments text
    print(comment.body)

    #now i want to get the child comments that are replied to this comment
    commentSubmission = r.get_submission(comment.permalink)
    #ideally comments[0] should show me first reply, comments[1] the second. etc
    print(commentSubmission.comments[1])

Это выкидывает IndexError: list index out of range. Я использую метод попытки получить комментарий как отправку, потому что он похож на решение, которое я видел здесь, когда исследовал https://www.reddit.com/r/redditdev/comments/1kxd1n/how_can_i_get_the_replies_to_a_comment_with_praw/

Мой вопрос: учитывая объект praw comment, как я могу просмотреть все дочерние комментарии, являющиеся ответами? Я хочу получить все комментарии, которые являются прямыми ответами на другой объект комментария.

Например, в примере потока в моей программе первый комментарий - Not going out freshman year Я хочу получить комментарии ответа, такие как Meh, I never went out at all in college. и Your story sounds identical to mine


person Keatinge    schedule 01.05.2016    source источник


Ответы (1)


Это просто, как comment.replies, оно возвращает тот же тип итерации, что и submission.comments с объектами Comment и MoreComments, последний - для большего количества комментариев на том же уровне.

Пример кода:

submission = r.get_submission(thread)
process_comments(submission.comments)

def process_comments(objects):
    for object in objects:
        if type(object).__name__ == "Comment":
            process_comments(object.replies) # Get replies of comment

            # Do stuff with comment (object)

        elif type(object).__name__ == "MoreComments":
            process_comments(object.comments()) # Get more comments at same level
person Mikeyjd25    schedule 11.05.2016