当前位置: 首页 > ops >正文

Python采集小红书笔记详情,json数据返回

Python采集小红书笔记详情并返回JSON数据

要采集小红书笔记详情并返回JSON格式数据,需要注意小红书有反爬机制,直接请求可能会被拦截。以下是几种实现方法:

方法一:使用小红书官方API(如果有权限)

import requests
import json
def get_xiaohongshu_note_detail(note_id):
"""
通过小红书官方API获取笔记详情(需要合法权限)
"""
url = f"https://www.xiaohongshu.com/api/sns/v1/note/{note_id}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"X-Sign": "your_sign_here", # 可能需要签名参数
"Authorization": "your_token_here" # 可能需要授权token
}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
data = response.json()
# 提取需要的字段
note_detail = {
"id": data.get("id"),
"title": data.get("title"),
"desc": data.get("desc"),
"images": [img["url"] for img in data.get("images", [])],
"likes": data.get("likes"),
"comments": data.get("comments"),
"user": {
"userid": data.get("user", {}).get("userid"),
"nickname": data.get("user", {}).get("nickname"),
"avatar": data.get("user", {}).get("image")
},
"time": data.get("time")
}
return json.dumps(note_detail, ensure_ascii=False, indent=2)
except Exception as e:
return json.dumps({"error": str(e)}, ensure_ascii=False)
# 使用示例
print(get_xiaohongshu_note_detail("your_note_id_here"))

方法二:使用Selenium模拟浏览器访问(适合无API权限)

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import json
import time
def get_xiaohongshu_note_with_selenium(note_url):
"""
使用Selenium获取小红书笔记详情
"""
chrome_options = Options()
chrome_options.add_argument("--headless") # 无头模式
chrome_options.add_argument("--disable-gpu")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36")
driver = webdriver.Chrome(options=chrome_options)
try:
driver.get(note_url)
time.sleep(5) # 等待页面加载
# 这里需要根据实际页面结构提取数据
# 小红书页面是动态渲染的,可能需要等待特定元素出现
# 示例:获取标题(实际选择器需要根据页面调整)
title = driver.find_element_by_css_selector("h1.title").text
# 获取描述
desc = driver.find_element_by_css_selector("div.desc").text
# 获取图片
images = [img.get_attribute("src") for img in driver.find_elements_by_css_selector("img.note-image")]
# 获取用户信息
user_nickname = driver.find_element_by_css_selector("a.user-nickname").text
user_avatar = driver.find_element_by_css_selector("img.user-avatar").get_attribute("src")
note_detail = {
"title": title,
"desc": desc,
"images": images,
"user": {
"nickname": user_nickname,
"avatar": user_avatar
}
}
return json.dumps(note_detail, ensure_ascii=False, indent=2)
except Exception as e:
return json.dumps({"error": str(e)}, ensure_ascii=False)
finally:
driver.quit()
# 使用示例
print(get_xiaohongshu_note_with_selenium("https://www.xiaohongshu.com/note_url_here"))

方法三:使用第三方服务或逆向工程API

import requests
import json
import re
def get_xiaohongshu_note_detail_v2(note_url):
"""
通过分析小红书网页获取API请求(可能不稳定)
"""
# 首先获取笔记ID
note_id_match = re.search(r"/discovery/item/(\w+)", note_url)
if not note_id_match:
return json.dumps({"error": "Invalid note URL"}, ensure_ascii=False)
note_id = note_id_match.group(1)
# 构造API请求(这些参数可能需要更新)
api_url = "https://edith.xiaohongshu.com/api/sns/v1/note"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36",
"X-Sign": "X12345678901234567890", # 可能需要动态生成
}
params = {
"note_id": note_id,
"source": "discovery"
}
try:
response = requests.get(api_url, headers=headers, params=params)
response.raise_for_status()
data = response.json()
# 提取关键数据
note_data = data.get("data", {}).get("note", {})
user_data = data.get("data", {}).get("user", {})
result = {
"id": note_data.get("id"),
"title": note_data.get("title"),
"desc": note_data.get("desc"),
"images": [img["url"] for img in note_data.get("imageList", [])],
"likes": note_data.get("likes"),
"comments": note_data.get("commentCount"),
"user": {
"id": user_data.get("userid"),
"name": user_data.get("nickname"),
"avatar": user_data.get("image")
},
"time": note_data.get("time")
}
return json.dumps(result, ensure_ascii=False, indent=2)
except Exception as e:
return json.dumps({"error": str(e)}, ensure_ascii=False)
# 使用示例
print(get_xiaohongshu_note_detail_v2("https://www.xiaohongshu.com/discovery/item/123456789"))

注意事项

  1. 合法性:在采集任何网站数据前,请确保遵守小红书的服务条款和相关法律法规。未经授权的大规模数据采集可能违反其使用条款。

  2. 反爬机制:小红书有严格的反爬措施,包括:

    • 验证User-Agent
    • 检查Cookie
    • 动态生成的签名参数
    • 频率限制
  3. 稳定性和维护:小红书的API和页面结构可能会变化,需要定期维护代码。

  4. 推荐做法

    • 优先申请官方API权限
    • 控制请求频率
    • 使用代理IP池
    • 处理验证码等验证机制
  5. 数据存储:考虑将结果存储在数据库中而非仅返回JSON,便于后续分析。

如需更稳定的解决方案,建议使用小红书官方提供的开发者API(如果有权限)或考虑合法的数据采购渠道。

http://www.xdnf.cn/news/18977.html

相关文章:

  • 深度解密SWAT模型:遥感快速建模、DEM/LU/气象数据不确定性、子流域/坡度划分、未来土地利用与气候变化情景模拟及措施效益评估
  • 生产环境Spark Structured Streaming实时数据处理应用实践分享
  • ZArchiver解压器:强大的安卓解压缩工具
  • 数据结构 第三轮
  • 使用 Dify 和 LangBot 搭建飞书通信机器人
  • Elasticsearch AI 语义搜索(semantic_text)
  • 群晖Nas上使用工具rsync工具usb同步数据
  • 国际期货Level2分时Tick历史行情数据处理分析
  • Vue2+Element 初学
  • 如何备份 TECNO 手机上的短信
  • position属性
  • rabbitmq学习笔记 ----- 多级消息延迟始终为 20s 问题排查
  • 2025最新uni-app横屏适配方案:微信小程序全平台兼容实战
  • Java开发MongoDB常见面试题及答案
  • DQL单表查询相关函数
  • 【WPF】WPF 自定义控件实战:从零打造一个可复用的 StatusIconTextButton (含避坑指南)
  • 安卓开发---BaseAdapter(定制ListView的界面)
  • 中文PDF解析工具测评与选型指南
  • js AbortController 实现中断接口请求
  • 【面试场景题】三阶段事务提交比两阶段事务提交的优势是什么
  • 《C++进阶之STL》【AVL树】
  • 基于 GPT-OSS 的成人自考口语评测 API 开发全记录
  • 数据分析编程第七步:分析与预测
  • Qt节点编辑器设计与实现:动态编辑与任务流可视化(一)
  • 【拍摄学习记录】07-影调、直方图量化、向右向左
  • 经典扫雷游戏实现:从零构建HTML5扫雷游戏
  • 【Python】Python 实现 PNG 转 ICO 图标转换工具
  • LightGBM 在金融逾期天数预测任务中的经验总结
  • Qt自定义聊天消息控件ChatMessage:初步实现仿微信聊天界面
  • Linux之Shell编程(一)