小红书数据采集终极指南:xhs工具完整使用教程与实战技巧

news2026/3/24 12:44:44
小红书数据采集终极指南xhs工具完整使用教程与实战技巧【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs在当今社交媒体数据分析领域小红书已成为品牌营销和内容研究的重要平台。xhs作为一款专业的Python小红书数据采集工具通过封装Web端API接口为开发者提供了高效、稳定的数据获取解决方案。本教程将带你从零开始全面掌握xhs工具的使用技巧构建属于自己的小红书数据分析系统。 环境搭建与快速入门系统要求与安装配置环境检查清单要求说明推荐版本Python版本支持3.8及以上Python 3.9操作系统Windows/macOS/Linux任意主流系统网络环境可访问小红书网站稳定的网络连接依赖库requests、pycryptodome等自动安装三种安装方式对比# 方式一PyPI官方源安装最简方式 pip install xhs # 方式二源码安装获取最新特性 git clone https://gitcode.com/gh_mirrors/xh/xhs cd xhs pip install . # 方式三开发模式安装适合二次开发 pip install -e .[dev]项目架构解析xhs工具采用模块化设计核心目录结构清晰xhs/ ├── core.py # 核心功能模块 ├── help.py # 辅助函数工具 ├── exception.py # 异常处理模块 ├── example/ # 使用示例代码 │ ├── basic_usage.py │ ├── login_qrcode.py │ └── login_phone.py ├── tests/ # 单元测试文件 └── docs/ # 详细文档说明 核心功能实战演练客户端初始化与认证Cookie认证方式推荐from xhs import XhsClient # 初始化客户端 client XhsClient(cookieyour_actual_cookie) # 获取用户信息 user_info client.get_self_info() print(f用户昵称: {user_info[nickname]}) print(f粉丝数量: {user_info[fans_count]})二维码登录方式无需Cookiefrom xhs import XhsClient import qrcode # 初始化客户端 xhs_client XhsClient() # 获取登录二维码 qr_res xhs_client.get_qrcode() qr_id qr_res[qr_id] qr_code qr_res[code] # 生成二维码图片 qr qrcode.QRCode() qr.add_data(qr_res[url]) qr.make() qr.print_ascii() # 控制台显示二维码 # 等待扫码登录 while True: check_result xhs_client.check_qrcode(qr_id, qr_code) if check_result[code_status] 2: print(登录成功) print(f获取的Cookie: {xhs_client.cookie}) break内容搜索与数据获取基础搜索功能# 搜索美食探店相关笔记 search_results client.search_note( keyword美食探店, page1, page_size20 ) # 提取关键信息 for note in search_results[items]: print(f 笔记标题: {note[title]}) print(f 作者: {note[user][nickname]}) print(f❤️ 点赞: {note[like_count]}) print(f 评论: {note[comment_count]}) print(---)高级搜索参数参数类型说明示例keywordstring搜索关键词旅行攻略pageint页码1page_sizeint每页数量20sortstring排序方式generalnote_typestring笔记类型video用户数据分析获取用户发布的笔记# 获取用户所有笔记 user_notes client.get_user_notes( user_id目标用户ID, page1, page_size30 ) # 统计用户数据 total_notes len(user_notes[items]) total_likes sum(note[like_count] for note in user_notes[items]) avg_likes total_likes / total_notes if total_notes 0 else 0 print(f 用户数据分析:) print(f 发布笔记数: {total_notes}) print(f 总获赞数: {total_likes}) print(f 平均赞数: {avg_likes:.1f})️ 高级功能与优化策略签名机制与反爬处理xhs工具内置了完整的签名机制确保请求的合法性def custom_sign(uri, dataNone, a1, web_session): 自定义签名函数 # 这里可以实现自己的签名逻辑 # xhs工具已内置默认签名实现 pass # 使用自定义签名 client XhsClient(cookieyour_cookie, signcustom_sign)数据提取辅助函数xhs工具提供了丰富的辅助函数简化数据处理from xhs import help # 从笔记数据中提取图片URL note_data client.get_note_by_id(笔记ID) image_urls help.get_imgs_url_from_note(note_data) # 从笔记数据中提取视频URL video_url help.get_video_url_from_note(note_data) # 下载媒体文件 help.download_file(image_urls[0], 保存路径/图片.jpg)错误处理与重试机制完善的异常处理from xhs.exception import DataFetchError, IPBlockError, NeedVerifyError try: # 尝试获取数据 result client.search_note(keyword热门话题) except DataFetchError as e: print(f数据获取失败: {e}) # 实现重试逻辑 retry_count 3 for i in range(retry_count): try: result client.search_note(keyword热门话题) break except Exception: if i retry_count - 1: print(重试多次仍失败请检查网络或Cookie) except IPBlockError: print(IP被限制访问请更换IP或等待解封) except NeedVerifyError: print(需要验证请更新Cookie或重新登录) 实战应用场景场景一竞品分析def analyze_competitor(user_id): 分析竞品账号表现 notes client.get_user_notes(user_id, page1, page_size50) # 计算互动率 total_interaction 0 for note in notes[items]: interaction note[like_count] note[comment_count] note[share_count] total_interaction interaction avg_interaction total_interaction / len(notes[items]) return { 账号ID: user_id, 笔记数量: len(notes[items]), 平均互动量: avg_interaction, 最佳笔记: max(notes[items], keylambda x: x[like_count]) }场景二内容趋势分析def analyze_content_trend(keywords, days7): 分析内容趋势 trend_data {} for keyword in keywords: # 模拟多天数据采集 daily_stats [] for day in range(days): # 实际应用中这里需要处理时间范围参数 results client.search_note(keywordkeyword, page1) daily_stats.append({ date: fDay-{day}, count: len(results[items]), avg_likes: sum(n[like_count] for n in results[items]) / len(results[items]) }) trend_data[keyword] daily_stats return trend_data⚡ 性能优化与最佳实践请求频率控制import time import random from functools import wraps def rate_limited(max_per_minute30): 请求频率限制装饰器 min_interval 60.0 / max_per_minute def decorator(func): last_called [0.0] wraps(func) def wrapper(*args, **kwargs): elapsed time.time() - last_called[0] left_to_wait min_interval - elapsed if left_to_wait 0: time.sleep(left_to_wait) last_called[0] time.time() return func(*args, **kwargs) return wrapper return decorator # 使用装饰器 rate_limited(max_per_minute20) def safe_search(keyword): return client.search_note(keywordkeyword)数据缓存策略import json import hashlib from datetime import datetime, timedelta class DataCache: 简单数据缓存实现 def __init__(self, cache_dircache, ttl_hours24): self.cache_dir cache_dir self.ttl timedelta(hoursttl_hours) def get_cache_key(self, func_name, **kwargs): 生成缓存键 key_str f{func_name}_{json.dumps(kwargs, sort_keysTrue)} return hashlib.md5(key_str.encode()).hexdigest() def get(self, key): 获取缓存 cache_file f{self.cache_dir}/{key}.json try: with open(cache_file, r) as f: data json.load(f) cache_time datetime.fromisoformat(data[cache_time]) if datetime.now() - cache_time self.ttl: return data[result] except: pass return None def set(self, key, result): 设置缓存 cache_file f{self.cache_dir}/{key}.json data { cache_time: datetime.now().isoformat(), result: result } with open(cache_file, w) as f: json.dump(data, f) 故障排除与调试常见问题解决方案问题1签名失败错误信息SignError 或 window._webmsxyw is not a function 解决方案 1. 检查Cookie是否有效 2. 更新xhs工具到最新版本 3. 尝试使用二维码登录获取新Cookie问题2请求被限制错误信息IPBlockError 或 403 Forbidden 解决方案 1. 降低请求频率 2. 使用代理IP轮换 3. 添加随机延迟问题3数据解析异常错误信息DataFetchError 或 JSON解析错误 解决方案 1. 检查API响应格式是否变化 2. 更新数据模型定义 3. 查看官方文档更新调试技巧# 启用详细日志 import logging logging.basicConfig(levellogging.DEBUG) logger logging.getLogger(__name__) # 调试请求 import requests # 使用requests的调试功能 import http.client http.client.HTTPConnection.debuglevel 1 # 或者使用更简单的方式 client XhsClient(cookieyour_cookie, debugTrue) 进阶应用构建完整的数据管道数据采集管道示例from concurrent.futures import ThreadPoolExecutor import pandas as pd class XhsDataPipeline: 小红书数据采集管道 def __init__(self, cookie): self.client XhsClient(cookie) self.data_cache DataCache() def collect_user_data(self, user_ids): 批量采集用户数据 results [] with ThreadPoolExecutor(max_workers5) as executor: futures [] for user_id in user_ids: future executor.submit(self._get_user_info, user_id) futures.append(future) for future in futures: try: results.append(future.result()) except Exception as e: print(f采集失败: {e}) return pd.DataFrame(results) def _get_user_info(self, user_id): 获取单个用户信息 cache_key self.data_cache.get_cache_key(user_info, user_iduser_id) cached self.data_cache.get(cache_key) if cached: return cached # 实际采集逻辑 user_info self.client.get_self_info() # 这里需要根据实际情况调整 notes self.client.get_user_notes(user_id) result { user_id: user_id, nickname: user_info.get(nickname), note_count: len(notes.get(items, [])), fans_count: user_info.get(fans_count, 0) } self.data_cache.set(cache_key, result) return result数据存储方案import sqlite3 import json from datetime import datetime class XhsDataStorage: 数据存储管理器 def __init__(self, db_pathxhs_data.db): self.conn sqlite3.connect(db_path) self.create_tables() def create_tables(self): 创建数据表 cursor self.conn.cursor() # 用户表 cursor.execute( CREATE TABLE IF NOT EXISTS users ( user_id TEXT PRIMARY KEY, nickname TEXT, fans_count INTEGER, note_count INTEGER, created_at TIMESTAMP, updated_at TIMESTAMP ) ) # 笔记表 cursor.execute( CREATE TABLE IF NOT EXISTS notes ( note_id TEXT PRIMARY KEY, user_id TEXT, title TEXT, content TEXT, like_count INTEGER, comment_count INTEGER, share_count INTEGER, tags TEXT, created_at TIMESTAMP, collected_at TIMESTAMP, FOREIGN KEY (user_id) REFERENCES users (user_id) ) ) self.conn.commit() def save_note(self, note_data): 保存笔记数据 cursor self.conn.cursor() # 保存用户信息 user_info note_data.get(user, {}) cursor.execute( INSERT OR REPLACE INTO users (user_id, nickname, fans_count, note_count, updated_at) VALUES (?, ?, ?, ?, ?) , ( user_info.get(user_id), user_info.get(nickname), user_info.get(fans_count, 0), user_info.get(note_count, 0), datetime.now() )) # 保存笔记信息 cursor.execute( INSERT OR REPLACE INTO notes (note_id, user_id, title, content, like_count, comment_count, share_count, tags, created_at, collected_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) , ( note_data.get(note_id), user_info.get(user_id), note_data.get(title, ), note_data.get(desc, ), note_data.get(like_count, 0), note_data.get(comment_count, 0), note_data.get(share_count, 0), json.dumps(note_data.get(tag_list, [])), datetime.fromtimestamp(note_data.get(time, 0)), datetime.now() )) self.conn.commit() 总结与最佳实践建议核心要点回顾合法合规使用仅采集公开数据控制请求频率尊重平台规则数据质量优先建立完善的数据验证和清洗流程系统稳定性实现错误重试、频率限制、数据缓存机制可扩展性设计采用模块化设计便于功能扩展和维护性能优化建议优化方向具体措施预期效果请求优化使用连接池、批量请求减少网络开销数据处理异步处理、流式处理提高吞吐量存储优化数据库索引、分区存储加快查询速度缓存策略多级缓存、智能过期减少重复请求后续学习资源官方文档查看项目中的docs/目录获取详细API文档示例代码参考example/目录中的完整使用示例源码学习研究xhs/核心模块了解实现原理社区交流关注项目更新和最佳实践分享通过本教程的学习你已经掌握了xhs工具的核心功能和高级技巧。现在可以开始构建自己的小红书数据分析系统探索更多有趣的应用场景。记住技术是为业务服务的合理使用工具才能创造最大价值。提示在实际使用过程中建议定期查看项目更新关注API变化并及时调整代码以适应平台更新。同时始终遵守相关法律法规和平台使用条款确保数据采集的合法性和伦理性。【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2443919.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…