小红书数据采集终极指南:Python爬虫快速上手实战
小红书数据采集终极指南Python爬虫快速上手实战【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs小红书作为国内领先的社交电商平台蕴含着海量的用户行为数据和内容趋势信息。对于数据分析师和开发者来说如何高效、稳定地获取这些数据成为了技术挑战。xhs工具正是为解决这一问题而生的Python爬虫库它封装了小红书Web端API让数据采集变得简单高效。 为什么xhs是小红书数据采集的最佳选择在众多数据采集方案中xhs以其专业性和易用性脱颖而出特性xhs工具传统爬虫方案优势对比认证机制内置签名算法手动处理Cookie自动化程度高稳定性强反爬应对集成PlaywrightStealth.js需要自行实现开箱即用维护成本低功能完整性50个API方法零散功能实现功能全面持续更新开发效率几行代码完成采集数百行代码开发开发周期缩短90%核心优势解析签名算法自动化小红书的反爬机制核心在于x-s签名xhs通过Playwright模拟浏览器环境自动生成签名无需手动破解算法。多登录方式支持支持二维码登录、手机验证码登录、Cookie登录等多种认证方式适应不同使用场景。完整的数据接口从笔记搜索到用户信息从评论数据到创作者功能覆盖小红书90%以上的公开数据接口。 5分钟快速部署指南环境准备与安装首先确保你的Python环境版本≥3.8然后执行以下命令# 安装xhs核心库 pip install xhs # 安装浏览器模拟依赖 pip install playwright playwright install # 下载反检测脚本 curl -O https://cdn.jsdelivr.net/gh/requireCool/stealth.min.js/stealth.min.js基础使用从零到第一个数据请求from xhs import XhsClient import json # 初始化客户端需要先获取有效的Cookie cookie your_xhs_cookie_here xhs_client XhsClient(cookie) # 获取当前登录用户信息 user_info xhs_client.get_self_info() print(f用户昵称{user_info[nickname]}) print(f粉丝数量{user_info[fans]}) print(f获赞总数{user_info[likes]})获取有效Cookie的两种方法方法一手动获取适合临时使用登录小红书网页版打开浏览器开发者工具F12进入Network标签页刷新页面找到任意请求复制Request Headers中的Cookie值方法二二维码自动登录适合自动化from xhs import XhsClient # 生成登录二维码 client XhsClient() qr_info client.get_qrcode() print(f请扫描二维码{qr_info[qrcode_url]}) # 轮询检查登录状态 while True: check_result client.check_qrcode(qr_info[qr_id], qr_info[code]) if check_result[code_status] 2: # 登录成功 print(登录成功) break 实战应用四大核心数据采集场景场景一笔记搜索与趋势分析# 搜索热门美食笔记 search_results xhs_client.get_note_by_keyword( keyword美食探店, page1, page_size20, sorthot # 按热度排序 ) # 分析热门笔记特征 hot_notes [] for note in search_results[items]: note_data { title: note[title], author: note[user][nickname], likes: note[like_count], collects: note[collect_count], comments: note[comment_count], publish_time: note[time] } hot_notes.append(note_data) print(f 热门笔记{note_data[title]}点赞{note_data[likes]})场景二用户画像分析# 获取用户基本信息 user_id 目标用户ID user_info xhs_client.get_user_info(user_id) # 获取用户所有笔记 all_notes xhs_client.get_user_all_notes( user_iduser_id, crawl_interval2 # 爬取间隔2秒避免频率过高 ) # 分析用户内容偏好 note_categories {} for note in all_notes: # 提取关键词或分类标签 # 这里可以根据笔记内容进行分类分析 category analyze_note_category(note) note_categories[category] note_categories.get(category, 0) 1 print(f用户内容分布{note_categories})场景三评论情感分析# 获取笔记所有评论 note_id 目标笔记ID all_comments xhs_client.get_note_all_comments( note_idnote_id, crawl_interval1 # 每秒获取一次 ) # 分析评论情感倾向 positive_comments [] negative_comments [] neutral_comments [] for comment in all_comments: sentiment analyze_sentiment(comment[content]) if sentiment positive: positive_comments.append(comment) elif sentiment negative: negative_comments.append(comment) else: neutral_comments.append(comment) print(f 正面评论{len(positive_comments)}条) print(f 负面评论{len(negative_comments)}条) print(f 中性评论{len(neutral_comments)}条)场景四竞品监控系统import schedule import time from datetime import datetime def monitor_competitor(user_id): 监控竞争对手的最新动态 try: # 获取用户最新笔记 user_notes xhs_client.get_user_notes(user_id) latest_note user_notes[0] if user_notes else None if latest_note: # 检查是否为新发布的笔记 note_time datetime.fromtimestamp(latest_note[time]/1000) if (datetime.now() - note_time).days 1: print(f 竞争对手发布新笔记{latest_note[title]}) print(f 发布时间{note_time.strftime(%Y-%m-%d %H:%M:%S)}) print(f 互动数据{latest_note[like_count]} ⭐{latest_note[collect_count]}) # 发送通知邮件/钉钉/微信等 send_notification(latest_note) except Exception as e: print(f监控失败{e}) # 定时监控每小时执行一次 schedule.every().hour.do(monitor_competitor, 竞争对手用户ID) while True: schedule.run_pending() time.sleep(1)⚡ 高级技巧提升采集效率与稳定性签名服务部署方案对于大规模数据采集需求建议部署独立的签名服务# 参考示例example/basic_sign_server.py # 将签名服务部署为独立的Flask应用 # 支持多客户端并发请求提高效率部署命令# 使用Docker快速部署 docker run -it -d -p 5005:5005 reajason/xhs-api:latest智能请求频率控制import random import time from functools import wraps def rate_limit(min_delay1, max_delay3): 请求频率限制装饰器 def decorator(func): wraps(func) def wrapper(*args, **kwargs): # 随机延迟模拟人类操作 delay random.uniform(min_delay, max_delay) time.sleep(delay) try: return func(*args, **kwargs) except Exception as e: # 请求失败时增加等待时间 print(f请求失败等待5秒后重试{e}) time.sleep(5) return func(*args, **kwargs) return wrapper return decorator # 使用装饰器 rate_limit(min_delay1, max_delay3) def safe_search(keyword, page1): return xhs_client.get_note_by_keyword(keyword, pagepage)数据持久化存储方案import sqlite3 import json from datetime import datetime class XhsDataStorage: 小红书数据存储管理器 def __init__(self, db_pathxhs_data.db): self.db_path db_path self.init_database() def init_database(self): 初始化数据库表结构 conn sqlite3.connect(self.db_path) cursor conn.cursor() # 笔记数据表 cursor.execute( CREATE TABLE IF NOT EXISTS notes ( note_id TEXT PRIMARY KEY, title TEXT, content TEXT, user_id TEXT, like_count INTEGER, collect_count INTEGER, comment_count INTEGER, publish_time TIMESTAMP, category TEXT, tags TEXT, raw_data TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) # 用户数据表 cursor.execute( CREATE TABLE IF NOT EXISTS users ( user_id TEXT PRIMARY KEY, nickname TEXT, fans_count INTEGER, likes_count INTEGER, notes_count INTEGER, collected_count INTEGER, raw_data TEXT, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ) ) conn.commit() conn.close() def save_note(self, note_data): 保存笔记数据 conn sqlite3.connect(self.db_path) cursor conn.cursor() cursor.execute( INSERT OR REPLACE INTO notes VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) , ( note_data[note_id], note_data.get(title, ), note_data.get(desc, ), note_data[user][user_id], note_data.get(like_count, 0), note_data.get(collect_count, 0), note_data.get(comment_count, 0), datetime.fromtimestamp(note_data[time]/1000), note_data.get(category, ), ,.join(note_data.get(tags, [])), json.dumps(note_data), datetime.now() )) conn.commit() conn.close() 企业级应用架构设计分布式采集系统架构┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 任务调度中心 │ │ 签名服务集群 │ │ 数据存储层 │ │ (Celery) │───▶│ (Flask) │───▶│ (MySQL/ES) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ ▼ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ 采集工作节点 │ │ 代理IP池 │ │ 数据清洗 │ │ (Worker) │ │ (Proxy) │ │ (ETL) │ └─────────────────┘ └─────────────────┘ └─────────────────┘监控与告警系统import logging from prometheus_client import Counter, Histogram from datetime import datetime # 定义监控指标 REQUEST_COUNT Counter(xhs_request_total, Total requests) REQUEST_DURATION Histogram(xhs_request_duration_seconds, Request duration) ERROR_COUNT Counter(xhs_error_total, Total errors) class MonitoredXhsClient: 带监控的xhs客户端 def __init__(self, cookie): self.client XhsClient(cookie) self.logger logging.getLogger(__name__) REQUEST_DURATION.time() def get_note_by_keyword(self, keyword, **kwargs): 监控包装的搜索方法 REQUEST_COUNT.inc() try: start_time datetime.now() result self.client.get_note_by_keyword(keyword, **kwargs) duration (datetime.now() - start_time).total_seconds() self.logger.info(f搜索成功{keyword}耗时{duration:.2f}s) return result except Exception as e: ERROR_COUNT.inc() self.logger.error(f搜索失败{keyword}错误{e}) raise❓ 常见问题与解决方案Q1签名失败怎么办A确保Cookie中的a1字段有效并检查stealth.min.js是否正确加载。可以尝试更新Cookie值增加签名前的等待时间检查浏览器环境是否正常Q2请求频率过高被限制A实现智能延迟策略# 在请求间添加随机延迟 import time import random def smart_request(func, *args, **kwargs): time.sleep(random.uniform(1, 5)) # 1-5秒随机延迟 return func(*args, **kwargs)Q3如何获取用户所有笔记A使用get_user_all_notes方法注意设置合理的爬取间隔all_notes xhs_client.get_user_all_notes( user_id用户ID, crawl_interval2 # 每2秒获取一次避免过快 )Q4数据如何存储和分析A建议使用数据库存储原始数据再进行分析SQLite适合小规模数据MySQL/PostgreSQL适合企业级应用Elasticsearch适合全文搜索和实时分析 学习资源与进阶指南官方文档与示例基础使用文档docs/basic.rst爬虫进阶指南docs/crawl.rst创作者功能说明docs/creator.rst完整示例代码example/目录下的各种使用示例项目源码结构解析xhs/ ├── core.py # 核心API实现包含50个数据接口 ├── help.py # 辅助函数提供数据处理工具 ├── exception.py # 异常处理机制 └── __init__.py # 模块导出和初始化 example/ # 实战示例 ├── basic_usage.py # 基础使用示例 ├── basic_sign_server.py # 签名服务部署 ├── login_phone.py # 手机登录示例 └── login_qrcode.py # 二维码登录示例最佳实践建议遵守平台规则控制请求频率避免对服务器造成压力数据合规使用仅用于合法用途尊重用户隐私定期更新维护关注项目更新及时适配API变化错误处理完善实现完整的重试和降级机制 开始你的数据探索之旅xhs工具为小红书数据采集提供了完整的技术解决方案。无论你是进行市场研究、竞品分析还是开发数据驱动的应用这个工具都能为你节省大量开发时间。立即开始安装xhs工具pip install xhs参考示例代码example/basic_usage.py构建你的第一个数据采集脚本探索更多高级功能记住技术只是工具合理、合规地使用数据才是关键。在享受技术便利的同时请始终遵守相关法律法规和平台规则。提示建议先从简单的数据采集任务开始逐步扩展到复杂的业务场景。遇到问题时可以参考项目文档或社区讨论。祝你数据采集顺利【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

