news 2026/4/3 4:55:42

Python爬虫与数据采集:小红书内容高效获取指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python爬虫与数据采集:小红书内容高效获取指南

Python爬虫与数据采集:小红书内容高效获取指南

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

在数字化时代,小红书作为内容分享和消费决策平台,蕴含着丰富的用户行为和市场趋势数据。本文将从基础配置到高级应用,全面解析小红书数据采集的实用技巧,帮助你突破技术壁垒,合法合规地获取有价值的信息。

从零开始:环境搭建与基础配置

开发环境准备

  1. 创建独立虚拟环境
# 创建虚拟环境 python -m venv xhs-scraper-env # 激活环境(Windows) xhs-scraper-env\Scripts\activate # 激活环境(Linux/Mac) source xhs-scraper-env/bin/activate
  1. 安装核心依赖包
# 安装xhs工具包 pip install xhs # 安装数据处理工具 pip install pandas requests fake_useragent

基础采集代码实现

# 导入必要的库 from xhs import XHS import time from fake_useragent import UserAgent # 初始化客户端 def init_xhs_client(): # 创建UserAgent实例,用于生成随机浏览器标识 ua = UserAgent() # 初始化XHS客户端 client = XHS() # 设置随机User-Agent client.set_headers({ "User-Agent": ua.random, "Accept-Language": "zh-CN,zh;q=0.9" }) return client # 基础使用示例 if __name__ == "__main__": # 初始化客户端 client = init_xhs_client() # 输出客户端状态 print("客户端初始化成功!") print("准备开始数据采集...")

避坑指南

  • 虚拟环境路径中避免包含中文和特殊字符
  • 安装失败时尝试更新pip:pip install --upgrade pip
  • 若提示依赖冲突,可使用pip install xhs --no-deps单独安装核心库

高效采集策略:批量获取用户笔记的完整方案

采集流程设计

  1. 准备工作

    • 获取目标用户ID(从用户主页URL提取)
    • 设置合理的请求参数
    • 配置数据存储方式
  2. 分页采集实现

def collect_user_notes(client, user_id, max_pages=10): """ 采集用户公开笔记 :param client: XHS客户端实例 :param user_id: 目标用户ID :param max_pages: 最大采集页数,防止无限循环 :return: 笔记列表 """ notes = [] page = 1 while page <= max_pages: try: # 获取一页笔记数据 result = client.get_user_notes(user_id=user_id, page=page) # 添加到结果列表 notes.extend(result.get('notes', [])) # 检查是否有下一页 if not result.get('has_more', False): print(f"已获取所有笔记,共{len(notes)}条") break print(f"已获取第{page}页,累计{len(notes)}条笔记") # 随机延迟2-3秒,避免请求过于频繁 time.sleep(2 + (page % 2)) page += 1 except Exception as e: print(f"获取第{page}页时出错: {str(e)}") # 出错时增加延迟时间 time.sleep(5) return notes # 使用示例 if __name__ == "__main__": client = init_xhs_client() user_notes = collect_user_notes(client, user_id="目标用户ID", max_pages=5) print(f"成功采集{len(user_notes)}条笔记")

场景应用

适用于市场调研、竞品分析、内容创作参考等场景。通过采集特定领域KOL的笔记数据,可以分析热门话题趋势、内容风格偏好和用户互动特点。

避坑指南

  • 单次采集页数不宜过多,建议分时段采集
  • 遇到连续错误时应暂停采集,避免IP被封禁
  • 对于粉丝量庞大的用户,建议设置max_pages限制单次采集量

反爬突破方案:构建稳定采集系统的关键技术

反爬机制应对策略

  1. 动态请求间隔设置
import random def smart_sleep(base_interval=2, jitter=1): """智能延迟,增加随机性""" sleep_time = base_interval + random.uniform(-jitter, jitter) time.sleep(max(0.5, sleep_time)) # 确保最小延迟
  1. 代理IP池集成
def setup_proxy(client, proxy_list): """ 配置代理IP :param client: XHS客户端实例 :param proxy_list: 代理IP列表,格式: ["http://ip:port", "https://ip:port"] """ if proxy_list and len(proxy_list) > 0: # 随机选择一个代理 proxy = random.choice(proxy_list) client.set_proxy(proxy) print(f"已设置代理: {proxy}") return client
  1. 会话保持与二维码登录
