如何使用 Python 调用小红书笔记评论 API 时进行并发控制?

我给你最简单、最实用、直接能运行 的并发控制方案,专门适配小红书 API,防止限流 / 429 / 封号


一、小红书 API 并发规则(必须知道)

  • 官方限制:QPS ≤ 5(每秒最多 5 次请求)
  • 安全阈值:1 秒 1 次最稳
  • 并发超限:返回 429 限流、封禁 IP、token 失效
  • 并发控制核心:控制请求频率 + 队列排队 + 延时等待

二、最简单并发控制方案(直接复制)

方法 1:延时控制(最稳、新手首选)

每次请求强制等待 1 秒,永不触发限流

python

运行

复制代码
import time
import requests

def get_comment(note_id, cursor=""):
    url = f"https://api.xiaohongshu.com/v2/notes/{note_id}/comments"
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    params = {"cursor": cursor, "page_size": 20}
    
    res = requests.get(url, headers=headers, params=params)
    time.sleep(1)  # 强制延时1s → 并发安全
    return res.json()

方法 2:线程池并发(高级、速度快)

适合批量爬取多篇笔记评论

python

运行

复制代码
from concurrent.futures import ThreadPoolExecutor
import time
import requests

# 全局控制:每秒最多允许2个请求(安全值)
RATE_LIMIT = 2
last_request_time = []

def safe_get(note_id, cursor=""):
    # 并发控制核心
    global last_request_time
    while len(last_request_time) >= RATE_LIMIT:
        now = time.time()
        last_request_time = [t for t in last_request_time if now - t < 1]
        if last_request_time:
            time.sleep(0.2)
    
    last_request_time.append(time.time())
    
    # 正常请求
    headers = {"Authorization": "Bearer YOUR_TOKEN"}
    url = f"https://api.xiaohongshu.com/v2/notes/{note_id}/comments"
    res = requests.get(url, headers=headers, params={"cursor": cursor, "page_size": 20})
    return res.json()

# 多线程并发(最多2线程)
with ThreadPoolExecutor(max_workers=2) as executor:
    executor.map(safe_get, ["笔记1", "笔记2", "笔记3"])

方法 3:令牌桶算法(企业级)

最标准的 API 并发控制(自动限速)

python

运行

复制代码
import time

class TokenBucket:
    def __init__(self, rate, capacity):
        self.rate = rate      # 每秒生成token数
        self.capacity = capacity
        self.tokens = capacity
        self.last_time = time.time()

    def take(self):
        now = time.time()
        add = (now - self.last_time) * self.rate
        self.tokens = min(self.capacity, self.tokens + add)
        self.last_time = now
        
        while self.tokens < 1:
            time.sleep(0.1)
            now = time.time()
            add = (now - self.last_time) * self.rate
            self.tokens = min(self.capacity, self.tokens + add)
            self.last_time = now
        
        self.tokens -= 1

# 使用:每秒最多2个请求
bucket = TokenBucket(rate=2, capacity=2)

def api_call():
    bucket.take()  # 限流
    # 发起API请求...

三、并发控制最佳实践(直接照做)

  1. 每秒不超过 2 次请求
  2. 批量任务用 2 个线程以内
  3. 出现 429 错误立即停止 3~5 秒
  4. 不要使用多进程高并发
  5. cursor 翻页必须串行,不能并发

四、429 限流自动重试代码(必备)

python

运行

复制代码
def get_with_retry(note_id, cursor="", retry=3):
    for i in range(retry):
        res = safe_get(note_id, cursor)
        if res.get("code") == 429:
            print("触发限流,等待5秒...")
            time.sleep(5)
            continue
        return res
    return None
相关推荐
观北海2 小时前
从 Sim2Sim 到 Sim2Real:以 ONNX 为核心的机器人策略实机落地全指南
python·机器人
wbs_scy2 小时前
Linux线程同步与互斥(三):线程同步深度解析之POSIX 信号量与环形队列生产者消费者模型,从原理到源码彻底吃透
java·开发语言
2zcode2 小时前
基于MATLAB元胞自动机(CA)的AZ80A镁合金动态再结晶(DRX)过程模拟
开发语言·matlab·动态再结晶
Yeh2020582 小时前
Filter与Listener笔记
笔记
iCxhust2 小时前
微机原理实践教程(C语言篇)---A001闪烁灯
c语言·开发语言·汇编·单片机·嵌入式硬件·51单片机·微机原理
九成宫3 小时前
Git 与远程仓库实操记录:克隆、配置、分支推送与问题排查
笔记·git·ssh
MATLAB代码顾问3 小时前
Python实现蜂群算法优化TSP问题
开发语言·python·算法
yaodong5183 小时前
不会Python也能数据分析:Gemini 3.1 Pro解决办公问题的SQL自动生成
python·sql·数据分析
jinanwuhuaguo3 小时前
(第三十三篇)五月的文明奠基:OpenClaw 2026.5.2版本的文明级解读
android·java·开发语言·人工智能·github·拓扑学·openclaw
BU摆烂会噶3 小时前
【LangGraph】持久化实现的三大能力——时间旅行
数据库·人工智能·python·postgresql·langchain