techno-neighbour/focal-harvest

GitHub: techno-neighbour/focal-harvest

一款轻量级 Python CLI 工具,自动化完成网页搜索、抓取、清洗与 AI 内容整合,支持离线回退和 17+ 平台的持续话题监控。

Stars: 18 | Forks: 0

# Focal Harvest Focal Harvest 是一款轻量级的 Python CLI 工具,包含两个主要用例,并提供零配置的本地统计回退功能以支持离线运行: * **自动化研究 Pipeline**:查询搜索引擎,抓取并清洗目标页面,使用 Gemini、Claude 或 GPT-4o-mini 将结果整合为结构化报告。 * **OSINT 收集框架**:通过 daemon 调度、Wayback Machine 回退机制以及 Discord/Telegram 提醒分发,监控 Reddit、Hacker News、Stack Overflow、arXiv 等 17+ 平台上的话题。 [![GitHub Release](https://img.shields.io/github/v/release/techno-neighbour/focal-harvest?color=blue)](https://github.com/techno-neighbour/focal-harvest) [![License](https://img.shields.io/github/license/techno-neighbour/focal-harvest?color=green)](https://github.com/techno-neighbour/focal-harvest/blob/main/LICENSE) [![Python Version](https://img.shields.io/badge/python-3.12%2B-blue)](https://www.python.org/) ![Focal Harvest Demo](https://static.pigsec.cn/wp-content/uploads/repos/cas/e0/e05fd1d1df0a77d09ff51035e5da31daa57ec38c8bbda3b6d60722728fdeaa23.gif) ``` Python • AI Agent • Web Research • CLI • Zero-Config Offline Fallback ``` ## ⚡ 快速开始(30 秒内上手) ### 安装 请确保已安装 Python 3.12+。运行跨平台安装程序: ``` python install.py ``` *(或者运行 `pip install -r requirements.txt` 进行标准的手动安装)。* ### 最小可用示例(CLI 启动) 启动交互式终端用户界面(TUI): ``` python main.py ``` ### Python API 编程式用法 对于自定义的自动化脚本,您可以在 Python 中以编程方式运行抓取与整合 pipeline: ``` from scraper import search_duckduckgo, scrape_urls_concurrently from analyzer import synthesize_topics # 1. 搜索 query results = search_duckduckgo("Gemini 1.5 Flash vs Pro", max_results=3) urls = [r["url"] for r in results] # 2. 在并行线程中并发抓取目标页面 scraped_data = scrape_urls_concurrently(urls) # 3. 将发现的结果合成为结构化的 Markdown 报告 report = synthesize_topics( scraped_data, query="Gemini 1.5 Flash vs Pro", spec_topic="pricing comparisons" ) print(report) ``` ## 🎯 问题与我们的解决方案 每位开发者、研究人员和技术博主都在重复同样繁琐的手动工作流程: `搜索查询 ➔ 打开 20 个浏览器标签页 ➔ 忽略 Cookie 弹窗与广告 ➔ 复制粘贴片段 ➔ 使用 LLM 整合 ➔ 保存报告` **Focal Harvest** 将这整个流程自动化,并封装在一个轻量级的终端 pipeline 中。 ### 📊 性能基准测试(典型运行) | 指标 / 操作 | 手动浏览器扫描 | 笨重的本地 LLM (Ollama/Llama3) | Focal Harvest | | :--- | :--- | :--- | :--- | | **安装包大小** | ~150MB (Chrome) | ~4.7GB (Llama3-8B) | **<5.2MB** (零依赖核心) | | **冷启动时间** | ~1.5s | ~12.5s(模型加载) | **<0.15s** (TUI 瞬时启动) | | **抓取与清洗速度** | 每页约 45s | 每页约 1.2s(原始 HTML) | **每页 <0.25s**(并行可读性处理) | | **上下文密度** | 大量冗余(广告/导航栏) | 中等(包含所有 HTML 标签) | **高密度**(排名前 15 的关键句子) | | **资源占用** | ~1.2GB RAM | ~6.5GB RAM + 专用 GPU | **<85MB RAM**(可在低端硬件上运行) | ## ⚙️ 工作原理 ``` graph LR A["Focus Query"] --> B["Concurrent Scraper (utils.py)"] B --> C["Readability Engine (scraper.py)"] C --> D["Synthesis Engine (analyzer.py)"] D --> E["TUI Reports / Webhooks (notifier.py)"] style A fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px,color:#000000 style E fill:#e8f5e9,stroke:#4caf50,stroke-width:2px,color:#000000 ``` 1. **编排搜索**:通过 Tavily 或 DuckDuckGo 解析搜索参数。 2. **并发抓取**:在并行线程中抓取页面,并绕过 Cloudflare 拦截。 3. **HTML 净化**:剔除广告、小组件和 Cookie 遮罩层,仅保留纯净文本。 4. **自适应补充**:丢弃被屏蔽或空白的页面,并自动抓取替代内容,以确保高密度的有效输入。 5. **AI / 本地整合**:使用 Gemini、Claude 或 OpenAI 总结内容,并支持 API 密钥的自动故障转移。如果未提供 API 密钥,则会自动回退到离线的 PositionRank 统计排名器。 6. **即时分发**:在本地保存结构化的 Markdown/JSON 报告,并将提醒推送到 Discord/Telegram。 ![CLI in Action](https://static.pigsec.cn/wp-content/uploads/repos/cas/44/44d99a222ac04ba5ae57df32b26a42d018f556f0b4a9d1a669e9eb33aabb2d46.jpg) ## 📋 示例输出 以下是研究**“Gemini 1.5 Flash vs Gemini 1.5 Pro”**时生成的结构化 Markdown 报告的真实示例: ![Report Preview](https://static.pigsec.cn/wp-content/uploads/repos/cas/33/33c7b7ef7efeb3915a10fd83319d283a042a456d4e6edacb67e4c96cd2c40a04.png) ## ✨ 功能特性 ### 🔍 健壮的 Web 抓取 * **可选的 403 绕过 (`curl_cffi`)**:模拟标准的 Chrome TLS/JA3 签名和客户端提示,以绕过 Akamai 和 Cloudflare 的反机器人拦截。 * **Wayback Machine 回退机制**:自动将受保护的 SPA(Reddit、Stack Overflow、Quora)重定向到 Internet Archive,以绕过登录限制。 * **条件式 User-Agent 路由**:抓取访客页面时自动切换至 `Discordbot/2.0`;在配置了用户 cookie 时切换至桌面版 Chrome UA,以避免被机器人签名拦截。 * **统一的 Cookie 导入**:支持 Netscape `config/cookies.txt` 文件以及通用的域名到 Cookie 的映射,可抓取位于登录墙后的页面。 ### 🧹 17+ 内置自定义插件 预配置的解析器模块,专为清洗和提取结构化布局而设计: * **HN & Reddit**:捕获嵌套的评论线程和递归的树状层级结构。 * **Stack Overflow**:清洗代码块并识别已采纳的回答。 * **arXiv & Google Scholar**:提取学术元数据、摘要以及作者指标。 * **金融 (Yahoo/SEC EDGAR)**:抓取财务流,并将数据表格转换为 Markdown 表格。 * **ReadTheDocs & Dev.to**:剥离侧边导航栏和页眉。 ### 🧠 智能整合与 AI 路由 * **多提供商故障转移**:在降级到离线关键字 PositionRanker 之前,自动按顺序级联尝试 API 密钥(Gemini ➡️ OpenAI ➡️ Claude)。 * **实时搜索 Grounding**:集成 Gemini 实时 Google 搜索 grounding 功能,直接在模型中获取带有引用的实时事实。 * **本地优先缓存**:将 MD5 哈希结果保存在 `reports/cache/` 中,对于周期性出现的话题可跳过网络请求。 ## 🛠️ 代码库架构与文件结构 ### 系统执行工作流 ``` sequenceDiagram participant User participant CLI as main.py participant Scraper as scraper.py participant AI as analyzer.py participant Notifier as notifier.py User->>CLI: Selects Option 1 (Single Scrape) CLI->>Scraper: Search Query & Crawl Targets Scraper->>Scraper: Run concurrent thread scrapes Scraper->>CLI: Return clean list of page contents CLI->>AI: Synthesize contents (AI or Local) AI->>CLI: Return structured report CLI->>Notifier: Export Markdown/JSON & Send Webhooks Notifier->>User: Renders Report in Terminal + sends Alerts ``` ### 文件夹布局 ``` ├── install.py # Platform-independent setup script ├── main.py # Interactive TUI Controller (Version v1.2.0) ├── config_manager.py # Reads and writes config.json ├── scraper.py # DuckDuckGo/Tavily search, crawler, and HTML cleaning ├── analyzer.py # Multi-LLM provider wrappers and PositionRank offline logic ├── notifier.py # Markdown exporter and Discord/Telegram webhook dispatch ├── utils.py # HTTP request wrapper with retries, cookies, and header sanitization ├── std_plugins/ # Built-in plugins (Hacker News, Reddit, Stack Overflow, etc.) └── tests/ # Isolated unit tests suite ``` ## ⚖️ 5 条严格的设计边界(切勿违反) Focal Harvest 严格遵循以下核心维护准则: 1. **轻量级足迹**:应用程序保持在 5MB 以下,并在几秒钟内完成安装。 2. **仅限 TUI**:完全在控制台中运行——没有本地 React 仪表板或本地 REST 服务器。 3. **低硬件要求**:在低配置的学生笔记本电脑上也能流畅运行。 4. **无本地 AI 下载**:使用远程 API(Gemini/OpenAI/Claude),以避开数 GB 大小的 Ollama/Llama 下载。 5. **无 SQL 数据库**:以纯 JSON 和 Markdown 文件存储报告,确保绝对的文件系统透明度。 ## 🛣️ 路线图 * [x] 并行并发爬虫 * [x] 混合可读性文本解析器 * [x] 多 LLM 提供商故障转移 * [x] Discord / Telegram webhook 分发 * [x] 模拟请求头与 WAF 绕过机制 * [x] 统一的 Netscape `cookies.txt` 映射 * [ ] **增量更新**:生成仅包含差异的摘要,或将更新追加到现有报告中。 * [ ] **PDF/CSV 导出器**:将研究扫描结果导出为 PDF 和结构化的 CSV 表格。 ## ⚖️ 法律免责声明与合理使用 Focal Harvest 是一款用于个人和研究目的的命令行实用工具。 * **公开数据抓取**:根据美国既定判例法,对公开数据进行程序化抓取受法律保护。请以合理的频率运行爬虫,尊重目标服务器。 * **授权抓取**:请勿将带有 session cookie 的活跃个人账户用于此目的。请务必使用一次性/专用账户,以防止账户被封停。 ## 📜 许可证 基于 MIT 许可证分发。详情请参阅 `LICENSE`。
标签:Petitpotam, Python, 人工智能, 无后门, 用户模式Hook绕过, 网络调试, 自动化, 逆向工具