def login_with_qrcode(client): """通过二维码登录获取会话""" try: # 获取登录二维码 qr_code = client.get_login_qrcode() # 显示二维码(实际应用中可保存为图片或显示在UI中) print("请扫描二维码登录:") print(qr_code) # 等待用户扫描 input("扫描完成后按Enter继续...") # 验证登录状态 if client.check_login_status(): print("登录成功!") # 保存会话以便后续使用 client.save_session("xhs_session.json") return True else: print("登录失败") return False except Exception as e: print(f"登录过程出错: {str(e)}") return False

工具对比选型建议

反爬策略实施难度效果成本
请求间隔控制基础防护
随机User-Agent基础防护
代理IP池良好
会话保持良好
验证码识别优秀

避坑指南

  • 免费代理IP质量参差不齐,建议使用付费代理服务
  • 会话文件应妥善保存,避免频繁登录
  • 代理切换不宜过于频繁,建议每小时更换一次

关键词精准挖掘:内容搜索与数据筛选技巧

高级搜索功能实现

def advanced_search(client, keywords, sort_type="hot", max_pages=5): """ 高级搜索功能 :param client: XHS客户端实例 :param keywords: 搜索关键词列表 :param sort_type: 排序方式: "hot"热门, "new"最新, "relate"相关 :param max_pages: 最大页数 :return: 去重后的搜索结果 """ all_notes = [] seen_note_ids = set() for keyword in keywords: print(f"搜索关键词: {keyword}") page = 1 while page <= max_pages: try: # 执行搜索 result = client.search_notes( keyword=keyword, sort_type=sort_type, page=page ) # 处理结果 for note in result.get('notes', []): note_id = note.get('id') if note_id not in seen_note_ids: seen_note_ids.add(note_id) all_notes.append(note) # 检查是否有下一页 if not result.get('has_more', False): break smart_sleep(2, 0.5) page += 1 except Exception as e: print(f"搜索出错: {str(e)}") smart_sleep(5) break print(f"搜索完成,共获取{len(all_notes)}条去重笔记") return all_notes # 使用示例 if __name__ == "__main__": client = init_xhs_client() # 多关键词搜索并去重 keywords = ["旅行攻略", "旅游指南", "出行攻略"] notes = advanced_search(client, keywords, sort_type="hot")

搜索结果筛选与分析

def filter_notes(notes, min_like_count=1000): """ 筛选高质量笔记 :param notes: 笔记列表 :param min_like_count: 最小点赞数 :return: 筛选后的笔记列表 """ filtered = [] for note in notes: # 提取关键数据 stats = note.get('stats', {}) like_count = stats.get('like_count', 0) # 应用筛选条件 if like_count >= min_like_count: filtered.append({ 'id': note.get('id'), 'title': note.get('title'), 'like_count': like_count, 'collect_count': stats.get('collect_count', 0), 'comment_count': stats.get('comment_count', 0), 'share_count': stats.get('share_count', 0), 'create_time': note.get('create_time'), 'user_name': note.get('user', {}).get('nickname') }) # 按点赞数排序 filtered.sort(key=lambda x: x['like_count'], reverse=True) return filtered

场景应用

适用于市场趋势分析、热门话题追踪、竞品内容监控等场景。通过多关键词组合搜索,可以全面掌握特定领域的内容生态。

避坑指南

  • 避免使用过于宽泛的关键词,导致结果杂乱
  • 搜索间隔应比列表采集更长(建议3-5秒)
  • 对同一关键词的搜索建议间隔30分钟以上

评论情感分析:从用户反馈中提取价值信息

评论采集实现

