A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品、用户链接;采集小红书作品信息;提取小红书作品下载地址;下载小红书作品文件
🔥 小红书链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品链接、用户链接;采集小红书作品信息;提取小红书作品下载地址;下载小红书作品文件!
🔥 “小红书”、“XiaoHongShu”、“RedNote” 含义相同,本项目统称为 “小红书”
前往 bilibili 观看演示;前往 YouTube 观看演示
https://www.xiaohongshu.com/explore/作品ID?xsec_token=XXXhttps://www.xiaohongshu.com/discovery/item/作品ID?xsec_token=XXXhttps://www.xiaohongshu.com/user/profile/作者ID/作品ID?xsec_token=XXXhttps://xhslink.com/分享码支持单次输入多个作品链接,链接之间使用空格分隔;程序会自动提取有效链接,无需额外处理!
⭐ 推荐使用 Windows 终端 (Windows 11 默认终端)运行程序以便获得最佳显示效果!
如果仅需下载作品文件,建议选择 程序运行 或 Docker 运行;如果有其他需求,建议选择 源码运行!
⚠️ Cookie 配置为非强制项;如遇功能异常,建议配置或更新 Cookie 后再次尝试!
⚠️ 未设置 Cookie 时,视频作品只能下载低分辨率文件;建议配置 Cookie 以获取更高画质(无需登录账号)!
⭐ Mac OS、Windows 10 及以上用户可前往 Releases 或者 Actions 下载程序压缩包,解压后打开程序文件夹,双击运行 main 即可使用。
⭐ 本项目包含自动构建可执行文件的 GitHub Actions,使用者可以随时使用 GitHub Actions 将最新源码构建为可执行文件!
⭐ 自动构建可执行文件教程请查阅本文档的 构建可执行文件指南 部分;如果需要更加详细的图文教程,请 查阅文章!
注意:由于 Mac OS 平台的可执行文件 main 未经过代码签名,首次运行时会受到系统安全限制。请先在终端执行 xattr -cr 项目文件夹路径 命令移除安全标记,执行一次后即可正常运行。
若通过此方式使用程序,文件默认下载路径为:.\_internal\Volume\Download;配置文件路径为:.\_internal\Volume\settings.json
方案一:下载并解压文件,将旧版本的 _internal\Volume 文件夹复制到新版本的 _internal 文件夹。
方案二:下载并解压文件(不要运行程序),复制全部文件,直接覆盖旧版本文件。
≥3.12 版本的 Python 解释器python -m venv venv 命令创建虚拟环境(可选).\venv\Scripts\activate.ps1 或者 venv\Scripts\activate 命令激活虚拟环境(可选)pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 命令安装程序所需模块python .\main.py 或者 python main.py 命令启动 XHS-Downloaderuv sync --no-dev 命令同步环境依赖uv run main.py 命令启动 XHS-DownloaderDockerfile 文件构建镜像docker pull joeanamier/xhs-downloader 命令拉取镜像docker pull ghcr.io/joeanamier/xhs-downloader 命令拉取镜像docker run --name 容器名称(可选) -p 主机端口号:5556 -v xhs_downloader_volume:/app/Volume -it <镜像名称>docker run --name 容器名称(可选) -p 主机端口号:5556 -v xhs_downloader_volume:/app/Volume -it <镜像名称> python main.py apidocker run --name 容器名称(可选) -p 主机端口号:5556 -v xhs_downloader_volume:/app/Volume -it <镜像名称> python main.py mcp<镜像名称> 需与您在第一步中使用的镜像名称保持一致(joeanamier/xhs-downloader 或 ghcr.io/joeanamier/xhs-downloader)
docker start -i 容器名称/容器 IDdocker restart -i 容器名称/容器 IDDocker 运行项目时不支持 命令行调用模式,无法使用 读取剪贴板 与 监听剪贴板 功能,可以正常粘贴内容,其他功能如有异常请反馈!
项目支持命令行运行模式,若想要下载图文作品的部分图片,可以使用此模式设置需要下载的图片序号!
注意:未设置 --index 参数时,支持传入多个作品链接,全部链接需要使用引号包围,链接之间使用空格分隔;已设置 --index 参数时,不支持传入多个作品链接,即使传入多个作品链接,程序仅处理首个作品链接!
bool 类型参数支持使用 true、false、1、0、yes、no、on 或 off(不区分大小写)来设置。
该功能已失效,请参考 获取 Cookie 教程!
可以使用命令行实现 从浏览器读取 Cookie 并写入配置文件!
命令示例:python .\main.py --browser_cookie Chrome --update_settings
兼容性提醒:此功能依赖的第三方模块已长期未更新,可能无法正常支持最新浏览器版本。若功能出现异常,请尝试手动获取 Cookie!
服务器模式包含 API 模式和 MCP 模式!
启动:运行命令:python .\main.py api
关闭:按下 Ctrl + C 关闭服务器
访问 http://127.0.0.1:5556/docs 或者 http://127.0.0.1:5556/redoc;你会看到自动生成的交互式 API 文档!
请求接口:/xhs/detail
请求方法:POST
请求格式:JSON
请求参数:
| 参数 | 类型 | 含义 | 默认值 |
|---|---|---|---|
| url | str | 小红书作品链接,自动提取,不支持多链接;必需参数 | 无 |
| download | bool | 是否下载作品文件;设置为 true 将会耗费更多时间;可选参数 | false |
| index | list[int] | 下载指定序号的图片文件,仅对图文作品生效;download 参数设置为 false 时不生效;可选参数 | null |
| cookie | str | 请求数据时使用的 Cookie;可选参数 | 配置文件 cookie 参数 |
| proxy | str | 请求数据时使用的代理;可选参数 | 配置文件 proxy 参数 |
| skip | bool | 是否跳过存在下载记录的作品;设置为 true 将不会返回存在下载记录的作品数据;可选参数 | false |
代码示例:
async def example_api():
"""通过 API 设置参数,适合二次开发"""
server = "http://127.0.0.1:5556/xhs/detail"
data = {
"url": "", # 必需参数
"download": True,
"index": [
3,
6,
9,
],
"proxy": "http://127.0.0.1:10808",
}
response = post(server, json=data, timeout=10)
print(response.json())
启动:运行命令:python .\main.py mcp
关闭:按下 Ctrl + C 关闭服务器
MCP URL:http://127.0.0.1:5556/mcp/
下载图文作品时可以指定需要下载的图片序号;默认不返回作品信息,如需返回作品信息,请在对话时明确表述。
settings.json 设置 proxy 参数./Volume/Download/ExploreData.db 文件./Volume/ExploreID.db 文件如果您的浏览器安装了 Tampermonkey 浏览器扩展程序,可以使用用户脚本体验项目功能!
用户脚本链接(右键单击复制链接):master 分支、develop 分支
提示:使用 XHS-Downloader 用户脚本批量提取作品链接,搭配 XHS-Downloader 程序可以实现批量下载作品文件!
修改用户脚本语言
⭐ 本项目支持通过浏览器用户脚本与主程序联动,实现一键推送下载任务。
script_server 参数设置为 true推送下载任务 选项自动滚动页面功能代码已重构,该功能默认关闭!启用该功能可能会被小红书检测为自动化操作,从而导致账号受到风控或封禁风险!
如果有其他需求,可以根据 example.py 的注释提示进行代码调用或修改!
async def example():
"""通过代码设置参数,适合二次开发"""
# 示例链接
demo_link = "https://www.xiaohongshu.com/explore/XXX?xsec_token=XXX"
# 实例对象
work_path = "D:\\" # 作品数据/文件保存根路径,默认值:项目根路径
folder_name = "Download" # 作品文件储存文件夹名称(自动创建),默认值:Download
name_format = "作品标题 作品描述"
user_agent = "" # User-Agent
cookie = "" # 小红书网页版 Cookie,无需登录,可选参数,登录状态对数据采集有影响
proxy = None # 网络代理
timeout = 5 # 请求数据超时限制,单位:秒,默认值:10
chunk = 1024 * 1024 * 10 # 下载文件时,每次从服务器获取的数据块大小,单位:字节
max_retry = 2 # 请求数据失败时,重试的最大次数,单位:秒,默认值:5
record_data = False # 是否保存作品数据至文件
image_format = "WEBP" # 图文作品文件下载格式,支持:AUTO、PNG、WEBP、JPEG、HEIC
folder_mode = False # 是否将每个作品的文件储存至单独的文件夹
image_download = True # 图文、图集作品文件下载开关
video_download = True # 视频作品文件下载开关
live_download = False # 图文动图文件下载开关
download_record = True # 是否记录下载成功的作品 ID
language = "zh_CN" # 设置程序提示语言
author_archive = True # 是否将每个作者的作品存至单独的文件夹
write_mtime = True # 是否将作品文件的 修改时间 修改为作品的发布时间
# read_cookie = None # 读取浏览器 Cookie,支持设置浏览器名称(字符串)或者浏览器序号(整数),设置为 None 代表不读取
# async with XHS() as xhs:
# pass # 使用默认参数
async with XHS(
work_path=work_path,
folder_name=folder_name,
name_format=name_format,
user_agent=user_agent,
cookie=cookie,
proxy=proxy,
timeout=timeout,
chunk=chunk,
max_retry=max_retry,
record_data=record_data,
image_format=image_format,
folder_mode=folder_mode,
image_download=image_download,
video_download=video_download,
live_download=live_download,
download_record=download_record,
language=language,
# read_cookie=read_cookie,
author_archive=author_archive,
write_mtime=write_mtime,
) as xhs: # 使用自定义参数
download = True # 是否下载作品文件,默认值:False
# 返回作品详细信息,包括下载地址
# 获取数据失败时返回空字典
print(
await xhs.extract(
demo_link,
download,
index=[
1,
2,
5,
],
)
)
项目使用 pyperclip 实现读取剪贴板功能,该模块在不同的系统上会有差异。
在 Windows 上,不需要额外的模块。
在 Mac 上,该模块使用 pbcopy 和 pbpaste 命令,这些命令应该随操作系统一起提供。
在 Linux 上,该模块使用 xclip 或 xsel 命令,这些命令应该随操作系统一起提供。否则,请运行 "sudo apt-get install xclip" 或 "sudo apt-get install xsel"(注意:xsel 似乎并不总是有效)
在其他 Linux 系统上,你需要安装 qtpy 或 PyQT5 模块。
项目根目录下的 ./Volume/settings.json 文件,首次运行自动生成,可以自定义程序运行参数;如果设置了无效的参数值,程序将会使用参数默认值!
如果您在程序界面修改配置时无法正常交互,可以直接编辑配置文件;如果您的计算机没有合适的程序编辑 JSON 文件,建议使用 在线工具 编辑配置文件内容,修改后需要重启软件才能生效。
| 参数 | 类型 | 含义 | 默认值 |
|---|---|---|---|
| mapping_data | str: str | #作者别名映射表,格式:作者ID: 作者别名 | 无 |
| work_path | str | 作品数据 / 文件保存根路径 | 项目根路径/Volume |
| folder_name | str | 作品文件储存文件夹名称 | Download |
| name_format | str | 作品文件名称格式,字段之间使用空格分隔,支持字段:收藏数量、评论数量、分享数量、点赞数量、作品标签、作品ID、作品标题、作品描述、作品类型、发布时间、最后更新时间、作者昵称、作者ID | 发布时间 作者昵称 作品标题 |
| user_agent | str | 浏览器 User Agent | 内置 Chrome User Agent |
| cookie | str | 小红书网页版 Cookie,无需登录,非必需参数! | 无 |
| proxy | str | 设置程序代理 | null |
| timeout | int | 请求数据超时限制,单位:秒 | 10 |
| chunk | int | 下载文件时,每次从服务器获取的数据块大小,单位:字节 | 2097152(2 MB) |
| max_retry | int | 请求数据失败时,重试的最大次数,单位:秒 | 5 |
| record_data | bool | 是否保存作品数据至文件,保存格式:SQLite | false |
| image_format | str | 图文作品文件下载格式,支持:AUTO、PNG、WEBP、JPEG、HEIC部分作品没有 HEIC 格式的文件,此时下载的文件可能为 WEBP 格式!设置为 AUTO 时表示动态格式,实际格式取决于服务器响应数据! | JPEG |
| image_download | bool | 图文、图集作品文件下载开关 | true |
| video_download | bool | 视频作品文件下载开关 | true |
| live_download | bool | 图文动图文件下载开关 | false |
| video_preference | str | 视频作品文件下载偏好;含义:resolution:分辨率优先;bitrate:码率优先;size:文件大小优先 | resolution |
| folder_mode | bool | 是否将每个作品的文件储存至单独的文件夹;文件夹名称与文件名称保持一致 | false |
| download_record | bool | 是否记录下载成功的作品 ID,如果开启,程序将会自动跳过下载存在记录的作品 | true |
| author_archive | bool | #是否将每个作者的作品储存至单独的文件夹;文件夹名称为 作者ID_作者昵称 | false |
| write_mtime | bool | 是否将作品文件的 修改时间 属性修改为作品的发布时间 | false |
| language | str | 设置程序语言,目前支持:zh_CN、en_US | zh_CN |
| script_server | bool | 是否开启用户脚本服务器,用于接收浏览器用户脚本的下载任务(TUI、MCP 和 API 模式生效) | false |
其他说明:user_agent参数获取示例;强烈建议根据实际浏览器信息进行设置!
https://www.xiaohongshu.com/exploreF12 打开开发人员工具网络 选项卡保留日志过滤 输入框输入 cookie-name:web_sessionFetch/XHR 筛选器网络 选项卡选择任意数据包(如果无数据包,重复步骤7)
XHS-Downloader 会将下载过的作品 ID 储存至数据库,当重复下载相同的作品时,XHS-Downloader 会自动跳过该作品的文件下载(即使作品文件不存在),如果想要重新下载作品文件,请先删除数据库中对应的作品 ID,再使用 XHS-Downloader 下载作品文件!
该功能默认开启,如果关闭该功能,XHS-Downloader 会检查文件是否存在,若文件存在则跳过下载!
本指南将引导您通过 Fork 本仓库并执行 GitHub Actions 自动完成基于最新源码的程序构建和打包!
https://github.com/your-username/this-repo资源使用:
代码修改:
与主仓库保持同步:
A: 请确认您已按照步骤 启用 Actions,否则 GitHub 会禁止运行工作流
A:
A: 由于权限限制,您无法直接触发主仓库的 Actions。请通过 Fork 仓库的方式执行打包流程
不想在本地折腾环境?可以把 XHS-Downloader 作为一个 Agent 接入 Bloome:零配置,一键在云端运行,浏览器和手机都能用,还能把配置好的 Agent 直接分享给他人,无需各自部署!
立即体验:https://bloome.im/login?ref=KUyJQU6F
ZMTO:一家专业的云基础设施提供商,以可靠的尖端技术与专业支持,提供高效的解决方案,并为符合条件的开源项目提供企业级VPS基础设施,支持开源生态系统的可持续发展与创新。
如果 XHS-Downloader 对您有帮助,请考虑为它点个 Star ⭐,感谢您的支持!
| 微信(WeChat) | 支付宝(Alipay) |
|---|---|
![]() | ![]() |
如果您愿意,可以考虑提供资助为 XHS-Downloader 提供额外的支持!
欢迎对本项目做出贡献!为了保持代码库的整洁、高效和易于维护,请仔细阅读以下指南,以确保您的贡献能够顺利被接受和整合。
develop 分支拉取最新的代码,以此为基础进行修改;这有助于避免合并冲突并保证您的改动基于最新的项目状态。<类型>: <简短描述>develop 分支;这是为了给维护者一个缓冲区,在最终合并到 master
分支之前进行额外的测试和审查。参考资料:
说明:QQ 群聊仅限于讨论项目使用问题,严禁发布任何广告,严禁讨论任何账号交易、账号流量、流量变现、灰色产业等相关的内容!
✨ 作者的其他开源项目:
MCP server integration for DaVinci Resolve Studio
Run Claude Code as an MCP server so any agent can delegate coding tasks to it
Browser automation using accessibility snapshots instead of screenshots
A Jetbrains IDE IntelliJ plugin aimed to provide coding agents the ability to leverage intelliJ's indexing of the codeba