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
相关产品推荐
相关产品推荐

