问答

怎么批量获取小红书笔记里的全部原图?

简短回答

用笔记 ID 或链接调 okdata 的小红书笔记详情接口,images 字段按顺序列出笔记里的每一张图,用的是小红书提供的最大尺寸,同时附带正文和互动数据,每篇 $0.02。下载图片文件只是普通的 HTTP 请求;100 篇笔记共 $2.00。

设计团队想做一块灵感板:把“小户型收纳”下收藏最多的 100 篇笔记的图全部按顺序收进来,配上文案,看看什么样的布局最受欢迎。截图会糊,顺序也会乱;在 App 里一张张保存,几个小时就过去了。笔记详情会按顺序返回每张图片的链接,所以每篇一次调用,再加上下载就行。

用哪个接口

小红书笔记详情接受 id 或 url。返回的 images 数组按博主发布时的顺序列出全部图片,取的是能拿到的最大尺寸。同一个返回里还有标题、全文、话题标签、发布时间、点赞、收藏和评论数,灵感板上可以一并写明每篇入选的理由。

先确定要哪些笔记:

费用

步骤 调用次数 费用
找 100 篇热门笔记 搜索 5 页 $0.10
100 篇的图片和正文 100 $2.00
合计 105 {{cost:xiaohongshu.notes.search5+xiaohongshu.notes.get100}}

下载图片文件本身不是 API 调用,我们这边不收费。

Python 示例

import os, pathlib, requests

API = "https://api.okdata.online/v1/xiaohongshu/notes/get"
HEAD = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

note = requests.get(API, headers=HEAD, params={"id": "6650a1b2000000001e00abcd"}, timeout=60).json()["data"]["item"]
folder = pathlib.Path(note["id"]); folder.mkdir(exist_ok=True)
for i, src in enumerate(note["images"] or [], 1):
    (folder / f"{i:02d}.jpg").write_bytes(requests.get(src, timeout=60).content)
(folder / "caption.txt").write_text(f"{note['title']}\n\n{note['text']}", encoding="utf-8")

拿到链接后尽快下载:图片链接来自小红书的 CDN,本来就不是永久地址。

不包含的内容

  • 视频笔记的视频文件。视频笔记返回正文、互动数据和小红书给出的图片列表,一般是封面。要保存视频,用下载工具更合适。
  • 评论区里的图片。
  • 私密笔记的任何内容,返回 not_found,不扣费。

版权和其他办法

图片的版权属于博主。做内部研究的灵感板是一回事,拿去再发布是另一回事,需要取得授权。XHS-Downloader 和它的浏览器脚本可以用你自己的登录态保存图片和视频,适合偶尔下载几篇。如果是跨大量笔记做研究,内容调研方案讲了取数之前怎么挑笔记。

更新于