PRAW для цикла, возвращающего только последнее значение

Попытка создать парсер PRAW, который может извлекать комментарии из списка sub_id. Возвращает только последние данные комментариев sub_ids.

Я предполагаю, что должен перезаписывать что-то. Я просмотрел другие вопросы, но поскольку я использую PRAW, у него есть определенные параметры, и я не могу понять, что можно/нужно заменить.

sub_ids = ["2ypash", "7ocvlb", "7okxkf"]

for sub_id in sub_ids:

    submission = reddit.submission(id=sub_id)

    submission.comments.replace_more(limit=None, threshold=0)

comments = submission.comments.list()

commentlist = []
for comment in comments:

    commentsdata = {}
    commentsdata["id"] = comment.id
    commentsdata["subreddit"] = str(submission.subreddit)
    commentsdata["thread"] = str(submission.title)
    commentsdata["author"] = str(comment.author)
    commentsdata["body"] = str(comment.body)
    commentsdata["score"] = comment.score
    commentsdata["created_utc"] = datetime.datetime.fromtimestamp(comment.created_utc)
    commentsdata["parent_id"] = comment.parent_id

    commentlist.append(commentsdata)

person partyonwayne    schedule 10.01.2018    source источник


Ответы (1)


Отступ был вашим падением. Причина, по которой ваш код не работал, заключалась в том, что comments были назначены только после завершения цикла sub_ids. Поэтому, когда вы перебираете comments, это только последние sub_id comments.

Во-первых, переместите commentlist = [] перед обеими for петлями (так, чтобы это было сразу после строки 1)

Во-вторых, все, начиная с comments = submission.comments.list() (включительно) и далее, должно иметь отступ, чтобы они выполнялись в рамках итерации sub_ids.

Вот как это должно выглядеть в итоге:

sub_ids = ["2ypash", "7ocvlb", "7okxkf"]
commentlist = []

for sub_id in sub_ids:

    submission = reddit.submission(id=sub_id)
    submission.comments.replace_more(limit=None, threshold=0)
    comments = submission.comments.list()

    for comment in comments:

        commentsdata = {}
        commentsdata["id"] = comment.id
        commentsdata["subreddit"] = str(submission.subreddit)
        commentsdata["thread"] = str(submission.title)
        commentsdata["author"] = str(comment.author)
        commentsdata["body"] = str(comment.body)
        commentsdata["score"] = comment.score
        commentsdata["created_utc"] = datetime.datetime.fromtimestamp(comment.created_utc)
        commentsdata["parent_id"] = comment.parent_id

        commentlist.append(commentsdata)
person r.ook    schedule 10.01.2018
comment
Работал - знал, что это что-то маленькое, что я упускаю из виду. Благодарю вас! - person partyonwayne; 11.01.2018