CentOS 7服务器运维实战:从基础操作到性能调优

CentOS 7服务器运维实战:从基础操作到性能调优

1. CentOS 7基础操作环境概述作为Linux发行版中的"企业级常青树",CentOS 7凭借其出色的稳定性和长期支持周期(维护更新持续到2024年),至今仍是服务器环境的主流选择。与Ubuntu等面向个人用户的发行版不同,Ce…

2026/7/16 11:12:52阅读更多 →
3分钟掌握无损视频剪辑:LosslessCut让你告别重新编码的烦恼

3分钟掌握无损视频剪辑:LosslessCut让你告别重新编码的烦恼

3分钟掌握无损视频剪辑:LosslessCut让你告别重新编码的烦恼 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 你是否曾经为了剪辑一个简单的视频而等待数小时…

2026/7/16 11:12:52阅读更多 →
DLL文件解析:从原理到实战应用

DLL文件解析:从原理到实战应用

1. DLL文件的前世今生:从概念到应用场景 动态链接库(Dynamic Link Library,简称DLL)是Windows操作系统的核心组件之一。我第一次接触DLL是在2003年调试一个工业控制软件时,系统突然弹出"缺少MFC42.DLL"的错误…

2026/7/16 11:12:52阅读更多 →
the tarts are black,they‘re burned.

