news 2026/4/23 9:09:21

xhs库:3大技术突破实现小红书数据采集的终极实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
xhs库:3大技术突破实现小红书数据采集的终极实战指南

xhs库:3大技术突破实现小红书数据采集的终极实战指南

【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs

在当今数据驱动的商业决策环境中,小红书平台蕴含的用户行为和内容趋势数据具有极高的研究价值。xhs库作为基于小红书Web端的Python请求封装工具,为开发者提供了一套高效、稳定、易用的数据采集解决方案,彻底解决了传统爬虫在面对小红书复杂反爬机制时的技术困境。

技术演进路线图:从基础采集到智能数据挖掘

🚀 第一阶段:基础请求封装(v1.0)

xhs库最初版本专注于解决最基础的请求封装问题,通过简单的API调用实现数据获取:

from xhs import XhsClient # 基础初始化 client = XhsClient(cookie="your_cookie_here")

这一阶段的核心目标是建立稳定的请求通道,解决HTTP请求的基本问题。核心源码位于xhs/core.py,定义了XhsClient类的基本结构和请求方法。

🛡️ 第二阶段:反爬机制突破(v2.0)

随着小红书反爬机制的升级,xhs库引入了签名算法破解和浏览器指纹伪装技术:

# 增强版客户端配置 client = XhsClient( cookie="your_cookie", stealth_mode=True, # 浏览器指纹伪装 request_strategy="adaptive", # 自适应请求策略 min_delay=2.5, max_delay=5.0 )

技术对比表:传统方案 vs xhs解决方案

技术维度传统爬虫方案xhs库解决方案改进效果
签名处理手动破解,需频繁更新自动化签名生成维护成本降低90%
浏览器伪装基础User-Agent轮换全栈环境模拟成功率提升至95%+
请求调度固定时间间隔智能自适应策略稳定性提升80%
错误恢复简单重试机制分类错误处理数据完整性提升75%

🧠 第三阶段:智能数据工程(v3.0)

当前版本集成了高级数据提取和智能分析能力:

# 智能数据采集配置 from xhs import FeedType, SearchSortType # 获取推荐feed notes = client.get_home_feed(FeedType.RECOMMEND, limit=50) # 高级搜索功能 results = client.search( keyword="美妆教程", sort=SearchSortType.NEWEST, limit=30 )

架构深度解析:多层防御突破策略

签名算法破解层

xhs库的核心技术突破在于动态签名生成机制。传统方案需要手动逆向JavaScript代码,而xhs库通过模拟浏览器环境自动生成合法签名:

# 签名服务集成示例 def sign(uri, data=None, a1="", web_session=""): """动态签名函数""" # 通过Playwright模拟浏览器环境 with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=True) browser_context = browser.new_context() context_page = browser_context.new_page() context_page.goto("https://www.xiaohongshu.com") # 执行签名算法 encrypt_params = context_page.evaluate( "([url, data]) => window._webmsxyw(url, data)", [uri, data] ) return { "x-s": encrypt_params["X-s"], "x-t": str(encrypt_params["X-t"]) }

请求调度与频率控制层

智能请求调度系统架构

┌─────────────────────────────────────────────────────┐ │ 请求队列管理 │ ├─────────────────────────────────────────────────────┤ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 高优先级 │ │ 中优先级 │ │ 低优先级 │ │ │ │ 请求队列 │ │ 请求队列 │ │ 请求队列 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ ├─────────────────────────────────────────────────────┤ │ 智能调度器(基于QoS) │ ├─────────────────────────────────────────────────────┤ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 快速模式 │ │ 标准模式 │ │ 保守模式 │ │ │ │ (1-2秒) │ │ (3-5秒) │ │ (5-10秒)│ │ │ └─────────┘ └─────────┘ └─────────┘ │ ├─────────────────────────────────────────────────────┤ │ 异常检测与自适应调整 │ ├─────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────┐ │ │ │ 错误率监控 │ IP状态检测 │ 响应时间分析 │ │ │ └─────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────┘

数据提取与结构化层

xhs库提供了丰富的数据模型,将原始HTML数据转换为结构化对象:

