
小红书内容采集终极指南XHS-Downloader 的完整工程实践【免费下载链接】XHS-Downloader小红书XiaoHongShu、RedNote链接提取/作品采集工具提取账号发布、收藏、点赞、专辑作品链接提取搜索结果作品、用户链接采集小红书作品信息提取小红书作品下载地址下载小红书作品文件项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader在内容创作与数据分析的浪潮中小红书XiaoHongShu已成为不可忽视的内容宝库。对于开发者、内容创作者和研究人员而言如何高效、合规地采集平台上的公开内容同时保持数据的完整性和可用性是当前面临的核心技术挑战。XHS-Downloader 作为一款基于 Python 的开源小红书内容采集工具提供了从链接提取、数据采集到文件下载的完整解决方案实现了对小红书平台内容的自动化处理与智能管理。项目定位与技术架构XHS-Downloader 采用模块化设计理念将复杂的采集流程分解为多个独立的处理单元。项目的核心架构位于source/application/目录下每个模块都承担着特定的职责探索引擎(explore.py)负责解析小红书作品页面智能提取作品基本信息、作者数据和互动指标请求管理器(request.py)处理网络请求管理 Cookie、代理配置和智能重试机制下载引擎(download.py)实现文件下载功能支持断点续传和多格式文件处理媒体处理器(image.py和video.py)分别处理图片和视频文件的下载逻辑与格式转换应用接口(app.py)提供统一的 API 接口封装底层模块的调用逻辑这种分层架构不仅使得每个模块可以独立测试和优化也为二次开发提供了清晰的接口定义。项目支持 Python 3.12采用异步编程模型确保高并发性能同时通过配置文件Volume/settings.json实现灵活的运行时配置。XHS-Downloader 图形界面提供直观的操作体验支持批量链接处理和实时进度监控核心功能模块详解 智能链接识别与数据提取小红书平台采用动态加载技术传统静态 HTML 解析方法难以获取完整数据。XHS-Downloader 通过分析网络请求模式实现了对平台 API 的模拟调用# 智能数据提取示例 from source.application.explore import Explore from source.application.request import Request class SmartContentExtractor: def __init__(self, cookieNone, proxyNone): self.request Request(cookiecookie, proxyproxy) self.explorer Explore() async def extract_content(self, url): # 智能识别多种链接格式 note_id self._parse_note_id(url) # 构建API请求参数 api_params self._build_api_params(note_id) # 发送异步请求获取数据 raw_data await self.request.fetch(api_params) # 结构化数据解析 structured_data self.explorer.parse(raw_data) return structured_data 灵活的文件管理策略XHS-Downloader 提供了多种文件管理选项满足不同用户的需求按作者归档自动将每个作者的作品存储到独立文件夹自定义命名规则支持使用作品元数据字段组合文件名多格式支持支持 AUTO、PNG、WEBP、JPEG、HEIC 等多种图片格式智能去重基于作品 ID 的记录机制避免重复下载配置文件示例{ work_path: ./downloads, folder_name: XHS_Content, name_format: 发布时间 作者昵称 作品标题, image_format: WEBP, folder_mode: true, author_archive: true, download_record: true }多模式部署方案️ 图形界面模式对于非技术用户XHS-Downloader 提供了完整的图形界面通过 Textual 框架构建的 TUI 界面简洁直观# 直接运行可执行文件 ./main # 或通过源码启动 python main.py图形界面支持批量链接处理、剪贴板监听、下载进度显示等实用功能。界面设计遵循终端应用的交互习惯同时提供了丰富的配置选项用户可以在设置界面调整下载参数、文件命名规则和存储路径。⌨️ 命令行接口模式对于自动化脚本和批量处理场景命令行模式提供了最大的灵活性# 基础下载命令 python main.py --url https://www.xiaohongshu.com/explore/作品ID # 批量处理多个作品 python main.py --url 链接1 链接2 链接3 --work-path ./data/downloads # 指定下载图片序号 python main.py --url 作品链接 --index 1,3,5 --image-format WEBP # 使用代理服务器 python main.py --url 作品链接 --proxy http://127.0.0.1:10808命令行模式提供完整的参数控制适合自动化脚本和批量处理场景 API 服务器模式对于需要与其他系统集成的场景XHS-Downloader 提供了基于 FastAPI 的 RESTful API 服务import requests import json class XHSAPIClient: def __init__(self, base_urlhttp://127.0.0.1:5556): self.base_url base_url def download_content(self, url, downloadTrue, indexNone): 通过API下载小红书内容 endpoint f{self.base_url}/xhs/detail payload { url: url, download: download, index: index if index else [] } response requests.post(endpoint, jsonpayload, timeout30) return response.json() # 使用示例 client XHSAPIClient() result client.download_content( https://www.xiaohongshu.com/explore/67b3a8d9000000001e03abcd, downloadTrue, index[1, 2, 3] )API 模式支持 JSON 格式的请求和响应便于与其他编程语言或系统集成。服务启动后可以通过http://127.0.0.1:5556/docs访问交互式 API 文档。 MCP 集成模式Model Context ProtocolMCP支持使得 XHS-Downloader 能够与 AI 助手深度集成通过标准化的协议提供内容采集能力# MCP配置示例 name: XHS-Downloader description: 小红书内容采集工具 type: streamable-http url: http://127.0.0.1:5556/mcp/MCP模式将工具功能暴露为标准化的AI工具支持流式传输和实时交互浏览器扩展集成为了提升网页端的使用体验XHS-Downloader 提供了 Tampermonkey 用户脚本可以直接在小红书网页界面进行操作用户脚本提供网页端图片选择和批量下载功能实现所见即所得的操作体验用户脚本提供了以下核心功能链接批量提取自动提取当前页面中的所有作品链接图片选择性下载支持勾选特定图片进行下载自动滚动加载自动加载更多内容以便批量处理一键推送任务将选中的内容推送到本地服务器进行下载脚本与本地服务器通过 WebSocket 通信实现了网页端与本地程序的无缝集成。用户可以在浏览小红书时直接选择需要下载的内容系统会自动处理下载任务。实际应用场景 内容创作者备份内容创作者可以使用 XHS-Downloader 定期备份自己的作品确保内容安全import asyncio from datetime import datetime class ContentBackupSystem: def __init__(self, user_id): self.user_id user_id self.backup_path f./backup/{datetime.now().strftime(%Y%m)} async def backup_all_content(self): 备份用户所有作品 async with XHS( work_pathself.backup_path, folder_modeTrue, author_archiveTrue, record_dataTrue ) as xhs: # 获取用户作品列表 works await self._get_user_works() # 批量下载 for work in works: result await xhs.extract( work[url], downloadTrue, folder_modeTrue ) if result: print(f✅ 已备份作品: {work[title]}) else: print(f❌ 备份失败: {work[title]}) 市场研究与竞品分析市场研究人员可以利用工具收集特定领域的内容数据class MarketResearchTool: def __init__(self, keywords): self.keywords keywords self.data_collector XHS(record_dataTrue) async def collect_topic_data(self, max_pages10): 收集特定话题下的内容数据 all_data [] for keyword in self.keywords: search_url fhttps://www.xiaohongshu.com/search_result?keyword{keyword} for page in range(1, max_pages 1): page_data await self.data_collector.extract( search_url, downloadFalse # 仅收集数据不下载文件 ) if page_data: all_data.extend(page_data) await asyncio.sleep(2) # 避免请求过于频繁 return self._analyze_engagement(all_data) def _analyze_engagement(self, data): 分析内容互动数据 engagement_stats { avg_likes: sum(item.get(likes, 0) for item in data) / len(data) if data else 0, avg_comments: sum(item.get(comments, 0) for item in data) / len(data) if data else 0, top_authors: [] } # 识别高影响力作者 author_stats {} for item in data: author item.get(author, {}) author_id author.get(id) if author_id: author_stats.setdefault(author_id, { name: author.get(nickname), works: 0, total_likes: 0 }) author_stats[author_id][works] 1 author_stats[author_id][total_likes] item.get(likes, 0) engagement_stats[top_authors] sorted( author_stats.values(), keylambda x: x[total_likes], reverseTrue )[:10] return engagement_stats扩展开发指南 自定义文件处理器开发者可以通过继承基础类实现自定义的文件处理逻辑from source.application.download import Download class CustomDownloadHandler(Download): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.custom_processors [] def add_processor(self, processor): 添加自定义文件处理器 self.custom_processors.append(processor) async def process_file(self, file_path, metadata): 处理下载后的文件 # 调用父类的基础处理 result await super().process_file(file_path, metadata) # 执行自定义处理 for processor in self.custom_processors: try: await processor(file_path, metadata) except Exception as e: print(f自定义处理器错误: {e}) return result # 使用示例 async def watermark_processor(file_path, metadata): 添加水印处理器 if file_path.endswith((.jpg, .png, .jpeg)): # 使用PIL添加水印 from PIL import Image, ImageDraw, ImageFont image Image.open(file_path) # 添加水印逻辑 image.save(file_path) print(f✅ 已为 {file_path} 添加水印) 容器化部署对于生产环境部署推荐使用 Docker 容器化方案# docker-compose.yml version: 3.8 services: xhs-downloader: image: joeanamier/xhs-downloader:latest container_name: xhs-downloader ports: - 5556:5556 # API服务端口 - 5558:5558 # 脚本服务器端口 volumes: - ./downloads:/app/Volume/Download - ./config:/app/Volume - ./logs:/app/logs environment: - TZAsia/Shanghai - PYTHONUNBUFFERED1 restart: unless-stopped healthcheck: test: [CMD, curl, -f, http://localhost:5556/health] interval: 30s timeout: 10s retries: 3 start_period: 40s容器化部署提供了以下优势环境一致性确保开发、测试、生产环境一致资源隔离避免依赖冲突快速部署一键启动服务易于扩展支持横向扩展最佳实践建议⚡ 性能优化策略网络连接优化async with XHS( proxyhttp://proxy-server:8080, timeout30, max_retry3, chunk1024*1024 # 1MB分块 ) as xhs: await xhs.extract(url, downloadTrue)并发控制import asyncio from concurrent.futures import ThreadPoolExecutor async def batch_download(urls, max_concurrent3): semaphore asyncio.Semaphore(max_concurrent) async def download_with_semaphore(url): async with semaphore: async with XHS() as xhs: return await xhs.extract(url, downloadTrue) tasks [download_with_semaphore(url) for url in urls] return await asyncio.gather(*tasks)存储优化启用download_record避免重复下载使用author_archive按作者分类便于管理定期清理临时文件和日志 安全与合规建议合理使用频率设置适当的请求间隔避免触发平台的反爬虫机制数据使用伦理收集的数据仅用于合法用途不得用于商业侵权或不当竞争隐私保护不得收集和使用用户的隐私信息处理数据时需进行脱敏处理遵守平台规则严格遵守小红书平台的服务条款技术声明与使用规范XHS-Downloader 作为开源工具旨在为开发者、研究人员和内容创作者提供技术便利。在使用过程中请严格遵守以下规范合法合规使用仅用于下载用户自己创作或已获得授权的内容尊重平台规则遵守小红书平台的服务条款合理使用频率避免对平台服务器造成过大压力数据使用伦理不得用于商业侵权或不当竞争隐私保护不得收集和使用用户的隐私信息通过合理配置和优化XHS-Downloader 能够成为小红书内容处理的高效工具。无论是个人使用还是企业级部署其模块化设计和丰富的功能选项都能满足多样化的需求。随着项目的持续发展社区贡献将进一步完善其功能生态为更多用户提供价值。项目地址https://gitcode.com/gh_mirrors/xh/XHS-Downloader【免费下载链接】XHS-Downloader小红书XiaoHongShu、RedNote链接提取/作品采集工具提取账号发布、收藏、点赞、专辑作品链接提取搜索结果作品、用户链接采集小红书作品信息提取小红书作品下载地址下载小红书作品文件项目地址: https://gitcode.com/gh_mirrors/xh/XHS-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考