Как я могу составить список самых популярных комментариев в сабреддите с помощью PRAW?

Мне нужно собрать самые популярные комментарии в субреддите за все время.

Я попытался собрать все материалы и просмотреть их, но, к сожалению, количество сообщений, которые вы можете получить, ограничено 1000.

Я пробовал использовать Subreddit.get_comments, но он возвращает только 25 комментариев.

Так что я ищу способ обойти это.

Можете ли вы мне помочь?


person lumenwrites    schedule 05.09.2015    source источник


Ответы (1)


Можно использовать get_comments < / a> с параметром limit, установленным на None, чтобы получить все доступные комментарии. (По умолчанию используется сумма для учетной записи, которая обычно составляет 25). (Параметры, которые используются для get_comments, включают параметры для _ 5_, включая limit).

Однако это, вероятно, не сделает то, что вы хотите get_comments (или, точнее, /r/subreddit/comments), предлагает только список новых комментариев или новых позолоченных комментариев, а не верхние комментарии. А поскольку get_comments также ограничено 1000 комментариями, у вас возникнут проблемы с составлением полного списка самых популярных комментариев.

Итак, что вам действительно нужно, так это то, что исходный алгоритм получит список самых популярных материалов, а затем их самые популярные комментарии. Это не идеальная система (пост с низким рейтингом может иметь очень высокий комментарий), но это лучший вариант.

Вот код:

import praw

r = praw.Reddit(user_agent='top_comment_test')
subreddit = r.get_subreddit('opensource')
top = subreddit.get_top(params={'t': 'all'}, limit=25) # For a more potentially accurate set of top comments, increase the limit (but it'll take longer)
all_comments = []
for submission in top: 
    submission_comments = praw.helpers.flatten_tree(submission.comments)
    #don't include non comment objects such as "morecomments"
    real_comments = [comment for comment in submission_comments if isinstance(comment, praw.objects.Comment)]
    all_comments += real_comments

all_comments.sort(key=lambda comment: comment.score, reverse=True)

top_comments = all_comments[:25] #top 25 comments

print top_comments
person Pokechu22    schedule 12.09.2015
comment
Похоже, get_subreddit и get_top больше не входят в текущую версию praw. Чтобы это работало с последней версией, вам нужно удалить слово get: subreddit = r.subreddit('opensource') top = subreddit.top(params={'t': 'all'}, limit=25) - person jss367; 25.04.2018