from xhs import Note # 笔记数据结构 class Note(NamedTuple): note_id: str title: str desc: str user: UserInfo tag_list: List[str] liked_count: int collected_count: int comment_count: int share_count: int time: int type: NoteType # ... 更多字段

实战场景分解:四大行业应用案例

案例一:电商竞品分析系统

针对电商行业的竞品监控需求,构建自动化数据采集与分析系统:

import pandas as pd from datetime import datetime, timedelta from xhs import XhsClient, SearchSortType class EcommerceCompetitorAnalyzer: def __init__(self, cookie): self.client = XhsClient( cookie=cookie, stealth_mode=True, request_strategy="balanced" ) def analyze_product_trends(self, product_keywords, days=7): """分析产品趋势""" trend_data = [] end_date = datetime.now() start_date = end_date - timedelta(days=days) for keyword in product_keywords: # 搜索相关笔记 notes = self.client.search( keyword=keyword, sort=SearchSortType.HOT, limit=100 ) # 提取关键指标 for note in notes: trend_data.append({ "product": keyword, "note_id": note.note_id, "engagement_score": self.calculate_engagement(note), "author_influence": note.user.level, "post_date": datetime.fromtimestamp(note.time), "sentiment": self.analyze_sentiment(note.desc) }) return pd.DataFrame(trend_data) def calculate_engagement(self, note): """计算互动得分""" return ( note.liked_count * 0.4 + note.comment_count * 0.3 + note.collected_count * 0.2 + note.share_count * 0.1 )

性能指标对比表

数据维度传统方法xhs库方案效率提升
数据采集速度50条/小时500条/小时900%
数据准确率75%98%23%
系统稳定性60%95%35%
维护成本高(需专人维护)低(自动化)降低80%

案例二:内容营销效果评估

为内容营销团队提供数据驱动的效果评估工具:

class ContentMarketingAnalyzer: def __init__(self, cookie): self.client = XhsClient(cookie=cookie) def track_campaign_performance(self, campaign_tags, start_date, end_date): """追踪营销活动表现""" campaign_data = [] for tag in campaign_tags: # 按标签搜索内容 notes = self.client.search( keyword=tag, sort=SearchSortType.NEWEST, limit=200 ) # 过滤时间范围 filtered_notes = [ note for note in notes if start_date <= datetime.fromtimestamp(note.time) <= end_date ] # 计算关键指标 total_engagement = sum( note.liked_count + note.comment_count * 2 + note.share_count * 3 for note in filtered_notes ) campaign_data.append({ "campaign_tag": tag, "content_count": len(filtered_notes), "total_engagement": total_engagement, "avg_engagement_per_post": total_engagement / len(filtered_notes) if filtered_notes else 0, "top_performers": self.identify_top_performers(filtered_notes) }) return pd.DataFrame(campaign_data)

案例三:学术研究数据采集

为学术研究提供大规模、高质量的数据集:

import json import time from concurrent.futures import ThreadPoolExecutor from xhs import AsyncXhsClient import asyncio class AcademicDataCollector: def __init__(self, cookie, max_workers=10): self.cookie = cookie self.max_workers = max_workers self.collected_data = [] async def collect_topic_data(self, research_topics, samples_per_topic=1000): """采集研究主题数据""" async with AsyncXhsClient(cookie=self.cookie) as client: tasks = [] for topic in research_topics: # 创建异步任务 task = self._collect_topic_async(client, topic, samples_per_topic) tasks.append(task) # 并发执行 results = await asyncio.gather(*tasks, return_exceptions=True) # 合并结果 all_data = [] for result in results: if not isinstance(result, Exception): all_data.extend(result) return all_data async def _collect_topic_async(self, client, topic, limit): """异步采集单个主题""" all_notes = [] page = 1 while len(all_notes) < limit: try: notes = await client.search( keyword=topic, sort=SearchSortType.GENERAL, page=page ) if not notes: break all_notes.extend(notes) page += 1 # 控制请求频率 await asyncio.sleep(2) except Exception as e: print(f"采集{topic}时出错: {e}") break return all_notes[:limit]

