我目前正在使用PRAW来从多个不同的子reddit中获取结果,并尝试将每个子reddit中的每个结果归为一个数据帧。
现在,它可以很好地与一个subreddit配合使用,但是一旦我传入了一个subreddit列表,它就会覆盖前一个的结果,并返回最近完成的subreddit。出于某种原因,我觉得这应该是微不足道的,但是我正在绘制一个完整的空白。
这是我现在拥有的代码:
sub_list = ['5 different subreddits']
for sub in sub_list:
print('Working on this sub right now: \n', sub)
subreddit = protest_sniffer.subreddit(sub)
cont_subreddit = subreddit.controversial(limit=1000)
topics_dict = { "title":[], \
"score":[], \
"id":[], "url":[], \
"comms_num": [], \
"created": [], \
"body":[]}
count = 0
for submission in cont_subreddit:
topics_dict["title"].append(submission.title)
topics_dict["score"].append(submission.score)
topics_dict["id"].append(submission.id)
topics_dict["url"].append(submission.url)
topics_dict["comms_num"].append(submission.num_comments)
topics_dict["created"].append(submission.created)
topics_dict["body"].append(submission.selftext)
count += 1
progress = round(100 * (count/1000), 1)
print('%s percent finished' % progress)
topics_data = pd.DataFrame(topics_dict)
print(topics_data.describe())
答案 0 :(得分:1)
由于topics_dict
是在第一个循环中定义的,因此subreddit的每次新迭代都会用包含空列表的字典覆盖以前的字典。我想尝试将其移出循环。
sub_list = ['5 different subreddits']
topics_dict = { "title":[], \
"score":[], \
"id":[], "url":[], \
"comms_num": [], \
"created": [], \
"body":[]}
for sub in sub_list:
...
答案 1 :(得分:0)
您是否尝试过将topics_data
放入for循环中?这就是我为什么每次都会覆盖结果的猜测。
我无法运行代码,所以这是我想到的伪代码。
data = []
sub_list = ['datascience', 'python']
for sub in sub_list:
...
topics_dict = ...
...
for submission in cont_subreddit:
...
...
topics_data = pd.DataFrame(topics_dict)
data.append(topics_data)
df = pd.concat(data)
让我知道是否有帮助。