
1. 项目概述最近在知乎上查找资料时发现很多优质内容无法直接导出保存手动复制效率太低。于是花了几天时间开发了一个油猴脚本专门用于爬取知乎问答和文章内容。这个脚本不仅能一键抓取文字内容还能自动整理格式、下载图片甚至支持批量导出Markdown文件。2. 核心功能解析2.1 内容抓取机制脚本的核心是通过知乎的开放接口获取数据。经过测试发现知乎的问答和文章都有对应的API接口问答接口https://www.zhihu.com/api/v4/questions/[问题ID]/answers文章接口https://www.zhihu.com/api/v4/articles/[文章ID]通过分析接口返回的JSON数据结构可以提取出标题、作者、正文内容、点赞数等关键信息。这里需要注意几个技术细节知乎对未登录用户有访问频率限制所以脚本中需要处理429状态码正文内容是HTML格式需要做清洗和转换图片链接需要特殊处理有些是防盗链的2.2 油猴脚本实现油猴(Tampermonkey)脚本的优势在于可以直接在浏览器环境运行无需额外安装爬虫框架。主要实现逻辑如下// UserScript // name 知乎内容导出工具 // namespace http://tampermonkey.net/ // version 1.0 // description 一键导出知乎问答和文章内容 // author YourName // match https://www.zhihu.com/question/* // match https://zhuanlan.zhihu.com/p/* // grant GM_xmlhttpRequest // grant GM_download // /UserScript (function() { use strict; // 添加导出按钮 function addExportButton() { const btn document.createElement(button); btn.textContent 导出内容; btn.style.position fixed; btn.style.right 20px; btn.style.bottom 20px; btn.style.zIndex 9999; btn.addEventListener(click, exportContent); document.body.appendChild(btn); } // 主导出逻辑 async function exportContent() { // 获取当前页面类型和ID const isQuestion window.location.href.includes(/question/); const id isQuestion ? window.location.pathname.split(/)[2] : window.location.pathname.split(/)[2]; // 调用对应API const apiUrl isQuestion ? https://www.zhihu.com/api/v4/questions/${id}/answers : https://www.zhihu.com/api/v4/articles/${id}; try { const data await fetchData(apiUrl); processContent(data, isQuestion); } catch (error) { console.error(导出失败:, error); } } // 其他辅助函数... })();3. 关键技术实现3.1 跨域请求处理油猴脚本通过GM_xmlhttpRequest方法实现跨域请求这是与普通爬虫最大的区别。需要注意需要添加grant GM_xmlhttpRequest声明请求头需要模拟浏览器行为要处理知乎的CSRF Token3.2 内容清洗与转换从API获取的正文内容是HTML格式需要转换为Markdown。这里使用Turndown.js库进行转换function htmlToMarkdown(html) { const turndownService new Turndown({ headingStyle: atx, bulletListMarker: -, codeBlockStyle: fenced }); // 添加自定义规则处理知乎特有元素 turndownService.addRule(zhihu-image, { filter: img, replacement: function(content, node) { const alt node.alt || ; const src node.getAttribute(data-original) || node.src; return ; } }); return turndownService.turndown(html); }3.3 图片下载处理知乎图片有防盗链机制直接使用GM_download可能失败。解决方案是先获取图片的真实URL去掉参数添加Referer请求头使用Blob对象中转下载4. 使用说明与注意事项4.1 安装与使用步骤安装Tampermonkey扩展新建脚本粘贴完整代码访问知乎问答或文章页面点击右下角的导出内容按钮等待处理完成后下载Markdown文件4.2 常见问题解决导出按钮不显示检查脚本是否启用确认访问的是知乎问答或专栏文章页面刷新页面后等待3秒内容获取不完整可能是登录状态过期重新登录知乎检查控制台是否有错误信息尝试降低请求频率图片下载失败确认网络环境正常检查脚本是否有下载权限可能是知乎更新了防盗链机制5. 优化方向与扩展功能目前脚本已经实现了基础功能后续可以考虑批量导出用户的所有回答增加导出为PDF的功能支持导出时自动添加目录实现定时自动备份功能提示使用此类工具时请注意遵守知乎的用户协议不要过度频繁请求建议间隔至少5秒以上。