XHS-Downloader v2.2 – 小红书图文视频下载工具
简介
XHS-Downloader 是一款免费开源的轻量级小红书链接提取作品采集下载工具,基于 AIOHTTP 模块实现。支持提取账号发布、收藏、点赞作品链接,提取搜索结果作品链接、用户链接,采集小红书作品信息,提取小红书作品下载地址,下载小红书无水印作品文件!
软件截图
演示视频
软件功能
程序功能
- ✅ 采集小红书作品信息
- ✅ 提取小红书作品下载地址
- ✅ 下载小红书无水印作品文件
- ✅ 下载小红书 livePhoto 文件(非无水印)
- ✅ 自动跳过已下载的作品文件
- ✅ 作品文件完整性处理机制
- ✅ 自定义图文作品文件下载格式
- ✅ 持久化储存作品信息至文件
- ✅ 作品文件储存至单独文件夹
- ✅ 后台监听剪贴板下载作品
- ✅ 记录已下载作品 ID
- ✅ 支持命令行下载作品文件
- ✅ 从浏览器读取 Cookie
- ✅ 自定义文件名称格式
- ✅ 支持 API 调用功能
- ✅ 支持文件断点续传下载
脚本功能
- ✅ 下载小红书无水印作品文件
- ✅ 提取发现页面作品链接
- ✅ 提取账号发布作品链接
- ✅ 提取账号收藏作品链接
- ✅ 提取账号点赞作品链接
- ✅ 提取搜索结果作品链接
- ✅ 提取搜索结果用户链接
支持的链接格式:
- https://www.xiaohongshu.com/explore/作品ID
- https://www.xiaohongshu.com/discovery/item/作品ID
- https://xhslink.com/分享码
支持单次输入多个作品链接,链接之间使用空格分隔;程序会自动提取有效链接,无需额外处理!
使用
推荐使用 Windows 终端 (Windows 11 自带默认终端)运行程序以便获得最佳显示效果!
文件默认下载路径:.\_internal\Download
配置文件路径:.\_internal\settings.json
如果仅需下载无水印作品文件,建议选择 程序运行 或 Docker 运行;如果有其他需求,建议选择 源码运行!
建议自行设置 cookie
参数,若不设置该参数,程序功能可能无法正常使用!
程序运行
Mac OS(ARM)、Windows 10 及以上用户可下载程序压缩包,解压后打开程序文件夹,双击运行 main
即可使用。
若通过此方式使用程序,文件默认下载路径为:.\_internal\Download
;配置文件路径为:.\_internal\settings.json
Docker 运行
- 获取镜像
- 方式一:使用
Dockerfile
文件构建镜像 - 方式二:使用
docker pull joeanamier/xhs-downloader
命令拉取镜像
- 方式一:使用
- 创建容器
- TUI 模式:
docker run -it joeanamier/xhs-downloader
- API 模式:
docker run -it joeanamier/xhs-downloader python main.py server
- TUI 模式:
Docker 运行项目时不支持 命令行调用模式,无法使用 读取剪贴板 与 监听剪贴板 功能,可以正常粘贴内容,其他功能如有异常请反馈!
源码运行
- 安装版本号不低于
3.12
的 Python 解释器 - 下载本项目最新的源码至本地
- 打开终端,切换至项目根路径
- 运行
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
命令安装程序所需模块 - 运行
main.py
即可使用
命令行模式
项目支持命令行运行模式,若想要下载图文作品的部分图片,可以使用此模式设置需要下载的图片序号!
可以使用命令行从浏览器读取 Cookie 并写入配置文件!注意需要关闭浏览器才能读取数据!
命令示例:python .\main.py --browser_cookie Chrome --update_settings
bool
类型参数支持使用 true
、false
、1
、0
、yes
、no
、on
或 off
(不区分大小写)来设置。
服务器模式
启动:运行命令:python .\main.py server
关闭:按下 Ctrl
+ C
关闭服务器
请求接口:/xhs/
请求方法:POST
请求格式:JSON
请求参数:
参数 | 类型 | 含义 | 默认值 |
---|---|---|---|
url | str | 小红书作品链接,自动提取,不支持多链接 | 无 |
download | bool | 是否下载作品文件;设置为 true 将会耗费更多时间 |
false |
index | list[int] | 下载指定序号的图片文件,仅对图文作品生效;download 参数设置为 false 时不生效 |
null |
skip | bool | 是否跳过存在下载记录的作品;设置为 true 将不会返回存在下载记录的作品数据 |
false |
代码示例:
def api_demo():
server = "http://127.0.0.1:8000/xhs/"
data = {
"url": "https://www.xiaohongshu.com/explore/123456789",
"download": True,
"index": [
3,
6,
9,
],
}
response = requests.post(server, json=data)
print(response.json())
读取剪贴板
项目使用 pyperclip
实现读取剪贴板功能,该模块在不同的系统上会有差异。
在 Windows 上,不需要额外的模块。
在 Mac 上,该模块使用 pbcopy 和 pbpaste 命令,这些命令应该随操作系统一起提供。
在 Linux 上,该模块使用 xclip 或 xsel 命令,这些命令应该随操作系统一起提供。否则,请运行 "sudo apt-get install xclip" 或 "sudo apt-get install xsel"(注意:xsel 似乎并不总是有效)
在其他 Linux 系统上,你需要安装 qtpy 或 PyQT5 模块。
配置文件
项目根目录下的 settings.json
文件,首次运行自动生成,可以自定义部分运行参数。
如果设置了无效的参数值,程序将会使用参数默认值!
参数 | 类型 | 含义 | 默认值 |
---|---|---|---|
work_path | str | 作品数据 / 文件保存根路径 | 项目根路径 |
folder_name | str | 作品文件储存文件夹名称 | Download |
name_format | str | 作品文件名称格式,字段之间使用空格分隔,支持字段:收藏数量 、评论数量 、分享数量 、点赞数量 、作品标签 、作品ID 、作品标题 、作品描述 、作品类型 、发布时间 、最后更新时间 、作者昵称 、作者ID |
发布时间 作者昵称 作品标题 |
sec_ch_ua | str | 浏览器请求头 Sec-Ch-Ua | 内置 Chrome Sec-Ch-Ua |
sec_ch_ua_platform | str | 浏览器请求头 Sec-Ch-Ua-Platform | 内置 Chrome Sec-Ch-Ua-Platform |
user_agent | str | 浏览器 User Agent | 内置 Chrome User Agent |
cookie | str | 小红书网页版 Cookie,无需登录 | 无 |
proxy | str|dict | 设置程序代理 | null |
timeout | int | 请求数据超时限制,单位:秒 | 10 |
chunk | int | 下载文件时,每次从服务器获取的数据块大小,单位:字节 | 2097152(2 MB) |
max_retry | int | 请求数据失败时,重试的最大次数,单位:秒 | 5 |
record_data | bool | 是否保存作品数据至文件,保存格式:SQLite |
false |
image_format | str | 图文作品文件下载格式,支持:PNG 、WEBP |
PNG |
image_download | bool | 图文作品文件下载开关 | true |
video_download | bool | 视频作品文件下载开关 | true |
live_download | bool | 图文动图文件下载开关 | false |
folder_mode | bool | 是否将每个作品的文件储存至单独的文件夹;文件夹名称与文件名称保持一致 | false |
download_record | bool | 是否记录下载成功的作品 ID,如果开启,程序将会自动跳过下载存在记录的作品 | true |
language | str | 设置程序语言,目前支持:zh_CN 、en_GB |
zh_CN |
其他说明:sec_ch_ua
、sec_ch_ua_platform
、user_agent
参数获取示例,仅当程序获取数据失败时需要自行设置!
Cookie
- 打开浏览器(可选无痕模式启动),访问
https://www.xiaohongshu.com/explore
- 登录小红书账号(可跳过)
- 按下
F12
打开开发人员工具 - 选择
网络
选项卡 - 勾选
保留日志
- 在
过滤
输入框输入cookie-name:web_session
- 选择
Fetch/XHR
筛选器 - 点击小红书页面任意作品
- 在
网络
选项卡选择任意数据包(如果无数据包,重复步骤7) - 全选复制 Cookie 写入程序或配置文件
下载记录
XHS-Downloader 会将下载过的作品 ID 储存至数据库,当重复下载相同的作品时,XHS-Downloader 会自动跳过该作品的文件下载(即使作品文件不存在),如果想要重新下载作品文件,请先删除数据库中对应的作品 ID,再使用 XHS-Downloader 下载作品文件!
该功能默认开启,如果关闭该功能,XHS-Downloader 会检查文件是否存在,若文件存在则跳过下载!
下载
XHS-Downloader XHS-Downloader XHS-Downloader XHS-Downloader XHS-Downloader
更新记录
V2.2 Beta 更新内容:
- 使用 rookiepy 替代 browser-cookie3
- 修复 record_data 参数无效的问题
- 新增文件名称非法字符处理机制
- 新增自动删除空文件夹功能
- 优化重定向链接获取逻辑
- 引入 aiofiles 库操作文件
- 修复 ScannerError 错误
- 更新 chunk 参数默认值
- 优化作品数据提取逻辑
- 优化作品数据返回格式
- 优化项目运行信息提示
- 新增作品下载记录开关
- 新增文件断点续传功能
- 默认开启局域网访问
- 更新英语翻译
V2.1 更新内容:
- 使用 HTTPX 替代 AIOHTTP
- 使用 FastAPI 替代 AIOHTTP
- 更新 Dockerfile 文件
- 优化 Web API 模式
- 更新命令行调用模式
- 新增请求头参数设置
- 更新项目依赖库版本
- 其他细节优化
V2.0 更新日志:
- 修复网络错误导致异常退出的问题
- 新增视频/图文作品文件下载开关
- 修复检查新版本功能错误的问题
- 新增自定义作品文件名称功能
- 更新小红书视频文件下载接口
- 新增 livePhoto 下载功能
- 新增 livePhoto 下载开关
- 移除 user_agent 参数
- 优化跳过已下载作品功能
- 新增 Web API 模式
- 优化 TUI 交互界面
- 修复其他已知问题
- 其他细节优化
V1.9 更新日志:
- 新增从浏览器获取 Cookie 功能
- 修复下载 PNG 图片失败的问题
- 更新无水印图片地址处理逻辑
- 新增支持命令行运行模式
- 修复删除记录失败的问题
- 优化作品数据储存格式
- 优化文件下载状态提示
- 移除内置延时机制
- 修复其他已知问题
- 其他细节优化
注意:请删除旧版配置文件并重新生成;作品下载记录与旧版不兼容,如有需要请注意迁移数据!
V1.8 更新日志:
- 新增监听剪贴板下载作品功能
- 新增图片下载格式设置
- 优化作品文件名称格式
- 提高作品文件下载效率
- 优化程序异常捕获
- 优化配置文件参数
- 新增作品处理延时
- 新增英语语言支持
- 移除内置 Cookie
- 优化 TUI 交互效果
旧版本升级请删除 settings.json
配置文件,运行程序会重新生成该文件!
V1.7 更新日志:
- 优化配置文件的编码方式
- 更新无水印视频提取逻辑
- 更新无水印图片提取逻辑
- 优化无水印图片文件格式
- 优化作品文件名称格式
- 新增保存作品数据功能
- 增加作品归档保存功能
- 优化程序代码运行逻辑
- 优化 TUI 交互效果
- 其他细节优化
V1.6 更新日志:
- 移除读取文件下载作品功能
- 支持单次输入多个作品链接
- 更新无水印图片提取逻辑
- 更新无水印视频提取逻辑
- 优化批量处理作品功能
- 支持更多作品链接格式
- 获取数据失败自动重试
- 新增读取剪贴板按钮
- 优化程序自定义参数
- 优化 TUI 交互界面
- 移除
cookie
参数 - 其他细节优化
V1.5 更新日志:
- 更新无水印图片采集逻辑
- 新增程序版本提示
- 更新内置 Cookie
V1.4 更新日志:
- 更新文本用户界面
- 优化交互提示
V1.3 更新日志:
- 优化图片地址提取逻辑
- 优化作品数据提取逻辑
- 增加 IP 归属地字段
- 优化异常处理
V1.2 更新日志:
- 修复无水印图片采集功能
- 优化文件系统路径处理
- 简化项目代码
V1.1 更新日志:
- 增加批量下载作品文件功能
- 增加文件完整性处理机制
- 优化程序异常处理
V1.0 实现功能
- 采集小红书图文/视频作品信息
- 获取小红书图文/视频作品下载地址
- 下载小红书图文/视频作品文件
- 自动跳过已存在的作品文件
共有 0 条评论