XHS-Downloader

简体中文 | English

小红书链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作品链接、用户链接;采集小红书作品信息;提取小红书作品下载地址;下载小红书无水印作品文件!

⭐ 本项目完全免费开源,无任何收费功能,请勿上当受骗!

项目功能

⭐ XHS-Downloader 开发计划及进度可前往 Projects 查阅

程序截图

点击图片观看演示视频

支持链接

关于终端

⭐ 推荐使用 Windows 终端 (Windows 11 默认终端)运行程序以便获得最佳显示效果!

使用方法

如果仅需下载无水印作品文件,建议选择 程序运行 或 Docker 运行;如果有其他需求,建议选择 源码运行!

2.2 版本开始,项目功能无异常的情况下,无需额外处理 Cookie!

程序运行

Mac OS、Windows 10 及以上用户可前往 Releases 下载程序压缩包,解压后打开程序文件夹,双击运行 main 即可使用。

注意:Mac OS 平台可执行文件 main 可能需要从终端命令行启动;受设备限制,Mac OS 平台可执行文件尚未经过测试,无法保证可用性!

若通过此方式使用程序,文件默认下载路径为:.\_internal\Download;配置文件路径为:.\_internal\settings.json

⌨️ Docker 运行

获取镜像创建容器运行容器

Docker 运行项目时不支持 命令行调用模式,无法使用 读取剪贴板 与 监听剪贴板 功能,可以正常粘贴内容,其他功能如有异常请反馈!

⌨️ 源码运行

安装版本号不低于 3.12 的 Python 解释器下载本项目最新的源码或 Releases 发布的源码至本地打开终端,切换至项目根路径运行 pip install -i -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())

其他说明

用户脚本

如果您的浏览器安装了 Tampermonkey 浏览器扩展程序,可以添加 用户脚本,无需下载安装即可体验项目功能!

脚本安装成功后,打开小红书页面,查看脚本说明,并根据提示操作。

提示:使用 XHS-Downloader 用户脚本批量提取作品链接,搭配 XHS-Downloader 程序可以实现批量下载无水印作品文件!

脚本说明

二次开发

如果有其他需求,可以根据 main.py 的注释提示进行代码调用或修改!

async def example():
    """通过代码设置参数,适合二次开发"""
    # 示例链接
    error_link = "https://github.com/JoeanAmier/XHS_Downloader"
    demo_link = "https://www.xiaohongshu.com/explore/xxxxxxxxxx"
    multiple_links = f"{demo_link} {demo_link} {demo_link}"
    # 实例对象
    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"  # 图文作品文件下载格式,支持:PNG、WEBP
    folder_mode = False  # 是否将每个作品的文件储存至单独的文件夹
    # 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,
    ) as xhs:  # 使用自定义参数
        download = True  # 是否下载作品文件,默认值:False
        # 返回作品详细信息,包括下载地址
        # 获取数据失败时返回空字典
        print(await xhs.extract(error_link, download, ))
        print(await xhs.extract(demo_link, download, index=[1, 2]))
        # 支持传入多个作品链接
        print(await xhs.extract(multiple_links, download, ))

读取剪贴板

项目使用 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

发布时间 作者昵称 作品标题

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

请求数据失败时,重试的最大次数,单位:秒

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

其他说明:user_agent参数获取示例;强烈建议根据实际浏览器信息进行设置!

Cookie

2.2 版本开始,项目功能无异常的情况下,无需额外处理 Cookie!

打开浏览器(可选无痕模式启动),访问 登录小红书账号(可跳过)按下 F12 打开开发人员工具选择 网络 选项卡勾选 保留日志在 过滤 输入框输入 cookie-name:web_session选择 Fetch/XHR 筛选器点击小红书页面任意作品在 网络 选项卡选择任意数据包(如果无数据包,重复步骤7)全选复制 Cookie 写入程序或配置文件

下载记录

XHS-Downloader 会将下载过的作品 ID 储存至数据库,当重复下载相同的作品时,XHS-Downloader 会自动跳过该作品的文件下载(即使作品文件不存在),如果想要重新下载作品文件,请先删除数据库中对应的作品 ID,再使用 XHS-Downloader 下载作品文件!

该功能默认开启,如果关闭该功能,XHS-Downloader 会检查文件是否存在,若文件存在则跳过下载!

♥️ 支持项目

如果 XHS-Downloader 对您有帮助,请考虑为它点个 Star ⭐,感谢您的支持!

微信(WeChat)支付宝(Alipay)

如果您愿意,可以考虑提供资助为 XHS-Downloader 提供额外的支持!

✉️ 联系作者

说明:QQ 群聊仅限于讨论项目使用问题,严禁发布任何广告,严禁讨论任何账号交易、账号流量、流量变现、灰色产业等相关的内容!

✨ 作者的其他开源项目:

项目赞助

JetBrains 支持全球开源社区认可的活跃项目,并为非商业开发提供免费许可证。

加入电商圈子与更多电商工具添加微信:lisugushi1 ,请猛戳这里→立刻添加