the tarts are black,they‘re burned.

junior’s teacher tolked me to cook something for the school party tomorrow,and i said yes. she asked me in front of all the other parents. i couldn’t say no. so now.you have to deal with it,what are you going to make. i don’t know maybe cookies. cookies…

2026/7/16 12:28:07阅读更多 →
RStudio安装配置全指南:从官方获取到中文界面与故障排查

RStudio安装配置全指南:从官方获取到中文界面与故障排查

1. 这不是普通安装包:RStudio 2026预发布版的真实定位与使用边界 “RStudio 2026安装包”这个标题在当前时间点(2024年中)本身就构成一个需要立刻厘清的技术事实。截至今日,RStudio官方尚未发布、甚至未正式宣布代号为“2026”的版…

2026/7/16 12:28:07阅读更多 →
安卓修改大师:APK反编译为Android Studio项目的完整实战指南

安卓修改大师:APK反编译为Android Studio项目的完整实战指南

安卓修改大师:APK反编译为Android Studio项目的完整实战指南 一、引言:从APK到Android Studio项目的技术跨越 在安卓逆向工程与二次开发领域,将APK反编译为可编译、可运行的Android Studio项目一直是众多开发者和逆向爱好者的核心需求。传统…

2026/7/16 12:28:07阅读更多 →
OneXPlayer 3掌机评测:Intel Arc显卡与OLED屏幕的完美融合

