【问题标题】:PRAW bot only parsing one subreddit when wanted to parse multiplePRAW bot 在想要解析多个时只解析一个 subreddit
【发布时间】:2026-02-24 20:20:09
【问题描述】:

我正在编写一个机器人来解析包含特定字符的帖子标题的特定 subreddits。如下所示,在r.subreddit() 方法中,我已经传递了'nba',但还希望机器人解析'nbadiscussion''warriors''NYKnicks'

怎么只抢/r/nba的顶帖?谢谢!

def run_bot():
    sub = r.subreddit('nba+nbadiscussion+warriors+NYKnicks')
    print("Grabbing subreddit")
    subs = sub.top('year', limit=5)
    print("Grabbing posts in sub")
    for posts in subs:
        article_url = posts.url
        post_title = posts.title
        print(post_title)
        print(article_url)

        string1 = post_title
        durantRegex = re.compile(r'[KevinDurantKnicks]')
        x = durantRegex.search("Kevin Durant Knicks", string1)  

 run_bot()

【问题讨论】:

    标签: python bots praw


    【解决方案1】:

    如果你想从每个 sub 中获得 5 个结果,最好使用 for 循环遍历 subs 列表。

    subs_to_search = ['nba', 'nbadiscussion', 'warriors', 'NYKnicks']
    
    for sub_name in subs_to_search:
        sub = r.subreddit(sub_name)
        subs = sub.top('year', limit=5)
    
        for posts in subs:
            article_url = posts.url
            post_title = posts.title
            print(post_title)
            print(article_url)
    
    

    以此类推,所以你正在为每个子做一个动作。它会从每个中获得 5 个,做你需要它做的事情,然后转到下一个 subreddit 希望有帮助。

    【讨论】:

      【解决方案2】:

      这是因为您在 subs = sub.top('year', limit=5) 中指定的 limit=5 将您的结果集从合并的 subreddits 限制为总共只有五个结果。

      尝试提高 limit 参数或将其完全删除以查看其他子版块的结果。

      【讨论】:

      • 事实并非如此。列表 OP 搜索的前 100 多个帖子都来自 /r/nba,因为 /r/nba 更受欢迎,得分更高的帖子也是如此。
      【解决方案3】:

      怎么只抢r/nba的顶帖?

      因为这些子版块的相对流行度

      如果我们查看您正在查询的网络版本,就会发现:

      https://reddit.com/r/nba+nbadiscussion+warriors+NYKnicks/top?t=year

      /r/nba 比其他子版块更受欢迎,因此它的热门帖子(按分数排序)盖过了其他子版块的帖子。作为参考,以下是其他子版块的年度热门帖子:

      在本文发布时,这些子版块中得分最高的帖子是来自 /r/warriors 的 this one,获得 5171 分。这与top post in /r/nba 拥有的 63k 点相差甚远。


      Ari Victor 提出了一种从每个子获取帖子的好方法;即,遍历订阅者列表并单独获取他们的热门帖子。

      请注意,上述行为不会发生在热门列表中。使用热门列表,您可以期望所涉及的所有 subreddit 分布大致均匀,因为帖子分数是由社区规模加权的。因此,另一种可能的解决方案如下:

      def run_bot():
          print("Grabbing subreddit")
          subs = r.subreddit('nba+nbadiscussion+warriors+NYKnicks')
          print("Grabbing posts in sub")
          for posts in subs.hot(limit=5):
              article_url = posts.url
              post_title = posts.title
              print(post_title)
              print(article_url)
      
      run_bot()
      

      请注意,此解决方案获得的是热门帖子而不是热门帖子。您想要热门帖子还是热门帖子取决于您的具体应用。

      【讨论】:

      • 感谢您的详尽解释。我对 praw API 包装器的工作原理缺乏了解。