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, 命令控制, 大语言模型, 数据采集, 无后门, 逆向工具