飞书知识库没有公开 API 可以直接拉取全部文档树,爬虫但网页端本身会调用内部接口返回 JSON 数据。下载抓包能看到
/space/api/wiki/v2/tree/get_info/这类请求,飞书带上 cookie 里的知识 session 就能拿到节点列表。我上周帮朋友备份一个三百多篇的爬虫技术 wiki,走的下载就是这条路。先搞清楚一件事:飞书的飞书 wiki 和 drive 是两套东西。知识库页面左侧那棵树,知识每个节点有
wiki_token,爬虫根节点叫root_token。下载调get_info时传token和space_id,飞书返回的知识children数组里嵌套着子节点。翻页参数是爬虫page_size和page_token,默认一页给 50 个,下载得循环取直到has_more为 false。飞书拿到树之后别急着写文件。每个叶子节点对应一个文档,要再调
/space/api/docx/get_content/换到 Markdown 或 HTML。这里有个坑:返回的content字段是块结构,不是纯文本。图片、表格、代码块都藏在block_type里,得自己写解析器递归展开。我一开始偷懒只取text字段,结果代码块全丢了缩进,表格变成一堆竖线。Cookie 怎么拿?浏览器登录飞书后按 F12,Network 面板随便点一个 wiki 请求,复制
Cookie请求头整串。注意session有效期大概 7 天,过期了脚本会收到 401。别用账号密码模拟登录,飞书有风控,验证码和滑块够你喝一壶。请求头里
User-Agent和Referer必须带。Referer 填https://xxx.feishu.cn/wiki/对应你的租户域名,否则接口返回code: 99991663权限错误。频率控制别太狠,我试过每秒 5 个请求,跑了十分钟就被限流,返回 429。改成每秒 1 个,加 0.5 秒随机延迟,三百篇跑了八分钟稳得很。代码结构大概这样:先递归爬树存成 JSON,再遍历叶子节点下载内容。用
requests.Session()保持连接,concurrent.futures开 3 个线程就够了。下载的 Markdown 按树形目录存,文件名用节点标题,注意替换/和:这些非法字符。图片要单独处理,get_content返回的图片是file_token,得再调/space/api/box/stream/download/拿二进制流。有个细节值得说:飞书文档里的引用块和 callout 块,API 返回的
block_type是 34 和 19,解析时容易漏。我写了个映射表,把 34 转成>开头,19 转成:::tip这种自定义标记。表格更麻烦,table块里嵌table_cell,每个 cell 又是独立的 block 数组,得两层循环拼 Markdown 表格。最后提醒一句:爬自己有权访问的知识库没问题,但别拿去公开传播。飞书日志会记录
顶: 55536踩: 69get_content的调用来源,频率异常会触发安全告警。我朋友那个 wiki 是内部技术文档,备份完就删了脚本里的 cookie。你要是想长期同步,建议走官方开放平台申请wiki:wiki:readonly权限,虽然要企业管理员审批,但至少不会哪天突然被封。






评论专区