def collect_note_comments(client, note_id, max_pages=3): """ 采集单篇笔记的评论 :param client: XHS客户端实例 :param note_id: 笔记ID :param max_pages: 最大页数 :return: 评论列表 """ comments = [] page = 1 while page <= max_pages: try: # 获取评论数据 result = client.get_note_comments(note_id=note_id, page=page) # 添加评论到列表 comments.extend(result.get('comments', [])) # 检查是否有下一页 if not result.get('has_more', False): break print(f"已获取第{page}页评论,共{len(comments)}条") # 评论接口更敏感,设置更长延迟 smart_sleep(3, 1) page += 1 except Exception as e: print(f"获取评论出错: {str(e)}") smart_sleep(6) break return comments

情感分析基础实现

from textblob import TextBlob def analyze_comment_sentiment(comment): """ 分析评论情感倾向 :param comment: 评论文本 :return: 情感分数和分类 """ # 创建TextBlob对象 blob = TextBlob(comment) # 获取情感分数 (-1到1,负数为负面,正数为正面) sentiment_score = blob.sentiment.polarity # 分类情感 if sentiment_score > 0.1: sentiment = "positive" elif sentiment_score < -0.1: sentiment = "negative" else: sentiment = "neutral" return { "text": comment, "score": sentiment_score, "sentiment": sentiment } # 批量分析示例 def batch_analyze_comments(comments): """批量分析评论情感""" results = [] for comment in comments: # 提取评论文本 comment_text = comment.get('content', '') if comment_text: results.append(analyze_comment_sentiment(comment_text)) return results

场景应用

适用于产品反馈分析、用户需求挖掘、品牌口碑监测等场景。通过情感分析,可以快速了解用户对特定内容或产品的真实态度。

避坑指南

  • 评论采集频率应控制在最低必要水平
  • 情感分析结果需结合上下文人工校验
  • 注意处理表情符号和网络用语,可能影响分析准确性

数据存储与管理:构建高效数据处理流程

数据存储方案

import json import pandas as pd from datetime import datetime def save_notes_to_json(notes, filename=None): """保存笔记数据到JSON文件""" if not filename: # 生成包含时间戳的文件名 timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"xhs_notes_{timestamp}.json" with open(filename, 'w', encoding='utf-8') as f: json.dump(notes, f, ensure_ascii=False, indent=2) print(f"笔记数据已保存至: {filename}") return filename def save_notes_to_excel(notes, filename=None): """保存笔记数据到Excel文件""" if not filename: timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") filename = f"xhs_notes_{timestamp}.xlsx" # 转换为DataFrame df = pd.DataFrame(notes) # 保存到Excel df.to_excel(filename, index=False) print(f"笔记数据已保存至: {filename}") return filename

数据去重与更新策略

def load_existing_notes(filename): """加载已保存的笔记数据""" try: with open(filename, 'r', encoding='utf-8') as f: return json.load(f) except (FileNotFoundError, json.JSONDecodeError): return [] def merge_notes(new_notes, existing_notes): """合并新旧笔记,去重并更新数据""" # 创建ID到笔记的映射 note_map = {note['id']: note for note in existing_notes} # 添加或更新新笔记 for note in new_notes: note_id = note['id'] if note_id in note_map: # 更新已有笔记(例如更新统计数据) note_map[note_id].update(note) else: # 添加新笔记 note_map[note_id] = note # 转换回列表 merged_notes = list(note_map.values()) print(f"合并完成,共{len(merged_notes)}条去重笔记") return merged_notes

场景应用

适用于长期数据追踪、历史趋势分析、定期报告生成等场景。合理的数据管理策略可以确保数据的完整性和一致性,为后续分析提供可靠基础。

避坑指南

  • 定期备份数据,防止意外丢失
  • 大型数据集建议使用数据库存储(如MongoDB)
  • 注意数据编码问题,始终使用UTF-8编码保存文本

分布式采集:提升效率的高级技术

多线程采集实现

