# WebCrawlerMD **Repository Path**: triagen/web-crawler-md ## Basic Information - **Project Name**: WebCrawlerMD - **Description**: 爬虫,爬取网站内容,逐个导出为本地MD文件 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-11 - **Last Updated**: 2026-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # learn.lianglianglee.com 爬虫 这个爬虫用于将 https://learn.lianglianglee.com/ 网站上的课程文章下载到本地,并保存为 Markdown 格式。 ## 新功能 (v2.0) ### 1. 图片自动下载 - 自动下载文章中的所有图片到本地 - 在课程目录下创建 `images` 子目录 - 自动将 Markdown 中的图片链接替换为本地路径 - 支持多种图片格式(jpg, png, gif, webp) - 自动重命名重复的图片文件 ### 2. 断点续传功能 - 自动记录下载进度到 `.progress.json` 文件 - 基于文件哈希值判断是否已下载 - 支持中断后继续下载 - 已下载的文章自动跳过 - 每次下载成功后立即保存进度 ### 3. 智能重试机制 - 自动处理 429(频率限制)错误 - 指数退避策略(2s, 4s, 8s) - 最多重试 3 次 ## 功能特点 - 自动获取网站上的所有课程列表(共159个课程) - 按课程名创建文件夹 - 将每篇文章保存为独立的 Markdown 文件 - 自动下载图片并引用本地文件 - 支持选择单个课程下载或批量下载 - 智能跳过已存在的文件 - 断点续传,中断后可继续下载 - 完整的 Markdown 格式支持: - 标题层级(h1-h6) - 代码块(带语法高亮) - 引用块(blockquote) - 图片链接(自动转换为本地) - 有序/无序列表 - 粗体、斜体等格式 ## 安装依赖 ```bash pip install -r requirements.txt ``` 或手动安装: ```bash pip install requests beautifulsoup4 lxml ``` ## 使用方法 ### 1. 查看所有课程列表 ```bash python crawl.py ``` 这会显示所有159个课程的列表和对应的编号。 ### 2. 下载指定课程 ```bash python crawl.py <课程编号> ``` 例如,下载第129个课程"白话设计模式 28 讲(完)": ```bash python crawl.py 129 ``` ### 3. 下载所有课程 ```bash python crawl.py all ``` **注意**:下载所有课程需要较长时间,建议先测试单个课程。 ### 4. 指定输出目录 ```bash python crawl.py <课程编号> <输出目录> ``` 例如,将第129个课程下载到自定义目录: ```bash python crawl.py 129 "D:/my-learn" ``` ## 输出目录结构 下载的文件会按课程名称组织: ``` E:/opensource/learn/ ├── 白话设计模式 28 讲(完)/ │ ├── 00 生活中的设计模式:启程之前,请不要错过我.md │ ├── 01 监听模式:坑爹的热水器.md │ ├── 02 适配模式:身高不够鞋来凑.md │ ├── images/ # 新增:图片目录 │ │ ├── a01db720-d588-11e7-8257-812093f8cef1.jpg │ │ └── 2bca8d20-d589-11e7-adba-9119e3f0586f.jpg │ └── ... ├── 重学数据结构与算法-完/ │ ├── 00 开篇词:带你从不同角度看"数据结构与算法".md │ ├── images/ │ └── ... ├── .progress.json # 新增:下载进度文件 └── ... ``` ## 进度管理 ### 进度文件格式 `.progress.json` 文件记录了所有已下载的文章信息: ```json { "白话设计模式 28 讲(完)": { "https://learn.lianglianglee.com/专栏/.../01 监听模式:坑爹的热水器.md": { "title": "01 监听模式:坑爹的热水器", "hash": "a1b2c3d4e5f6...", "images": [ { "original_url": "https://...", "local_file": "a01db720-d588-11e7-8257-812093f8cef1.jpg" } ], "downloaded_at": "2026-03-11 14:30:25" } } } ``` ### 断点续传 如果下载过程中断开,重新运行相同的命令即可继续: ```bash # 第一次下载(中断后) python crawl.py 129 # 重新运行,会自动跳过已下载的文章 python crawl.py 129 ``` ### 重新下载某个文章 如果需要重新下载某个文章,可以: 1. 删除对应的 `.md` 文件 2. 或删除 `.progress.json` 中的对应记录 3. 重新运行下载命令 ## 课程列表 网站共有159个课程,包括但不限于: 1. 10x程序员工作法 2. 12步通关求职面试-完 3. 22 讲通关 Go 语言-完 4. 24讲吃透分布式数据库-完 5. MySQL实战45讲 6. Go语言核心36讲 7. Java 并发编程 78 讲-完 8. Kafka核心技术与实战 9. Kubernetes 从上手到实践 10. Redis 核心技术与实战 ... 129. 白话设计模式 28 讲(完) ... 152. 重学操作系统-完 153. 重学数据结构与算法-完 154. 陈天 · Rust 编程第一课 ... 159. 高楼的性能工程实战课 ## 注意事项 1. **请求频率限制**:网站有反爬虫机制,爬虫会自动处理429错误并进行重试,请耐心等待。 2. **下载时间**:每个课程包含多篇文档和图片,完整下载可能需要较长时间。 3. **已存在文件**:如果文件已下载且哈希值一致,爬虫会自动跳过,不会重复下载。 4. **图片下载**:图片会下载到 `images` 子目录,Markdown中的链接会自动替换为本地路径。 5. **进度保存**:每次成功下载文章后会立即保存进度,确保数据不丢失。 6. **网络连接**:请确保网络连接稳定。 ## 示例 查看课程列表: ```bash python crawl.py ``` 下载"重学数据结构与算法-完"课程(编号153): ```bash python crawl.py 153 ``` 输出示例: ``` ================================================================================ learn.lianglianglee.com 课程爬虫 ================================================================================ 输出目录: E:/opensource/learn 正在读取课程列表... 下载课程: 重学数据结构与算法-完 正在读取课程 '重学数据结构与算法-完' 的文章列表... 找到 50 篇文章 开始下载 50 篇文章... [1/50] [OK] 00 | 开篇词:带你从不同角度看"数据结构与算法".md [IMG] 已下载: abc123.jpg [IMG] 已下载: def456.png [2/50] 跳过 (已下载) ... [50/50] [OK] 49 | 散列表(下):为什么散列表和链表经常会一起使用?.md 下载完成!成功: 49 篇, 跳过: 1 篇, 失败: 0 篇 ``` ## 技术实现 - 使用 `requests` 库进行HTTP请求 - 使用 `BeautifulSoup` 解析HTML内容 - 智能识别 `book-post` 内容区域 - 自动将HTML转换为Markdown格式,包括: - 标题层级(h1-h6) - 代码块(带语法高亮) - 引用块(blockquote) - 图片链接(自动下载并替换为本地路径) - 有序/无序列表 - 粗体、斜体等格式 - HTML实体解码(" 等) - 图片自动下载并重命名 - 文件哈希校验(MD5) - JSON格式进度文件 - 智能重试机制应对网络问题和频率限制 ## 输出格式 爬虫会自动将HTML内容转换为标准Markdown格式,例如: - HTML标题 `

标题

` → `### 标题` - HTML代码 `
代码
` → ```代码``` - HTML引用 `
内容
` → `> 内容` - HTML图片 `alt` → `![alt](./images/local_file.jpg)`(自动下载图片) - HTML实体 `"` → `"` ## 许可证 本工具仅供个人学习使用,请尊重原作者的版权。