ワンクリックで
juejin-article-to-markdown
将掘金(juejin.cn)文章转换为整洁的 Markdown 文件,自动去除导航栏、评论区、推荐文章等无关内容,正确处理代码块、表格、图片等格式。当用户提供掘金文章链接或要求保存掘金文章时使用此技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
将掘金(juejin.cn)文章转换为整洁的 Markdown 文件,自动去除导航栏、评论区、推荐文章等无关内容,正确处理代码块、表格、图片等格式。当用户提供掘金文章链接或要求保存掘金文章时使用此技能。
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Professional API design skill covering RESTful APIs, GraphQL, API versioning, authentication, idempotency, and API documentation best practices. Use this skill when designing RESTful APIs, creating GraphQL schemas, implementing API versioning strategies, or need guidance on authentication, error handling, and API documentation.
Database design and optimization skill covering ER diagrams, normalization, indexing, sharding, query optimization, and database best practices. Use this skill when designing database schemas, optimizing queries, planning data architecture, or need guidance on database scaling and performance tuning.
Expert knowledge in software design patterns covering GoF patterns, architectural patterns, and modern design principles. Apply appropriate patterns to improve code maintainability, scalability, and extensibility. Use this skill when designing new software components, refactoring existing code, reviewing code for design quality, resolving complex design problems, or need guidance on applying SOLID principles and identifying code smells.
Enterprise Java development skill covering Spring ecosystem, microservices, design patterns, performance optimization, and Java best practices. Use this skill when building enterprise Java applications, working with Spring Boot, implementing microservices, or need guidance on Java architecture and performance tuning.
Professional React development skill covering Next.js, React Server Components, Tailwind CSS, and the React ecosystem. Use this skill when building modern React applications, implementing Next.js features, creating UI components with shadcn/ui, or working with complex state management.
Professional frontend development skill covering Svelte, SvelteKit, shadcn-svelte, and Bun ecosystem. Use this skill when building modern web applications, creating UI components, implementing state management, handling forms, or working with TypeScript-based frontend architectures. Ideal for projects requiring reactive frameworks, server-side rendering, or type-safe component development.
| name | juejin-article-to-markdown |
| description | 将掘金(juejin.cn)文章转换为整洁的 Markdown 文件,自动去除导航栏、评论区、推荐文章等无关内容,正确处理代码块、表格、图片等格式。当用户提供掘金文章链接或要求保存掘金文章时使用此技能。 |
掘金文章页面包含大量无关内容(导航栏、侧边栏、评论区、推荐文章、代码块按钮等),直接复制粘贴会产生格式问题。此 Skill 提供一套完整的处理流程,将掘金文章转换为干净、规范的 Markdown 文件。
juejin.cn/post/)同时获取 HTML 和 Markdown 两种格式(并行请求):
# 请求 1:HTML 格式(用于提取元信息和图片位置)
mcp__ScraplingServer__stealthy_fetch
- url: 掘金文章链接
- extraction_type: html
- main_content_only: true
- wait: 2000
# 请求 2:Markdown 格式(用于提取正文内容)
mcp__ScraplingServer__stealthy_fetch
- url: 掘金文章链接
- extraction_type: markdown
- main_content_only: true
- wait: 2000
从 HTML 或 Markdown 开头提取:
| 字段 | 提取方式 | 说明 |
|---|---|---|
| 标题 | <h1> 或 # 标题 | 文章主标题 |
| 作者 | 作者名称字段 | 作者用户名 |
| 发布日期 | 日期字段 | 格式:YYYY-MM-DD |
| 阅读量 | 阅读数字段 | 可选 |
| 标签 | 标签列表 | 文章标签 |
| 专栏 | 专栏名称 | 可选 |
必须移除的内容:
导航栏和页眉
侧边栏和推荐
评论区
页脚和推广
代码块无关内容
互动元素
掘金代码块会包含无关的按钮文字,需要清理:
清理模式:
# 原始(有问题)
```bash
体验AI代码助手
代码解读
复制代码
# 实际代码
git clone https://github.com/xxx
# 实际代码
git clone https://github.com/xxx
**处理规则:**
1. 识别代码块开始(```language)
2. 删除代码块开头的空白行
3. 删除"体验AI代码助手"、"代码解读"、"复制代码"等无关行
4. 保留实际代码内容
5. 确保代码块正确闭合
### 第五步:处理图片
**掘金图片特点:**
| 域名 | 处理方式 | 说明 |
|------|---------|------|
| `p*-xtjj-sign.byteimg.com` | **保留** | 文章正文图片 |
| `p*-juejin-sign.byteimg.com` | **保留** | 文章正文图片 |
| `p1-juejin.byteimg.com` | **保留** | 封面图等 |
| `lf-web-assets.juejin.cn` | **丢弃** | Logo、图标等装饰 |
| `p*-passport.byteacctimg.com` | **丢弃** | 用户头像 |
**图片链接格式:**
**处理方式:**
- 保留完整链接(包括签名参数)
- 链接有时效性,但通常较长
### 第六步:处理链接
**掘金外链跳转格式:**
https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2Fxxx
**处理规则:**
1. 解析 `target` 参数,提取真实 URL
2. URL 解码(%3A → :, %2F → /)
3. 替换为真实链接
**示例:**
```markdown
# 原始
[GitHub 仓库](https://link.juejin.cn?target=https%3A%2F%2Fgithub.com%2F598572%2Fxzll-im-server)
# 处理后
[GitHub 仓库](https://github.com/598572/xzll-im-server)
掘金使用标准 Markdown 表格格式,需要确保:
| --- | --- |):---, :---:, ---:)表格示例:
| 字段 | 类型 | 说明 |
| --- | --- | --- |
| id | Long | 全局唯一ID |
| name | String | 用户名 |
掘金使用 bytemd-mermaid 类渲染 Mermaid 图表,需要特殊处理。
重要发现:原始 Mermaid 代码存储在 window.__NUXT__ 数据中
掘金在服务端将 Mermaid 代码渲染为 SVG 用于页面显示,但原始 Mermaid 代码保存在页面的 window.__NUXT__ JavaScript 变量中。
__NUXT__ 提取原始 Mermaid 代码(推荐)优点:保留可编辑的源码,Obsidian/Typora 等工具可直接渲染
提取方法:
<script>window.__NUXT__= 标签\n → 换行,\uXXXX → Unicode 字符)```mermaid\n...\n``` 代码块Python 示例代码:
import re
# 找到 __NUXT__ 脚本
script_match = re.search(r'<script[^>]*>window\.__NUXT__\s*=', html_content)
if script_match:
script_start = script_match.start()
script_end = html_content.find('</script>', script_start)
script_content = html_content[script_start:script_end]
# 解码 Unicode 转义
decoded = re.sub(r'\\u([0-9a-fA-F]{4})',
lambda m: chr(int(m.group(1), 16)), script_content)
decoded = decoded.replace('\\n', '\n')
# 提取 Mermaid 代码块
pattern = r'```mermaid\n(.*?)```'
mermaid_blocks = re.findall(pattern, decoded, re.DOTALL)
输出格式:
\`\`\`mermaid
sequenceDiagram
participant C as 客户端
C->>G: 登录请求
\`\`\`
适用场景:__NUXT__ 中没有 Mermaid 代码时
提取方法:
从 HTML 中查找以下结构:
<div class="bytemd-mermaid" style="line-height: initial;">
<svg aria-roledescription="flowchart-v2" ...>...</svg>
</div>
处理步骤:
class="bytemd-mermaid" 元素<svg> 内容<svg>...</svg> 内容.svg 文件,命名为对应章节标题注意事项:
bytemd-mermaid div 可能是空的(作者未添加内容),需要跳过:
如果无法提取原始代码,可以截图渲染后的 SVG:
// Playwright 截图示例
const element = await page.$('.bytemd-mermaid svg');
await element.screenshot({ path: 'mermaid-diagram.png' });
注意:此方法需要额外的图片存储。
| 场景 | 推荐方案 |
|---|---|
| 使用 Obsidian/Typora | 方案 A(保留代码) |
| 需要通用兼容 | 方案 B(mermaid.ink 图片) |
| 离线使用 | 方案 C(截图保存) |
有序列表:
1. 第一步
2. 第二步
3. 第三步
无序列表:
- 项目一
- 项目二
- 项目三
嵌套列表:
1. 主项目
- 子项目一
- 子项目二
2. 下一个主项目
处理规则:
-,有序用 1. 2. 等)在文件开头添加 YAML frontmatter:
---
title: 文章标题
author: 作者名称
source: 原始链接
date_saved: 保存日期
tags: [掘金, 其他标签]
---
文件命名规则:
YYYY-MM-DD-标题摘要.md2026-03-19-开源分布式IM系统介绍.md原因:掘金代码块包含按钮文字
解决方案:
清理代码块开头的前 3-5 行无关内容
保留实际代码
确保语言标识正确
原因:使用掘金跳转链接
解决方案:
解析 link.juejin.cn?target=xxx
提取并解码真实 URL
直接使用真实链接
原因:
解决方案:
保留 p*-xtjj-sign.byteimg.com 和 p*-juejin-sign.byteimg.com 域名图片
丢弃 lf-web-assets.juejin.cn 和 passport 相关图片
原因:表格前后缺少空行
解决方案:
确保表格前后各有一个空行
检查表头分隔符
确保每行列数一致
原因:
window.__NUXT__ 数据中提取原始 Mermaid 代码bytemd-mermaid div 可能为空(作者未添加内容)解决方案:
方案 A:从 __NUXT__ 提取原始 Mermaid 代码(推荐)
- 查找 <script>window.__NUXT__= 标签
- 解码 Unicode 转义序列(\uXXXX)
- 解码换行符(\n → 实际换行)
- 用正则提取 ```mermaid ... ``` 代码块
- 直接嵌入 Markdown 文件
方案 B:提取 SVG 保存为文件(备选)
- 仅当 __NUXT__ 中没有 Mermaid 代码时使用
- 查找 .bytemd-mermaid 内的 <svg> 标签
- 保存为 .svg 文件
方案 C:跳过空图表
- 检查 bytemd-mermaid div 是否包含 SVG
- 如果为空,保留章节标题但不添加图表
- 这是作者原文就没有图表,不是转换问题
代码示例(提取 Mermaid 源码):
import re
# 找到 __NUXT__ 脚本
script_match = re.search(r'<script[^>]*>window\.__NUXT__\s*=', html)
if script_match:
script_end = html.find('</script>', script_match.start())
script = html[script_match.start():script_end]
# 解码转义
decoded = re.sub(r'\\u([0-9a-fA-F]{4})',
lambda m: chr(int(m.group(1), 16)), script)
decoded = decoded.replace('\\n', '\n')
# 提取 Mermaid 代码
blocks = re.findall(r'```mermaid\n(.*?)```', decoded, re.DOTALL)
for code in blocks:
print(code) # 输出原始 Mermaid 代码
---
title: {{文章标题}}
author: {{作者}}
source: {{原始链接}}
date_saved: {{保存日期}}
tags: [掘金, {{其他标签}}]
---
# {{文章标题}}
> 作者:{{作者名称}}
> 来源:掘金
> 链接:{{原始链接}}
> 发布日期:{{发布日期}}

{{正文内容}}
---
*本文由 [juejin-article-to-markdown] 自动转换*
*保存自掘金文章,仅供个人学习使用*
用户输入:
保存这篇掘金文章 https://juejin.cn/post/7549107076905173028
处理步骤:
| 特性 | 微信公众号 | 掘金 |
|---|---|---|
| 图片域名 | mmbiz.qpic.cn | byteimg.com |
| 外链处理 | 通常无外链 | 需解析 link.juejin.cn |
| 代码块 | 无特殊按钮 | 需清理按钮文字 |
| Mermaid图表 | 无 | 需提取原始代码或转图片 |
| 评论 | 需移除评论区 | 需移除评论区 |
| 推荐 | 无推荐文章 | 需移除推荐列表 |
| 目录 | 通常无目录 | 可选择性保留 |
bytemd-mermaid div 可能为空(作者未添加内容)wechat-article-to-markdown - 处理微信公众号文章pdf - 处理 PDF 文件docx - 处理 Word 文档