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