【问题标题】:What is the best way to fetch all data (posts and their comments) from Reddit? [closed]从 Reddit 获取所有数据(帖子及其评论)的最佳方式是什么? [关闭]
【发布时间】:2022-01-01 04:38:06
【问题描述】:

我需要使用 Python Reddit API Wrapper (PRAW) 分析关于 subreddit 的所有 cmets(例如 r/dogs,例如从 2015 年开始)。我希望将数据存储在 JSON 中。

我找到了一种使用 PRAW 以 JSON 格式获取所有热门、新、热门等提交的方法:

new_submissions = reddit.subreddit("dogs").new()
top_submissions = reddit.subreddit("dogs").top("all")

但是,这些只是 subreddit 的提交,不包括 cmets。我怎样才能获得这些帖子的 cmets?

【问题讨论】:

    标签: python json reddit praw


    【解决方案1】:

    您可以使用Python Pushshift.io API Wrapper (PSAW) 从特定 subreddit 中获取所有最新提交和 cmets,甚至可以执行更复杂的查询(例如在评论中搜索特定文本)。 docs 可在此处获得。

    例如,您可以使用get_submissions() 函数获取 2015 年以来 r/dogs 的前 1000 个提交:

    import datetime as dt
    import praw
    from psaw import PushshiftAPI
    
    r = praw.Reddit(...)
    api = PushshiftAPI(r)
    
    start_epoch=int(dt.datetime(2015, 1, 1).timestamp()) # Could be any date
    
    submissions_generator = api.search_submissions(after=start_epoch, subreddit='dogs', limit=1000) # Returns a generator object
    submissions = list(submissions_generator) # You can then use this, store it in mongoDB, etc.
    

    或者,要从 r/dogs 获得 2015 年的前 1000 个 cmets,您可以使用 search_comments() 函数:

    start_epoch=int(dt.datetime(2015, 1, 1).timestamp()) # Could be any date
        
    comments_generator = api.search_comments(after=start_epoch, subreddit='dogs', limit=1000) # Returns a generator object
    comments = list(comments_generator)
    

    如您所见,PSAW 仍然使用 PRAW,因此返回 PRAW 对象用于提交和 cmets,这可能很方便。

    【讨论】:

    • 感谢您的回答。我将使用“limit = None”来解决这个问题,因为我想要整个数据集,而不仅仅是前 1000 个帖子。
    • 我不确定limit = None 是否有效,但您可以尝试不包括所有限制。如果这不起作用,您可以解决它:获取第一个,例如 1000 个帖子,然后是前 2000 个并从中删除前 1000 个帖子。继续此过程并将所有帖子合并到一个列表中
    猜你喜欢
    • 2020-05-06
    • 2020-11-30
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 2020-03-08
    相关资源
    最近更新 更多