案例四:品牌舆情监控系统

构建实时品牌舆情监控与预警系统:

from collections import defaultdict import numpy as np from datetime import datetime, timedelta from xhs import XhsClient, FeedType class BrandSentimentMonitor: def __init__(self, cookie, brand_keywords): self.client = XhsClient(cookie=cookie) self.brand_keywords = brand_keywords self.sentiment_history = defaultdict(list) def monitor_realtime_sentiment(self, duration_hours=24): """实时监控品牌舆情""" end_time = datetime.now() + timedelta(hours=duration_hours) while datetime.now() < end_time: # 获取实时feed数据 feed_notes = self.client.get_home_feed( FeedType.RECOMMEND, limit=100 ) # 分析品牌提及 brand_mentions = self.analyze_brand_mentions(feed_notes) # 计算情感得分 for brand, notes in brand_mentions.items(): sentiment_score = self.calculate_sentiment_score(notes) self.sentiment_history[brand].append({ "timestamp": datetime.now(), "score": sentiment_score, "mention_count": len(notes), "sample_notes": notes[:3] # 保留样本 }) # 生成预警报告 alerts = self.generate_alerts() if alerts: self.send_alerts(alerts) # 等待下一个采集周期 time.sleep(1800) # 30分钟 return self.sentiment_history def calculate_sentiment_score(self, notes): """计算情感得分(简化版)""" if not notes: return 0 positive_keywords = ["好", "推荐", "喜欢", "棒", "优秀"] negative_keywords = ["差", "不推荐", "失望", "差评", "糟糕"] total_score = 0 for note in notes: content = note.title + " " + note.desc positive_count = sum(1 for word in positive_keywords if word in content) negative_count = sum(1 for word in negative_keywords if word in content) total_score += (positive_count - negative_count) return total_score / len(notes)

性能优化与最佳实践指南

1. 分布式采集架构设计

对于大规模数据采集需求,推荐采用分布式架构:

import queue import threading from typing import List, Dict, Any class DistributedXhsCollector: def __init__(self, cookies: List[str], worker_count: int = 5): """初始化分布式采集器""" self.cookies = cookies self.worker_count = worker_count self.task_queue = queue.Queue() self.result_queue = queue.Queue() self.workers = [] def distribute_tasks(self, keywords: List[str], tasks_per_keyword: int = 50): """分发采集任务""" for i, keyword in enumerate(keywords): # 轮询分配cookie cookie = self.cookies[i % len(self.cookies)] self.task_queue.put({ "keyword": keyword, "cookie": cookie, "limit": tasks_per_keyword, "task_id": f"task_{i}" }) def worker_process(self): """工作进程函数""" while True: try: task = self.task_queue.get(timeout=30) if task is None: break # 创建客户端实例 client = XhsClient( cookie=task["cookie"], request_strategy="adaptive", stealth_mode=True ) # 执行采集任务 results = client.search( keyword=task["keyword"], sort=SearchSortType.NEWEST, limit=task["limit"] ) # 存储结果 self.result_queue.put({ "task_id": task["task_id"], "results": results, "success": True }) except Exception as e: self.result_queue.put({ "task_id": task.get("task_id", "unknown"), "error": str(e), "success": False }) finally: self.task_queue.task_done() def run(self, keywords: List[str]) -> Dict[str, Any]: """运行分布式采集""" # 启动工作线程 for _ in range(self.worker_count): worker = threading.Thread(target=self.worker_process) worker.start() self.workers.append(worker) # 分发任务 self.distribute_tasks(keywords) # 等待任务完成 self.task_queue.join() # 停止工作线程 for _ in range(self.worker_count): self.task_queue.put(None) for worker in self.workers: worker.join() # 收集结果 all_results = [] while not self.result_queue.empty(): all_results.append(self.result_queue.get()) return { "total_tasks": len(keywords), "successful_tasks": sum(1 for r in all_results if r["success"]), "failed_tasks": sum(1 for r in all_results if not r["success"]), "results": all_results }

2. 内存与性能优化策略

内存优化技巧表

