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

如何用Python的PRAW在Reddit全社区搜索多关键词并修复结果不全问题

问题原因与解决方法

你的代码只返回最后一个关键词结果的核心问题是:PRAW的search()方法不支持直接传入关键词列表。当你把列表传给它时,它会将列表转为字符串格式进行搜索,而非逐个匹配列表里的关键词,自然无法得到所有关键词的结果。

要实现全关键词搜索,你需要遍历关键词列表,对每个关键词单独执行搜索,同时注意去重(避免同一帖子被多个关键词匹配后重复存入)。

修改后的代码

import pandas as pd
import praw

# 初始化Reddit实例(需自行完成认证配置)
reddit = praw.Reddit(
    client_id="你的客户端ID",
    client_secret="你的客户端密钥",
    user_agent="自定义用户代理"
)

# 关键词列表
keyword_list = ['maritime heritage', 'shipwreck', 'shipwrecks', 'coastal archeaology', 'maritime archaeology', 
                'maritime ecologies', 'marine archeaology', 'marine heritage', 'cultural marine heritage', 'marine culutral haritage', 'maritime history']

# 目标社区:全社区
all_subs = reddit.subreddit("all")

# 存储数据的列表与去重用集合
titles = []
scores = []
ids = []
seen_post_ids = set()  # 记录已抓取的帖子ID,避免重复

# 遍历每个关键词单独搜索
for keyword in keyword_list:
    for submission in all_subs.search(keyword, limit=None):
        if submission.id not in seen_post_ids:
            seen_post_ids.add(submission.id)
            titles.append(submission.title)
            scores.append(submission.score)
            ids.append(submission.id)

# 生成结果DataFrame
df = pd.DataFrame({
    'Title': titles,
    'Id': ids,
    'Upvotes': scores
})

print(df.shape)
print(df.head(10))

关键修改点

  • 新增seen_post_ids集合:跟踪已抓取帖子ID,防止同一帖子因匹配多个关键词被重复添加。
  • 外层循环遍历关键词列表:对每个关键词单独调用search(),确保所有关键词的结果都被抓取。
  • 优化DataFrame创建方式:直接用字典传入更简洁直观。

内容的提问来源于stack exchange,提问作者Hannah Cocks

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 06:35:10