🤖 Claude Code 集成版 - 通过自然语言与 AI 助手交互,轻松管理算法学习
一个集成了题目爬取、学习统计和智能学习计划的算法学习工具集,深度集成 Claude Code,支持通过自然语言进行所有操作。
- 自然语言交互: 无需记忆命令,直接用中文或英文描述需求
- 智能技能系统: 4 个专业技能自动识别你的意图
- 上下文感知: Claude 理解你的学习进度和目标
- 工作流自动化: 从爬取到统计,一句话完成整个流程
-
洛谷爬虫 (luogu-scraper)
- 爬取洛谷题单、题目和题解
- 支持官方题单和单题爬取
- JSON + Markdown 双格式输出
-
LeetCode 爬虫 (leetcode-scraper)
- 爬取 LeetCode 题目和题解
- 新增: 题目列表爬取(学习计划、公司题库、主题集合)
- 支持国际站和中国站
- GraphQL API,稳定高效
-
学习统计与计划 (stats)
- 生成学习进度统计
- 新增: 智能学习计划管理
- 新增: 个性化题目调度算法
- 自动进度跟踪
Claude Code Skills 是 Claude Code 的扩展系统,允许你通过自然语言与 AI 助手交互来完成复杂任务。本项目提供了 4 个专业技能,让你可以用对话的方式管理算法学习。
优势:
- ✅ 无需记忆复杂命令
- ✅ 自然语言描述需求
- ✅ AI 理解上下文和意图
- ✅ 自动化工作流程
- ✅ 智能错误处理和建议
git clone <repository-url>
cd CodeLearningAgent# 洛谷爬虫依赖
cd luogu_scraper
pip install -r requirements.txt
# LeetCode爬虫依赖
cd ../leetcode_scraper
pip install -r requirements.txt
# 返回项目根目录
cd ..依赖说明:
beautifulsoup4: HTML 解析lxml: XML/HTML 解析器requests: HTTP 请求html2text: HTML 转 Markdown
编辑 luogu_scraper/config.py:
COOKIE = '_uid=xxx; __client_id=xxx; ...'获取 Cookie 步骤:
- 登录 洛谷
- 打开浏览器开发者工具 (F12)
- 切换到 Network 标签
- 刷新页面
- 选择任意请求,在 Headers 中找到 Cookie
- 复制完整的 Cookie 值并粘贴到配置文件
LeetCode Cookie(可选):
- 编辑
leetcode_scraper/config.py - 仅访问会员题目时需要
检查技能文件是否存在:
ls -la .claude/skills/应该看到:
luogu-scraper/
leetcode-scraper/
learning-stats/
learning-plans/
每个目录下都应该有 SKILL.md 文件。
在项目根目录启动:
claude-code或者如果你使用 VS Code 集成:
- 打开项目文件夹
- Claude Code 会自动检测
.claude/skills/目录 - 技能会自动加载
在 Claude Code 中输入:
"列出所有可用的技能"
或者直接测试:
"列出 LeetCode 中等难度的前 10 道题"
如果 Claude 能够理解并执行,说明技能已成功加载!
项目包含 4 个专业技能,每个技能负责特定的功能领域:
功能: 爬取洛谷题单、题目和题解
触发词:
- "爬取洛谷"
- "获取洛谷题目"
- "洛谷题单"
- "P1001"(题目编号)
- "洛谷入门题单"
使用示例:
"爬取洛谷入门题单"
"获取洛谷题目 P1001"
"爬取洛谷题单1,包含前5个题解"
"下载洛谷题单2的所有题目"
输出位置: luogu_scraper/output/
功能: 爬取 LeetCode 题目、题解和题目列表
触发词:
- "爬取LeetCode"
- "列出LeetCode"
- "study plan"
- "company problems"
- "two-sum"(题目 slug)
使用示例:
"列出 LeetCode 中等难度的前 20 道题"
"爬取 two-sum 题目"
"获取 Top Interview 150 学习计划"
"爬取 Google 公司的 200 道题"
"列出所有可用的题目来源"
"爬取动态规划主题的 100 道题"
新功能 - 题目列表爬取:
- 官方学习计划:Top Interview 150, LeetCode 75, SQL 50 等
- 公司题库:Google, Amazon, Microsoft, Facebook, Apple 等
- 主题集合:动态规划、树、图、数组、字符串等
- 难度分类:Easy, Medium, Hard
- 高频题目:按点赞数排序
输出位置: leetcode_scraper/output/
功能: 生成和分析学习统计数据
触发词:
- "生成统计"
- "查看进度"
- "学习报告"
- "我学了多少题"
- "分析学习数据"
使用示例:
"生成学习统计"
"查看我的学习进度"
"分析学习数据"
"统计题目分类"
"查看学习报告"
统计内容:
- 总体统计(总题目数、已学习数、进度百分比)
- 分类统计(每个分类的学习情况)
- 标签统计(题目标签分布)
- 难度统计(不同难度的分布)
- 每日统计(学习时间线)
- 学习计划统计(新增)
输出位置: stats/data/stats.json
功能: 创建和管理个性化学习计划
触发词:
- "创建学习计划"
- "今天的题目"
- "学习进度"
- "导出计划"
- "查看学习计划"
使用示例:
"创建一个 30 天的面试准备计划,使用 Top Interview 150"
"查看今天的学习任务"
"查看学习计划进度"
"导出学习计划到 Markdown"
"列出所有学习计划"
"删除学习计划 plan_001"
核心特性:
- 智能调度算法: 基于频率(40%)、难度(30%)、主题多样性(30%)评分
- 难度递进: 从简单到困难,循序渐进
- 主题均衡: 避免连续相同主题,保持学习多样性
- 自动跳过: 自动过滤已学习题目
- 进度跟踪: 实时跟踪完成率和进度状态
- 灵活导出: 导出 Markdown 格式,方便打印
输出位置: stats/data/learning_plan.json
完整对话流程:
你: "我想准备面试,帮我获取 Top Interview 150 题目列表"
Claude: [自动触发 leetcode-scraper 技能]
[爬取题目列表]
✅ 已获取 150 道题目
你: "创建一个 30 天的学习计划,从明天开始"
Claude: [自动触发 learning-plans 技能]
[创建计划,智能分配每日任务]
✅ 已创建计划 plan_001
📅 每天 5 道题,难度递进,主题均衡
你: "查看今天的题目"
Claude: [显示今日 5 道题目]
1. Two Sum (Easy) - Array, Hash Table
2. Add Two Numbers (Medium) - Linked List
3. Longest Substring (Medium) - String, Sliding Window
4. Container With Most Water (Medium) - Array, Two Pointers
5. Valid Parentheses (Easy) - String, Stack
你: "爬取第一题 Two Sum 的详细信息和题解"
Claude: [爬取题目详情和高赞题解]
✅ 已保存到 output/problems/0001_two-sum/
[完成学习后]
你: "我完成了第一题 Two Sum,笔记:哈希表解法,时间复杂度O(n)"
Claude: [自动触发 learning-stats 技能]
[标记为已学习,更新进度]
✅ 已标记 Two Sum 为已学习
📋 已更新学习计划 plan_001
📊 进度: 1/150 (0.67%)
你: "查看学习进度"
Claude: [显示详细进度]
📊 学习计划: Interview Prep - 30 Days
✅ 已完成: 1/150 (0.67%)
📅 已过天数: 1/30
🎯 状态: 按计划进行
你: "帮我爬取 Google 公司的前 200 道高频题"
Claude: [爬取 Google 题库]
✅ 已获取 200 道 Google 高频题
你: "创建 Google 面试准备计划,45 天,优先高频题"
Claude: [创建计划,高频题优先]
✅ 已创建计划 plan_002
📅 每天 4-5 道题,高频题优先
你: "导出计划到 Markdown,我要打印出来"
Claude: [生成 Markdown 文件]
✅ 已导出到 google_interview_plan.md
你: "我想专门学习动态规划,帮我获取 100 道 DP 题目"
Claude: [爬取动态规划主题题目]
✅ 已获取 100 道动态规划题目
你: "创建 DP 学习计划,2 个月,难度递进"
Claude: [创建计划,从简单到困难]
✅ 已创建计划 plan_003
📅 每天 1-2 道题,难度递进
你: "查看学习统计,分析我的薄弱环节"
Claude: [生成统计,指出需要加强的标签]
📊 统计分析:
- 动态规划: 15/100 (15%)
- 薄弱标签: 状态压缩DP, 树形DP
💡 建议: 重点学习状态压缩和树形DP
你: "查看今天的学习任务"
Claude: [显示今日题目]
📅 今日任务 (2026-01-30):
1. LRU Cache (Medium)
2. Binary Tree Level Order (Medium)
3. Merge Intervals (Medium)
你: "爬取第一题的详细信息和题解"
Claude: [爬取题目和高赞题解]
✅ 已保存 LRU Cache 题目和 3 个高赞题解
[完成学习后]
你: "标记 146 LRU Cache 为已学习,笔记:哈希表+双向链表实现"
Claude: [更新学习记录和计划进度]
✅ 已标记为已学习
📋 已更新学习计划
📊 今日进度: 1/3
你: "生成学习统计"
Claude: [显示整体进度和分类统计]
📊 总体统计:
- 总题目: 150
- 已学习: 46
- 进度: 30.67%
- 学习天数: 15
A: 请检查以下几点:
-
确认在项目根目录启动
cd /path/to/CodeLearningAgent claude-code -
检查技能文件是否存在
ls -la .claude/skills/*/SKILL.md应该看到 4 个 SKILL.md 文件
-
重启 Claude Code 会话
- 退出当前会话
- 重新启动 Claude Code
-
检查技能文件格式
- 确保每个 SKILL.md 都有正确的 YAML frontmatter
- 确保
name和description字段存在
A: 尝试以下方法:
-
使用更明确的触发词
- ❌ "获取题目" (模糊)
- ✅ "爬取 LeetCode 题目 two-sum" (明确)
-
包含关键信息
- 平台名称:洛谷、LeetCode
- 操作类型:爬取、列出、创建、查看
- 具体对象:题目、题单、计划
-
查看技能描述
- 每个技能的 SKILL.md 开头有详细的触发词列表
- 参考这些触发词来构造你的请求
A: 两步流程:
-
先爬取题目列表
"获取 Top Interview 150 学习计划" -
创建计划
"创建 30 天学习计划,使用 Top Interview 150"
Claude 会自动:
- 读取题目列表
- 计算每日题目数
- 智能分配题目
- 创建计划文件
A: 自动跟踪机制:
当你说:
"标记 1 Two Sum 为已学习"
系统会自动:
- 更新
learning_record.json - 更新所有相关学习计划的进度
- 重新计算完成率和进度状态
你可以随时查看:
"查看学习进度"
A: 可以!你可以同时维护多个计划:
"列出所有学习计划"
示例:
- plan_001: Interview Prep - 30 Days
- plan_002: Google Interview Prep
- plan_003: DP Mastery
每个计划独立跟踪进度,互不干扰。
A: 使用以下命令:
查看计划:
"查看学习计划 plan_001"
导出计划:
"导出学习计划 plan_001 到 Markdown"
删除计划:
"删除学习计划 plan_001"
A: 可能原因和解决方法:
-
网络问题
- 检查网络连接
- 尝试使用中国站(LeetCode)
-
请求频率限制
- 增加请求间隔
- 编辑
config.py中的REQUEST_DELAY
-
Cookie 过期
- 重新获取 Cookie
- 更新配置文件
早上(5分钟):
"查看今天的学习任务"
学习时(1-2小时):
- 完成题目
- 查看题解
- 理解思路
学习后(2分钟):
"标记 [题号] 为已学习,笔记:[学习心得]"
晚上(2分钟):
"查看学习进度"
每周日:
"生成学习统计"
"分析我的薄弱环节"
根据统计结果:
- 查看薄弱的分类和标签
- 针对性复习相关题目
- 调整学习计划
准备期(第1周):
"获取 Top Interview 150"
"创建 30 天学习计划"
"导出计划到 Markdown"
执行期(第2-4周):
- 每日完成任务
- 保持学习节奏
- 及时标记进度
复习期(第4周):
"查看学习统计"
"列出高频题目"
"重点复习薄弱环节"
CodeLearningAgent/
├── .claude/ # Claude Code 配置
│ └── skills/ # 技能定义
│ ├── luogu-scraper/ # 洛谷爬虫技能
│ │ └── SKILL.md
│ ├── leetcode-scraper/ # LeetCode爬虫技能
│ │ └── SKILL.md
│ ├── learning-stats/ # 学习统计技能
│ │ └── SKILL.md
│ └── learning-plans/ # 学习计划技能(新)
│ ├── SKILL.md
│ └── assets/
│ └── plan_template.md
│
├── luogu_scraper/ # 洛谷爬虫模块
│ ├── main.py
│ ├── config.py
│ ├── training_scraper.py
│ ├── problem_scraper.py
│ ├── solution_scraper.py
│ └── utils.py
│
├── leetcode_scraper/ # LeetCode爬虫模块
│ ├── main.py
│ ├── config.py
│ ├── problem_scraper.py
│ ├── solution_scraper.py
│ ├── list_scraper.py # 新增:列表爬取
│ └── utils.py
│
├── stats/ # 学习统计模块
│ ├── generate_stats.py # 统计生成
│ ├── mark_learned.py # 标记已学习
│ ├── create_plan.py # 新增:创建计划
│ ├── view_plan.py # 新增:查看计划
│ ├── plan_manager.py # 新增:计划管理
│ ├── scheduler.py # 新增:智能调度
│ └── data/
│ ├── learning_record.json
│ ├── learning_plan.json # 新增:计划数据
│ └── stats.json
│
├── CLAUDE.md # 详细文档(给 Claude 看的)
└── README.md # 本文件(给人看的)
编辑 luogu_scraper/config.py:
# Cookie(必需)
COOKIE = '_uid=xxx; __client_id=xxx; ...'
# 请求间隔(秒)
REQUEST_DELAY = 1.5
# 每题获取的题解数量
MAX_SOLUTIONS_PER_PROBLEM = 3编辑 leetcode_scraper/config.py:
# 请求间隔(秒)
REQUEST_DELAY = 1.0
# 每题获取的题解数量
MAX_SOLUTIONS_PER_PROBLEM = 3
# 使用中国站
USE_CN_SITE = False
# Cookie(可选,访问会员题目需要)
COOKIE = ''创建 stats/data/learning_record.json:
{
"learned_problems": {
"1": {
"learned_at": "2026-01-30",
"notes": "Two Sum - 哈希表解法"
},
"146": {
"learned_at": "2026-01-30",
"notes": "LRU Cache - 哈希表+双向链表"
}
},
"daily_learning": {
"2026-01-30": ["1", "146"]
}
}评分权重:
- 频率分数 (40%): 基于题目点赞数
- 难度分数 (30%): 优先简单题目
- 主题多样性 (30%): 确保主题分布均匀
分配策略:
- 过滤已学习题目
- 计算综合评分
- 按评分排序(高频、简单题优先)
- 跨日期分配,保持主题均衡
- 避免连续相同标签的题目
- 官方学习计划: Top Interview 150, LeetCode 75, SQL 50 等
- 公司题库: Google, Amazon, Microsoft, Facebook, Apple 等
- 主题集合: 动态规划、树、图、数组、字符串等
- 难度分类: Easy, Medium, Hard
- 高频题目: 按点赞数排序
output/problems/0146_lru-cache/
├── problem.json # 题目 JSON 数据
├── problem.md # 题目 Markdown 格式
├── solutions.json # 题解 JSON 数据
├── solution_1.md # 第1名题解
├── solution_2.md # 第2名题解
└── solution_3.md # 第3名题解
{
"generated_at": "2026-01-30T14:00:00",
"summary": {
"total_problems": 150,
"learned_problems": 45,
"learning_progress": 30.0,
"study_days": 15
},
"learning_plans": {
"active_plans": 2,
"total_problems_in_plans": 300,
"completed_in_plans": 45
}
}如果你更喜欢命令行,所有功能都支持直接调用。详见 CLAUDE.md。
# LeetCode 爬虫
cd leetcode_scraper
python3 main.py --list --difficulty medium
python3 main.py --scrape-list study-plan:top-interview-150
# 学习计划
cd stats
python3 create_plan.py --name "Interview Prep" --source study-plan:top-interview-150 --start 2026-02-01 --end 2026-03-02
python3 view_plan.py --plan plan_001 --today
python3 mark_learned.py 1 "Two Sum - Hash table"- 遵守网站规则: 合理控制请求频率,避免对服务器造成压力
- Cookie 有效期: Cookie 可能过期,定期更新
- 数据用途: 仅供个人学习使用,请勿商业用途
- 学习记录: 及时更新学习记录以跟踪进度
- 备份数据: 定期备份
stats/data/目录
新增:
- ✨ 深度集成 Claude Code,支持自然语言交互
- ✨ 4 个专业技能:luogu-scraper, leetcode-scraper, learning-stats, learning-plans
- ✨ 智能学习计划系统
- ✨ LeetCode 题目列表爬取(学习计划、公司、主题)
- ✨ 智能调度算法(频率+难度+主题多维度)
- ✨ 自动进度跟踪
- ✨ Markdown 导出功能
改进:
- 🔧 重构技能结构,符合 Claude Code 规范
- 🔧 优化 frontmatter 描述,提升触发准确性
- 🔧 删除冗余内容,减少上下文占用
- 📚 完善文档,面向 Claude Code 用户
- 基础爬虫功能
- 学习统计功能
本项目仅供学习交流使用。
欢迎提交 Issue 和 Pull Request!
如有问题或建议,联系cjh18671720497@outlook.com
Made with ❤️ for algorithm learners, powered by Claude Code