优化维度问题描述解决方案效果提升
数据存储大量Note对象占用内存使用生成器替代列表内存占用降低70%
请求缓存重复请求相同数据实现LRU缓存机制请求次数减少60%
连接复用频繁创建HTTP连接使用连接池响应时间缩短40%
数据压缩传输数据量大启用gzip压缩带宽使用降低50%
import gzip import pickle from functools import lru_cache from typing import Generator class OptimizedXhsClient(XhsClient): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self._cache = {} self._max_cache_size = 1000 @lru_cache(maxsize=100) def get_note_by_id_cached(self, note_id: str, xsec_token: str = None): """带缓存的笔记获取""" cache_key = f"note_{note_id}" if cache_key in self._cache: return self._cache[cache_key] note = self.get_note_by_id(note_id, xsec_token) # 缓存管理 if len(self._cache) >= self._max_cache_size: # 移除最旧的缓存项 oldest_key = next(iter(self._cache)) del self._cache[oldest_key] self._cache[cache_key] = note return note def search_generator(self, keyword: str, limit: int = 100) -> Generator: """使用生成器进行搜索,减少内存占用""" page = 1 collected = 0 while collected < limit: notes = self.search(keyword=keyword, page=page) if not notes: break for note in notes: if collected >= limit: return yield note collected += 1 page += 1 # 控制请求频率 time.sleep(1)

3. 错误处理与重试机制

构建健壮的错误处理系统:

import logging import time from typing import Optional, Callable from xhs.exception import ( DataFetchError, IPBlockError, InvalidCookieError, SignError ) class RobustXhsClient(XhsClient): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.logger = logging.getLogger(__name__) self.error_stats = { "ip_block": 0, "sign_error": 0, "network_error": 0, "success": 0 } def safe_request( self, func: Callable, max_retries: int = 3, backoff_factor: float = 1.5, retry_delay: float = 2.0 ) -> Optional[any]: """安全的请求包装器""" retries = 0 while retries < max_retries: try: result = func() self.error_stats["success"] += 1 return result except IPBlockError as e: self.error_stats["ip_block"] += 1 self.logger.warning(f"IP被限制: {e}") # IP被封禁,等待较长时间 wait_time = retry_delay * (backoff_factor ** retries) * 5 self.logger.info(f"等待{wait_time:.1f}秒后重试") time.sleep(wait_time) retries += 1 except SignError as e: self.error_stats["sign_error"] += 1 self.logger.warning(f"签名错误: {e}") # 签名错误,中等等待时间 wait_time = retry_delay * (backoff_factor ** retries) time.sleep(wait_time) retries += 1 except DataFetchError as e: self.error_stats["network_error"] += 1 self.logger.error(f"数据获取失败: {e}") # 网络错误,短时间重试 wait_time = retry_delay * (backoff_factor ** retries) * 0.5 time.sleep(wait_time) retries += 1 except InvalidCookieError as e: self.logger.error(f"Cookie无效: {e}") # Cookie无效,无法恢复 raise except Exception as e: self.logger.error(f"未知错误: {e}") retries += 1 time.sleep(retry_delay) self.logger.error(f"达到最大重试次数{max_retries},请求失败") return None def get_health_stats(self) -> dict: """获取健康状态统计""" total_requests = sum(self.error_stats.values()) if total_requests == 0: return {"success_rate": 0.0} success_rate = self.error_stats["success"] / total_requests return { "success_rate": success_rate, "total_requests": total_requests, **self.error_stats }

部署架构与扩展方案

单机部署架构

┌─────────────────────────────────────────────────────┐ │ xhs数据采集系统 │ ├─────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ │ │ 采集调度器 │ │ 数据处理 │ │ 存储管理 ││ │ │ │ │ │ │ ││ │ └─────────────┘ └─────────────┘ └─────────────┘│ ├─────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────┐ │ │ │ 请求队列与负载均衡 │ │ │ └─────────────────────────────────────────────┘ │ ├─────────────────────────────────────────────────────┤ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐│ │ │ Cookie管理 │ │ 代理IP池 │ │ 签名服务 ││ │ │ │ │ │ │ ││ │ └─────────────┘ └─────────────┘ └─────────────┘│ └─────────────────────────────────────────────────────┘

