KrnLsh/RedFetcher

GitHub: KrnLsh/RedFetcher

一款面向 LLM 研究的 Reddit 抓取工具,将帖子与嵌套评论转换为带 token 计数的格式化文本文件。

Stars: 1 | Forks: 0

# RedFetch 一款强大的 Python 研究工具,旨在将 Reddit 的讨论、帖子正文以及完整的嵌套评论树抓取并转换为整洁的、带有 token 计数的文本文件。 通过结合 **Selenium** 浏览器自动化、**PRAW**(Python Reddit API Wrapper)以及 **tiktoken** token 预算管理,RedFetch 让你能够轻松收集社区反馈、用户情绪和产品研究内容,并专门针对大型语言模型(LLM,如 ChatGPT、Claude 和 Gemini)进行了预格式化处理。 ## 主要特性 * **混合抓取架构:** 利用 **Selenium** 执行浏览器搜索和无限滚动来收集帖子 URL,并结合 **PRAW** 对帖子元数据和评论进行深度、可靠的 API 提取。 * **Token 预算控制 (`tiktoken`):** 在写入数据时实时跟踪精确的 OpenAI token 计数 (`cl100k_base`)。你可以设置 token 上限,确保输出的文件能够完美适配你 LLM 的上下文窗口。 * **灵活的搜索与直接 URL 支持:** 可以在整个 Reddit (`all`) 中进行搜索,将搜索范围限制在特定的 subreddit (`r/mkindia`),或者直接粘贴 Reddit 帖子链接来抓取单个指定帖子。 * **交互式浏览器搜索:** 打开 Chrome 窗口执行搜索,并允许可选的手动 Reddit 登录,以绕过搜索限制或屏蔽。 * **递归嵌套评论:** 通过结构化缩进和作者标签(`-> [作者]: 评论正文`)捕获完整的评论层级结构,让 AI 模型能够理解对话的上下文。 * **实时状态仪表盘:** 终端 UI 会在单行动态更新,实时显示当前帖子标题、正在执行的操作以及当前 token 计数与限额的对比。 ## 前置条件 * Python 3.8 或更高版本 * 已安装 Google Chrome(Selenium WebDriver 所需) * Reddit API 凭证(用于 PRAW) ## 依赖项 安装所需的 Python 包: ``` pip install praw selenium tiktoken ``` ## 安装与配置 1. **克隆仓库:** git clone https://github.com/yourusername/RedFetch.git cd RedFetch 2. **添加你的 Reddit API 凭证:** 在文本编辑器中打开 `RedFetch.py`,并更新文件顶部的凭证: CLIENT_ID = 'YOUR_CLIENT_ID' CLIENT_SECRET = 'YOUR_CLIENT_SECRET' # 如果使用没有 secret 的脚本应用,则为 None USER_AGENT = 'YOUR_USER_AGENT' ## 用法 在终端中运行脚本: ``` python RedFetch.py ``` 按照交互式提示进行操作: 1. **查询或 URL:** 输入搜索主题(例如 `best mechanical keyboard`)**或者**直接粘贴 Reddit 帖子链接。 2. **范围:** 在整个 Reddit (`all`) 中搜索,或者输入特定的 subreddit 名称(例如 `mkindia`)。*(如果输入了直接 URL 则跳过此步)*。 3. **Token 限制:** 输入输出文件的最大 token 预算(例如 `10000`)。按 `Enter` 键则不限上限。 ### 交互示例 ``` === Reddit Browser-Search -> API Scraper (Token Tracker Edition) === 1. Enter your search query OR a direct Reddit thread URL: best mechanical keyboard under 5000 2. Search entire Reddit ('all') or a specific subreddit? (Enter 'all' or sub name): mkindia 3. Enter maximum token limit for the output txt file (Press Enter for unlimited): 5000 [Browser] Launching browser... [Browser] Opening Reddit login page... [ACTION REQUIRED] Please log in to Reddit in the opened browser window. Once you are successfully logged in (or if you wish to skip), press Enter here to continue searching... [Browser] Proceeding to search for 'best mechanical keyboard under 5000'... [Browser] Gathering thread URLs from search. Please wait... [Browser] Extracted 42 unique thread URL(s) from search. Starting API extraction... [Thread 1/42: What keyboard should I get for under 5... ] Extracting comments | Tokens: 3420 / 5000 ======================================== EXTRACTION COMPLETE ======================================== STOPPED: Reached your token limit of 5000. Total Unique Threads Scraped: 2 Total Tokens Extracted: 5012 Data saved to: /path/to/Research_best_mechanical_keyboard_under__mkindia.txt ``` ## 输出格式 该脚本会生成一个格式化的 `.txt` 文件,你可以直接将其复制并粘贴到 AI prompt 中。 **输出示例 (`Research_query_subreddit.txt`):** ``` RESEARCH QUERY: best mechanical keyboard under 5000 SOURCE: r/mkindia ============================================================ THREAD TITLE: What mechanical keyboard should I get for under 5000? THREAD AUTHOR: tech_guy99 THREAD SCORE: 34 POST BODY: Looking for suggestions for a solid budget mechanical keyboard for typing and gaming... ------------------------------ COMMENTS ------------------------------ -> [keyboard_fan]: Have you checked out the Aula F75? -> [tech_guy99]: I've seen it mentioned a lot, is build quality good? -> [keyboard_fan]: Yes, stock switches and gasket mount feel great for the price. -> [budget_builder]: Keychron C1 is another great choice if you want hot-swappable switches. ============================================================ ``` ## 将输出用于 AI 1. 运行 **RedFetch** 并设置与你的 AI 模型上下文预算相匹配的 token 限制(例如,ChatGPT/Claude 的 `8000` 个 token)。 2. 打开生成的文本文件,复制其全部内容,并将其粘贴到你的 AI prompt 中。 3. prompt 示例建议: * *"分析这些 Reddit 讨论中的用户情绪。"* * *"提取推荐的产品列表,以及用户提到的优缺点。"* * *"这些帖子中最常见的投诉是什么?"* ## 免责声明 此工具仅为个人研究和教育目的而创建。请确保你的使用行为符合 Reddit 的服务条款和 API 指南。
标签:DLL 劫持, PRAW, Python, Selenium, 命令控制, 大语言模型, 数据采集, 无后门, 逆向工具