You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PRAW中Subreddit.submissions()的extra_query字段无法正常工作求助

问题分析与解决方法

我来帮你拆解下这个问题的核心原因,以及对应的修复方案:

你遇到的无结果问题,是因为对submissions()方法的extra_query参数用法理解有误,导致生成的搜索查询语法不符合Reddit的Cloudsearch规则。

具体原因

PRAW的submissions()方法会自动把你传入的start和end时间,转换成Cloudsearch格式的时间范围查询,比如(1699999999..1700000059)。之后它会直接把extra_query的内容拼接到这个时间查询的后面。

你传入的'site:imgur.com'会让最终的查询变成:

(时间范围)site:imgur.com

这种写法不符合Cloudsearch语法——两个独立的搜索条件之间必须用逻辑运算符(比如AND)连接,否则Reddit的搜索API无法识别这两个条件的关联关系,自然返回空结果。

而当你移除extra_query时,查询仅包含时间范围,所以能看到所有该时间段内的提交,其中恰好包含imgur的链接,但这并不是主动过滤的结果。

修复方案

只需要在extra_query的内容前加上AND和空格,让两个条件的逻辑关系明确即可:

import praw
import json
import time

configFile = open("config.json", 'r')
configData = json.load(configFile)
now = time.time() - 60
reddit = praw.Reddit(client_id=configData['user']['client_id'], 
                     client_secret=configData['user']['client_secret'], 
                     user_agent=configData['user']['user_agent'])

# 在extra_query前添加AND和空格,明确逻辑关系
for submission in reddit.subreddit('all').submissions(now-3600, now, ' AND site:imgur.com'):
    print(submission.url)

另一种更直观的写法

如果你觉得这种拼接方式容易出错,也可以直接使用search()方法,更清晰地组合时间范围和搜索条件:

import praw
import json
import time

configFile = open("config.json", 'r')
configData = json.load(configFile)
now = time.time() - 60
reddit = praw.Reddit(client_id=configData['user']['client_id'], 
                     client_secret=configData['user']['client_secret'], 
                     user_agent=configData['user']['user_agent'])

# 直接构造完整的Cloudsearch查询语句
query = f'site:imgur.com timestamp:{int(now-3600)}..{int(now)}'
for submission in reddit.subreddit('all').search(query, syntax='cloudsearch'):
    print(submission.url)

内容的提问来源于stack exchange,提问作者Joshua Meyers

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:33:02