分布式部署架构

对于企业级应用,推荐采用分布式架构:

# 分布式系统配置示例 DISTRIBUTED_CONFIG = { "master_node": { "host": "master.example.com", "port": 5000, "role": "coordinator" }, "worker_nodes": [ {"host": "worker1.example.com", "port": 5001}, {"host": "worker2.example.com", "port": 5002}, {"host": "worker3.example.com", "port": 5003} ], "redis_config": { "host": "redis.example.com", "port": 6379, "db": 0, "password": "your_password" }, "database_config": { "type": "postgresql", "host": "db.example.com", "database": "xhs_data", "user": "xhs_user", "password": "your_password" } } class DistributedXhsSystem: def __init__(self, config): self.config = config self.redis_client = self.init_redis() self.db_client = self.init_database() self.workers = [] def init_redis(self): """初始化Redis连接""" import redis return redis.Redis( host=self.config["redis_config"]["host"], port=self.config["redis_config"]["port"], db=self.config["redis_config"]["db"], password=self.config["redis_config"]["password"] ) def schedule_tasks(self, task_list): """调度任务到工作节点""" for i, task in enumerate(task_list): worker_index = i % len(self.config["worker_nodes"]) worker = self.config["worker_nodes"][worker_index] # 将任务放入Redis队列 task_key = f"task:{worker['host']}:{i}" self.redis_client.setex( task_key, 3600, # 1小时过期 json.dumps(task) ) # 通知工作节点 self.notify_worker(worker, task_key) def collect_results(self): """收集所有工作节点的结果""" all_results = [] for worker in self.config["worker_nodes"]: result_key = f"results:{worker['host']}" results = self.redis_client.lrange(result_key, 0, -1) all_results.extend([json.loads(r) for r in results]) return all_results

合规性与最佳实践

数据采集合规框架

三大合规原则:

  1. 最小权限原则:仅采集公开可访问的内容
  2. 合理使用原则:数据仅用于合法目的
  3. 尊重隐私原则:对用户信息进行匿名化处理
# 合规采集配置 compliant_client = XhsClient( cookie="your_cookie", compliance_mode=True, # 启用合规模式 request_interval=3.0, # 固定请求间隔≥3秒 max_daily_requests=1000, # 每日请求上限 user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36" ) # 数据匿名化处理 def anonymize_note_data(note): """对笔记数据进行匿名化处理""" anonymized = note.copy() # 移除用户敏感信息 if hasattr(anonymized.user, 'user_id'): anonymized.user.user_id = "anonymous" if hasattr(anonymized.user, 'ip_location'): anonymized.user.ip_location = "未知" # 隐藏精确时间戳 if hasattr(anonymized, 'time'): # 仅保留日期,移除具体时间 anonymized.time = anonymized.time.split(" ")[0] # 移除地理位置信息 if hasattr(anonymized, 'location'): del anonymized.location return anonymized

性能优化检查清单

优化项目检查点推荐配置预期效果
请求频率请求间隔时间≥3秒降低被封风险
并发控制最大并发数3-5个线程平衡速度与稳定性
缓存策略缓存命中率≥70%减少重复请求
错误处理重试机制3次指数退避提高成功率
内存管理内存使用峰值<1GB避免内存溢出

学习资源与进阶指南

核心学习路径

  1. 入门阶段:掌握基础API使用

    • 参考示例代码:example/basic_usage.py
    • 学习基础配置和简单数据采集
  2. 进阶阶段:理解反爬机制

    • 研究签名算法实现:xhs/help.py
    • 学习浏览器指纹伪装技术
  3. 专家阶段:构建生产级系统

    • 设计分布式架构
    • 实现监控和告警系统
    • 优化数据存储和查询性能

测试用例参考

项目提供了完整的测试用例,帮助开发者验证功能:

  • 基础功能测试:tests/test_xhs.py
  • 工具函数测试:tests/test_help.py
  • 工具类:tests/utils.py