import threading from queue import Queue def thread_worker(client, queue, results, lock): """线程工作函数""" while not queue.empty(): user_id = queue.get() try: # 采集用户笔记 notes = collect_user_notes(client, user_id, max_pages=3) # 线程安全地添加结果 with lock: results.extend(notes) print(f"完成用户 {user_id} 的采集,获取 {len(notes)} 条笔记") except Exception as e: print(f"处理用户 {user_id} 时出错: {str(e)}") finally: queue.task_done() def distributed_collect(client, user_ids, thread_count=5): """ 分布式采集多个用户的笔记 :param client: XHS客户端实例 :param user_ids: 用户ID列表 :param thread_count: 线程数量 :return: 所有笔记 """ # 创建队列和结果列表 queue = Queue() results = [] lock = threading.Lock() # 填充队列 for user_id in user_ids: queue.put(user_id) # 创建并启动线程 threads = [] for _ in range(thread_count): # 为每个线程创建新的客户端实例(避免共享状态) thread_client = init_xhs_client() thread = threading.Thread( target=thread_worker, args=(thread_client, queue, results, lock) ) thread.start() threads.append(thread) # 等待所有任务完成 queue.join() # 等待所有线程结束 for thread in threads: thread.join() print(f"分布式采集完成,共获取 {len(results)} 条笔记") return results

任务调度与监控

import schedule import time as schedule_time def scheduled_collect(user_ids, interval_hours=24): """ 设置定时采集任务 :param user_ids: 要定期采集的用户ID列表 :param interval_hours: 采集间隔(小时) """ def job(): print(f"执行定时采集任务 - {datetime.now()}") client = init_xhs_client() notes = distributed_collect(client, user_ids) save_notes_to_json(notes) # 立即执行一次 job() # 设置定时任务 schedule.every(interval_hours).hours.do(job) print(f"已设置定时采集任务,每{interval_hours}小时执行一次") # 运行调度器 while True: schedule.run_pending() schedule_time.sleep(60)

场景应用

适用于大规模数据采集、实时监控系统、定期报告生成等场景。分布式技术可以显著提高采集效率,适合需要处理大量数据的应用场景。

避坑指南

  • 线程数量不宜过多,建议控制在5-10个
  • 分布式采集更需注意请求频率控制
  • 确保每个线程使用独立的客户端实例和代理

可视化分析:让数据说话的实用方法

基础数据可视化

import matplotlib.pyplot as plt import seaborn as sns def visualize_note_stats(notes): """可视化笔记统计数据""" # 转换为DataFrame df = pd.DataFrame(notes) # 设置中文显示 plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"] # 创建画布 plt.figure(figsize=(15, 10)) # 1. 点赞数分布 plt.subplot(2, 2, 1) sns.histplot(df['like_count'], bins=30, kde=True) plt.title('笔记点赞数分布') plt.xlabel('点赞数') plt.ylabel('笔记数量') # 2. 互动量相关性 plt.subplot(2, 2, 2) sns.scatterplot(data=df, x='like_count', y='comment_count') plt.title('点赞数与评论数相关性') plt.xlabel('点赞数') plt.ylabel('评论数') # 3. 互动量对比 plt.subplot(2, 2, 3) stats_df = df[['like_count', 'collect_count', 'comment_count']] sns.boxplot(data=stats_df) plt.title('互动量对比') # 4. 热门创作者TOP10 plt.subplot(2, 2, 4) top_users = df['user_name'].value_counts().head(10) top_users.plot(kind='bar') plt.title('热门创作者TOP10') plt.xlabel('用户名') plt.ylabel('笔记数量') plt.xticks(rotation=45, ha='right') # 调整布局并显示 plt.tight_layout() plt.savefig('note_stats_visualization.png', dpi=300, bbox_inches='tight') print("可视化结果已保存至 note_stats_visualization.png")

关键词云图生成

from wordcloud import WordCloud import jieba from collections import Counter def generate_keyword_cloud(notes, max_words=100): """生成笔记标题关键词云图""" # 提取所有标题文本 titles = [note.get('title', '') for note in notes if note.get('title')] all_text = ' '.join(titles) # 使用jieba分词 words = jieba.cut(all_text) # 过滤停用词和短词 stopwords = {'的', '了', '在', '是', '我', '有', '和', '就', '不', '人', '都', '一', '一个', '上', '也', '很', '到', '说', '要', '去', '你', '会', '着', '没有', '看', '好', '自己', '这'} filtered_words = [word for word in words if len(word) > 1 and word not in stopwords] # 统计词频 word_counts = Counter(filtered_words) # 生成词云 wordcloud = WordCloud( font_path='simhei.ttf', # 指定中文字体 background_color='white', max_words=max_words, width=1200, height=800 ).generate_from_frequencies(word_counts) # 显示并保存 plt.figure(figsize=(15, 10)) plt.imshow(wordcloud, interpolation='bilinear') plt.axis('off') plt.savefig('keyword_cloud.png', dpi=300, bbox_inches='tight') print("关键词云图已保存至 keyword_cloud.png")