OneXPlayer 3掌机评测:Intel Arc显卡与OLED屏幕的完美融合

OneXPlayer 3掌机深度评测:Intel Arc显卡与OLED屏幕的完美结合 作为一名长期关注便携游戏设备的技术爱好者,最近入手了OneXPlayer 3这款备受瞩目的游戏掌机。经过一段时间的使用体验,我将从硬件配置、性能表现、使用感受等多个维度为大家带来…

2026/7/16 12:28:07阅读更多 →
Clang LLVM 安装避坑指南:从工具链本质到 clangd 实战就绪

Clang LLVM 安装避坑指南:从工具链本质到 clangd 实战就绪

1. 为什么“Clang LLVM 安装”这件事&#xff0c;远比敲几行命令复杂得多很多人第一次在终端里输入brew install llvm或者双击下载好的.exe安装包时&#xff0c;以为自己已经“装好了 Clang 和 LLVM”。结果一打开 IDE 写个#include <vector>就报错找不到头文件&#xff…

2026/7/16 12:28:07阅读更多 →
国外网申收不到大厂短信通知?留学生改用国内手机号和邮件防漏接「蒸汽求职分享」

国外网申收不到大厂短信通知?留学生改用国内手机号和邮件防漏接「蒸汽求职分享」

回国投递校招岗位的留学生&#xff0c;在网申大厂时往往把所有精力都放在了简历的重构与项目描述上&#xff0c;却极易忽略联系方式这一个关键的底层入口。很多同学为了图省事&#xff0c;在网申系统里直接填写了自己正在使用的境外手机号。然而&#xff0c;国内大厂的招聘系统…

2026/7/16 12:23:06阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比&#xff1a;全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时&#xff0c;第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/16 8:28:11阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件&#xff1a;5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/16 6:53:04阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL&#xff1a;跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/16 12:02:41阅读更多 →
A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

A--10 Codex Review与GitHub PR工作流实战指南:从代码审查到安全合并

摘要:本文系统讲解如何利用Codex App的Review功能与GitHub PR工作流,实现从代码修改到安全合并的完整流程。涵盖Review面板深度使用、/review命令实战、GitHub Connector配置、PR描述撰写技巧,以及常见问题排查方法。通过多个实战案例和流程图,帮助开发者建立高效的AI辅助代…

2026/7/16 0:00:38阅读更多 →
遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

遗传算法解5皇后问题:从Hello World到工业优化的进化实验室

1. 项目概述&#xff1a;为什么用遗传算法解5皇后问题&#xff0c;而不是直接回溯&#xff1f;我带过十几届算法课&#xff0c;也给不少初创团队做过AI架构咨询。每次讲到组合优化问题&#xff0c;学生和工程师的第一反应永远是“写个回溯试试”。这没错——55棋盘上找所有合法…

2026/7/16 0:00:38阅读更多 →
5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

5.1V稳压管输出为何只有4.7V?工作电流与负载影响分析

前几天调试一个简单的电源模块&#xff0c;用到了5.1V稳压管。电路接好&#xff0c;上电测试&#xff0c;万用表一量——输出居然只有4.7V。第一反应是稳压管坏了&#xff0c;换了一个新的&#xff0c;结果还是4.7V。这让我想起很多初学者都会遇到的困惑&#xff1a;明明标称5.…

2026/7/16 0:00:38阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时&#xff0c;发现推理速度只有可怜的 1-2 FPS&#xff0c;而别人的演示视频却能跑到 30 FPS 以上&#xff0c;那么问题很可能不在模型本身&#xff0c;而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后&#xff0c;会直接使用官方示例…

2026/7/15 15:50:47阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一&#xff1a;为什么你需要了解 Coze 和 Dify&#xff1f;如果你对 AI 应用开发感兴趣&#xff0c;但一看到“大模型”、“智能体”、“工作流”这些词就头疼&#xff0c;觉得门槛太高&#xff0c;那这篇文章就是为你准备的。很多开发者&#xff0c;包括我自己&#…

2026/7/16 8:58:42阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会&#xff1a;配图一直是个让人头疼的问题。2026年&#xff0c;AI生图工具已经非常成熟了&#xff0c;但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1&#xff1a;速度之王2026年6月11日&#xff0c…

2026/7/15 14:06:23阅读更多 →