Объект Praw Reddit Web Crawler Error не имеет атрибута

Я пытаюсь использовать веб-краулер Reddit для извлечения лучших комментариев из определенных субреддитов и сохранения их в файле .csv.

Вот мой код:

import datetime
import praw
import pandas as pd
reddit = praw.Reddit(client_id='',
                 client_secret='',
                 password='',
                 user_agent='',
                 username='')

#Reddit Crawler
list_counter = 0
sr_list = ['politics', 'conservative', 'liberal', 'libertarian', 'donaldtrump', 'joebiden', 'democrats', 'republican']
data = []
comments = []

while list_counter < len(sr_list):
subreddit = reddit.subreddit(sr_list[list_counter]).top(time_filter='month', limit=1) #Change limit for number of threads, .new/.hot
for s in subreddit:  # for every submission in the subreddit
    # fetch top level comments
    for c in s.comments:
        c_time = datetime.datetime.fromtimestamp(c.created_utc) #Convert format of comment time (Y:M:D , H:M:S)
        comments.append([c.subreddit, c._submission, 'Comment', s.title, c.author, c_time, c.score, c.body])
            #May not need c._submission
    s_time = datetime.datetime.fromtimestamp(s.created_utc) #Convert format of threadRE time
    data.append([s.subreddit, s.id,'Thread', s.title, s.author, s_time, s.score, s.selftext])
list_counter+= 1

#Export to CSV#
df = pd.DataFrame(data, columns=['Subreddit Name','Thread ID', 'Thread/Comment', 'Thread Title', 'Author',
                             'Timestamp','Score','Content'])
df1 = pd.DataFrame(comments, columns=['Subreddit Name','Thread ID','Thread/Comment', 'Thread Title', 'Author',
                             'Timestamp','Score','Content'])
result = pd.concat([df, df1])
result.to_csv('Raw Data.csv', index=False)

В большинстве случаев код работает нормально, но при большом количестве сообщений и комментариев выдает следующее сообщение об ошибке:

Traceback (most recent call last):
   File "/Users/robin/Documents/Python/code/Jonckr Reddit Web Crawler.py", line 23, in <module>
      c_time = datetime.datetime.fromtimestamp(c.created_utc) #Convert format of comment time (Y:M:D , H:M:S)
AttributeError: 'MoreComments' object has no attribute 'created_utc'

Process finished with exit code 1

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

Заранее спасибо.


person Tony Montana    schedule 29.12.2020    source источник


Ответы (1)


В документах Praw указано, что эти объекты MoreComments являются представлением ссылки загрузить дополнительные комментарии и продолжить эту тему, встречающиеся на Reddit.

Чтобы обойти это, они предлагают следующее:

from praw.models import MoreComments

for top_level_comment in submission.comments:
    if isinstance(top_level_comment, MoreComments):
        continue

В контексте вашего кода попробуйте следующее:

for c in s.comments:
    if isinstance(c, MoreComments):
        continue
    c_time = datetime.datetime.fromtimestamp(c.created_utc) #Convert format of comment time (Y:M:D , H:M:S)
    ...
person Benjamin Rowell    schedule 29.12.2020
comment
Спасибо за быстрый ответ. Однако это создает новый код ошибки: NameError: имя «MoreComments» не определено. - person Tony Montana; 29.12.2020
comment
Вы не забыли добавить импорт вверху, как в первом примере кода? - person Benjamin Rowell; 29.12.2020
comment
Я проглядел первую строку и забыл импортировать MoreComments. Теперь это работает. Вы спасатель, но, вероятно, в этом нет ничего особенного, если вы знаете свое дело. Большое спасибо :) - person Tony Montana; 29.12.2020
comment
Без проблем! Рад помочь. - person Benjamin Rowell; 30.12.2020