场景应用

适用于数据报告展示、趋势分析、成果汇报等场景。可视化分析可以将复杂数据转化为直观图表,帮助理解数据规律和趋势。

避坑指南

  • 确保安装中文字体支持,避免中文显示乱码
  • 处理数据异常值,避免可视化结果失真
  • 选择合适的图表类型展示不同类型的数据

监控告警系统:构建稳定可靠的采集服务

异常监控实现

import smtplib from email.mime.text import MIMEText from email.header import Header def setup_monitoring(log_file="xhs_scraper.log"): """设置日志监控""" import logging # 配置日志 logging.basicConfig( filename=log_file, level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S' ) return logging def send_alert_email(subject, message, to_email): """发送告警邮件""" # 邮件配置(需替换为实际SMTP服务器信息) smtp_server = "smtp.example.com" smtp_port = 587 smtp_user = "alert@example.com" smtp_password = "your_password" # 创建邮件内容 msg = MIMEText(message, 'plain', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') msg['From'] = smtp_user msg['To'] = to_email try: # 发送邮件 server = smtplib.SMTP(smtp_server, smtp_port) server.starttls() server.login(smtp_user, smtp_password) server.sendmail(smtp_user, to_email, msg.as_string()) server.quit() print("告警邮件发送成功") except Exception as e: print(f"发送邮件失败: {str(e)}") def monitor_collection(notes, expected_count, logger, alert_email=None): """监控采集结果""" actual_count = len(notes) # 记录采集结果 logger.info(f"采集完成 - 预期: {expected_count}, 实际: {actual_count}") # 判断是否需要告警 if actual_count < expected_count * 0.5: # 如果实际数量低于预期的50% subject = "小红书采集异常告警" message = f"采集数量异常: 预期至少 {expected_count} 条,实际仅 {actual_count} 条" logger.warning(message) if alert_email: send_alert_email(subject, message, alert_email)

自动恢复机制

def resilient_collect(func, max_retries=3, delay=5): """带重试机制的采集函数装饰器""" def wrapper(*args, **kwargs): retries = 0 while retries < max_retries: try: return func(*args, **kwargs) except Exception as e: retries += 1 if retries == max_retries: raise # 达到最大重试次数,抛出异常 print(f"采集失败,正在重试 ({retries}/{max_retries})...") time.sleep(delay * (2 ** retries)) # 指数退避 return wrapper # 使用示例 @resilient_collect def collect_with_retry(client, user_id): return collect_user_notes(client, user_id)

场景应用

适用于生产环境的采集系统、关键数据监控、无人值守的自动化任务等场景。监控告警系统可以提高系统可靠性,及时发现并处理问题。

避坑指南

  • 设置合理的告警阈值,避免误报
  • 日志应包含足够详细的信息以便问题排查
  • 重试机制需配合指数退避策略,避免加剧服务器负担

数据采集合规指南:合法使用数据的边界与规范

合规采集原则

  1. 遵守robots协议

    • 检查目标网站的robots.txt文件
    • 尊重网站的爬取限制和频率要求
  2. 个人信息保护

    • 避免采集用户隐私信息(如手机号、邮箱等)
    • 对采集的个人数据进行匿名化处理
    • 不将个人数据用于未经授权的商业用途
  3. 合理使用数据

    • 采集数据仅用于合法目的和研究学习
    • 不将采集数据用于竞争或损害平台利益的行为
    • 尊重内容创作者的知识产权

合规代码实现