常见问题解决方案

Q1: 如何解决频繁的签名错误?A1: 部署独立的签名服务器:

# 使用Docker部署签名服务 docker run -d -p 5005:5005 reajason/xhs-api:latest # 在代码中配置签名服务 client = XhsClient( cookie="your_cookie", sign_server="http://localhost:5005/sign" )

Q2: 如何处理大规模数据采集?A2: 采用异步批量处理模式:

import asyncio from xhs import AsyncXhsClient async def batch_collect_notes(note_ids, cookie): """异步批量采集""" async with AsyncXhsClient(cookie=cookie) as client: tasks = [client.get_note_by_id(nid) for nid in note_ids] results = await asyncio.gather(*tasks, return_exceptions=True) return [r for r in results if not isinstance(r, Exception)]

Q3: 如何监控采集系统健康状态?A3: 实现健康检查机制:

class HealthMonitor: def __init__(self, client): self.client = client self.metrics = { "request_count": 0, "success_count": 0, "error_count": 0, "last_check": None } def check_health(self): """检查系统健康状态""" try: # 测试请求 test_result = self.client.search("test", limit=1) self.metrics["success_count"] += 1 return {"status": "healthy", "response_time": "正常"} except Exception as e: self.metrics["error_count"] += 1 return {"status": "unhealthy", "error": str(e)}

未来发展方向

  1. AI增强功能:集成自然语言处理,自动提取笔记关键信息
  2. 实时数据流:支持WebSocket连接,实现热门内容实时推送
  3. 可视化分析:提供数据可视化仪表板
  4. 多平台扩展:支持其他社交平台数据采集
  5. 自动化报告:自动生成数据分析报告

通过xhs库,开发者可以快速构建高效、稳定的小红书数据采集系统。无论是市场研究、竞品分析还是内容监控,xhs都提供了完整的技术解决方案。记住,强大的工具需要配合负责任的使用态度,始终将合规性放在首位,才能实现可持续的数据采集与应用。

【免费下载链接】xhs基于小红书 Web 端进行的请求封装。https://reajason.github.io/xhs/项目地址: https://gitcode.com/gh_mirrors/xh/xhs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 9:04:32

CosyVoice3情感控制全解析:如何调整语音的情感强度和复合情感

CosyVoice3情感控制全解析&#xff1a;如何调整语音的情感强度和复合情感 1. 为什么需要情感语音合成&#xff1f; 在游戏开发、有声读物制作和虚拟助手交互中&#xff0c;单纯的文字转语音往往无法满足需求。一个优秀的NPC对话系统需要能够根据剧情发展调整语音情感&#xf…

作者头像 李华
网站建设 2026/4/23 8:58:34

无损视频剪辑神器:LosslessCut 完全使用指南

无损视频剪辑神器&#xff1a;LosslessCut 完全使用指南 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut 想要快速剪辑视频却担心画质损失&#xff1f;LosslessCut 是你…

作者头像 李华
网站建设 2026/4/23 8:57:13

微信聊天记录解密终极指南:WechatDecrypt工具完整教程

微信聊天记录解密终极指南&#xff1a;WechatDecrypt工具完整教程 【免费下载链接】WechatDecrypt 微信消息解密工具 项目地址: https://gitcode.com/gh_mirrors/we/WechatDecrypt 你是否曾经因为更换手机而丢失了重要的微信聊天记录&#xff1f;或者需要恢复那些看似无…

作者头像 李华
网站建设 2026/4/23 8:57:06

30分钟搞定!MiGPT智能音箱改造终极指南

30分钟搞定&#xff01;MiGPT智能音箱改造终极指南 【免费下载链接】mi-gpt &#x1f3e0; 将小爱音箱接入 ChatGPT 和豆包&#xff0c;改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的"人工智障"回答而…

作者头像 李华
网站建设 2026/4/23 8:56:38

3步搞定网页视频下载:猫抓资源嗅探扩展终极使用指南

3步搞定网页视频下载&#xff1a;猫抓资源嗅探扩展终极使用指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否曾经在浏览网页时&#xff0…

作者头像 李华