def is_compliant_note(note): """检查笔记是否符合合规采集要求""" # 检查是否为公开可见内容 if not note.get('public', True): return False # 检查是否包含敏感信息 sensitive_fields = ['phone', 'email', 'wechat', 'qq', 'address'] note_text = note.get('title', '') + ' ' + note.get('content', '') for field in sensitive_fields: if field in note_text.lower(): return False return True def compliant_collection(notes): """合规处理采集的笔记数据""" compliant_notes = [] for note in notes: if is_compliant_note(note): # 匿名化处理 - 移除或替换个人信息 user_info = note.get('user', {}) if user_info: # 仅保留必要的非个人信息 note['user'] = { 'id': user_info.get('id'), # 保留用户ID用于去重,但不关联真实身份 'nickname': f"用户{hash(user_info.get('id', '')) % 10000:04d}" # 匿名化用户名 } compliant_notes.append(note) print(f"合规处理完成: {len(compliant_notes)}/{len(notes)} 条笔记符合要求") return compliant_notes

合规风险防范

  • 定期审查采集策略,确保符合最新法规要求
  • 建立数据使用记录,保留合规证据
  • 对敏感数据采取加密存储措施
  • 明确数据保留期限,及时清理不再需要的数据

场景应用

适用于所有数据采集项目,特别是商业用途的数据分析。合规是长期稳定使用采集技术的前提,也是避免法律风险的关键。

避坑指南

  • 避免采集非公开数据或需要登录才能访问的内容
  • 不将采集数据分享给第三方或用于未授权用途
  • 注意不同国家和地区的数据保护法规差异

通过本文介绍的9个实用技巧,你已经掌握了小红书数据采集的完整技术体系。从基础环境搭建到高级分布式采集,从数据存储管理到合规风险防范,这些知识将帮助你构建高效、稳定、合法的数据采集系统。记住,技术本身是中性的,关键在于如何负责任地使用它。始终遵守法律法规和平台规则,让数据采集成为支持决策和创造价值的有力工具。

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

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

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

为什么推荐VibeVoice-TTS?因为它真的能‘理解’对话

为什么推荐VibeVoice-TTS&#xff1f;因为它真的能‘理解’对话 你有没有试过让AI读一段三人辩论的脚本&#xff1f;输入文字&#xff0c;点击生成&#xff0c;结果却听到三个声音用完全相同的语调、停顿和情绪在说话——像一个人分饰三角&#xff0c;还忘了换口气。这不是你的…

作者头像 李华
网站建设 2026/3/30 22:30:49

FSMN-VAD详细使用报告,优缺点全告诉你

FSMN-VAD详细使用报告&#xff0c;优缺点全告诉你 语音端点检测&#xff08;VAD&#xff09;看似是个小功能&#xff0c;但它是语音识别、实时会议转录、智能客服、长音频自动切分等场景的“第一道关卡”。检测不准&#xff0c;后面全白搭——要么切掉有效语音&#xff0c;要么…

作者头像 李华
网站建设 2026/3/13 21:55:33

哈希Hash

哈希表的实现&#xff1a;哈希概念&#xff1a;哈希(hash)⼜称散列&#xff0c;是⼀种组织数据的⽅式。从译名来看&#xff0c;有散乱排列的意思。本质就是通过哈希函数把关键字Key跟存储位置建⽴⼀个映射关系&#xff0c;查找时通过这个哈希函数计算出Key存储的位置&#xff0…

作者头像 李华
网站建设 2026/3/15 4:23:32

C++11(1)

列表初始化&#xff1a;C98传统的{} C98中⼀般数组和结构体可以⽤{}进⾏初始化。 struct Point { int _x; int _y; }; int main() { int array1[] { 1, 2, 3, 4, 5 }; int array2[5] { 0 }; Point p { 1, 2 }; return 0; }C11中的{}• C11以后想统⼀初始化⽅式&#xff0c;试…

作者头像 李华
网站建设 2026/3/29 16:40:01

5分钟部署gpt-oss-20b-WEBUI,本地大模型一键启动

5分钟部署gpt-oss-20b-WEBUI&#xff0c;本地大模型一键启动 你不需要配置CUDA、不用编译源码、不必折腾Python环境——只要点几下&#xff0c;就能在本地跑起一个接近GPT-4能力的开源大模型。这不是演示视频里的特效&#xff0c;而是今天就能实现的真实体验。 gpt-oss-20b-W…

作者头像 李华