跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonWeChatAI算法

AI-Goofish-Monitor 闲鱼商品智能监控工具详解

AI-Goofish-Monitor 是基于 Playwright 和 AI 技术的闲鱼多任务实时监控工具。它集成多模态大语言模型分析商品信息,支持 Web 管理界面、自然语言创建任务及多平台通知(如企业微信、Bark)。提供 Docker 容器化部署方案,具备反爬虫优化能力。适用于二手相机、限量版球鞋及电子产品降价监控等场景,帮助用户自动化筛选目标商品并降低采购成本。

莫名其妙发布于 2026/4/5更新于 2026/5/2333 浏览

简介

AI-Goofish-Monitor 是一个基于 Playwright 和 AI 技术的闲鱼多任务实时监控与智能分析工具。通过先进的浏览器自动化技术和多模态大语言模型,为用户提供智能化的闲鱼商品监控解决方案。该工具具备强大的数据采集能力,并配备了功能完善的 Web 管理界面,让用户能够轻松管理和配置监控任务。

技术特色:

  • AI 驱动:集成多模态大语言模型(GPT-4o、Gemini 等),深度分析商品信息
  • Web 管理:完整的可视化界面,无需命令行操作
  • 多平台通知:支持 ntfy.sh、企业微信、Bark 等多种通知方式
  • 智能过滤:基于自然语言的任务创建和 AI 分析标准生成
  • 云原生支持:提供 Docker 容器化部署方案
  • 反爬虫优化:模拟真人操作,提高稳定性和成功率

主要功能

核心架构

项目采用模块化设计,包含数据采集、AI 分析、任务管理、消息通知等模块。

功能矩阵
功能类别核心能力技术实现
数据采集闲鱼商品实时监控,多关键词同时采集Playwright, 浏览器自动化
AI 分析多模态商品分析,智能推荐过滤GPT-4o, Gemini, 多模态模型
任务管理Web 界面管理,自然语言创建任务Flask, Vue.js, 可视化界面
消息通知多平台即时通知,自定义通知规则ntfy, 企业微信,Bark, Webhook
用户认证Basic 认证保护,安全访问管理界面Basic Auth, 环境变量配置
部署支持Docker 容器化,一键部署运行Docker, docker-compose
技术特性
  • 自然语言交互:用简单描述创建复杂监控任务
  • 多模态分析:同时处理文本和图像信息
  • 实时处理:发现新商品立即进入分析流程
  • 高度可定制:每个任务独立配置 AI 分析指令
  • 健壮稳定:模拟真人操作,多种反爬策略
  • 易于扩展:模块化设计,支持自定义功能扩展

安装与配置

环境要求
# 基础要求
操作系统:Windows/Linux/macOS
Python: 3.10+ (推荐 3.10 或更高版本)
内存:4GB+ RAM
存储:1GB+ 可用空间
网络:稳定互联网连接

# 浏览器要求
Chrome/Chromium: 最新版本
Playwright: 自动管理浏览器

# 生产环境推荐
CPU: 4 核+
内存:8GB+
存储:SSD, 10GB+ 可用空间
网络:100Mbps+ 带宽
安装方式

源码安装:

# 克隆仓库
git clone https://github.com/dingyufei615/ai-goofish-monitor.git
cd ai-goofish-monitor
# 安装依赖
pip install -r requirements.txt
# 安装 Playwright 浏览器
playwright install chromium

Docker 安装:

# 使用 docker-compose(推荐)
docker-compose up --build -d
# 或者直接使用 Docker
docker build -t ai-goofish-monitor .
docker run -d -p 8000:8000 --name monitor ai-goofish-monitor
环境配置

创建环境变量文件 (.env):

# AI 服务配置
OPENAI_API_KEY=your_api_key_here
OPENAI_BASE_URL=https://api.example.com/v1
OPENAI_MODEL_NAME=gemini-2.5-pro

# 代理配置(可选)
PROXY_URL=http://127.0.0.1:7890

# 通知配置
NTFY_TOPIC_URL=https://ntfy.sh/your_topic
BARK_URL=https://api.day.app/your_key
WX_BOT_URL="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=your_key"

# Web 界面认证
WEB_USERNAME=admin
WEB_PASSWORD=your_strong_password_here

# 运行配置
RUN_HEADLESS=true
AI_DEBUG_MODE=false
SERVER_PORT=8000

配置文件 (config.json):

{
  "tasks": [
    {
      "name": "索尼相机监控",
      "keywords": ["索尼 A7M4", "Sony 相机"],
      "price_range": [5000, 13000],
      "cron_expression": "0 */2 * * *",
      "ai_prompt": "寻找 95 新以上,快门数低于 5000 的索尼相机"
    }
  ],
  "notification": {
    "enabled": true,
    "services": ["ntfy", "wechat"],
    "min_confidence": 0.8
  }
}
登录配置

获取闲鱼登录状态:

  1. 启动服务后访问 http://localhost:8000
  2. 在系统设置中手动更新登录状态

使用指南

启动服务
# 启动 Web 服务
python web_server.py
# 或者使用 gunicorn(生产环境)
gunicorn -w 4 -b 0.0.0.0:8000 web_server:app
# 访问管理界面
# 打开浏览器访问 http://localhost:8000
# 用户名:admin
# 密码:配置的 WEB_PASSWORD
任务管理

创建监控任务:

  1. 进入'任务管理'页面
  2. 点击'创建新任务'
  3. 系统自动生成监控参数和 AI 分析标准
  4. 设置定时执行计划(Cron 表达式)

用自然语言描述需求:

我想买一台 95 新以上的索尼 A7M4 相机,预算 1 万 3 以内,快门数低于 5000

任务配置选项:

{
  "name": "任务名称",
  "keywords": ["关键词 1", "关键词 2"],
  "price_range": [1000, 5000],
  "location": "上海",
  "cron_expression": "0 */1 * * *",
  "ai_prompt": "自定义 AI 分析指令",
  "enabled": true
}
AI 分析配置

自定义 Prompt 模板:

# prompts/analysis_template.txt
你是一个专业的二手商品评估专家。请分析以下闲鱼商品信息:
商品标题:{{title}}
商品价格:{{price}}元
商品描述:{{description}}
卖家信息:{{seller_info}}
图片信息:{{image_descriptions}}

请根据以下标准进行评估:
1. 商品成色是否达到 95 新以上
2. 价格是否在合理范围内
3. 卖家信用是否良好
4. 是否存在潜在风险

请输出 JSON 格式的分析结果:
{
  "recommendation": "推荐/不推荐",
  "confidence": 0.95,
  "reasons": ["原因 1", "原因 2"],
  "risk_factors": ["风险因素 1", "风险因素 2"]
}
通知配置

多平台通知设置:

# 配置示例
notification_config = {
    "ntfy": {
        "enabled": True,
        "topic": "your_ntfy_topic",
        "priority": "high"
    },
    "wechat": {
        "enabled": True,
        "webhook": "企业微信群机器人 Webhook",
        "mention_users": ["@all"]
    },
    "bark": {
        "enabled": True,
        "device_key": "your_bark_key",
        "sound": "alarm"
    },
    "webhook": {
        "enabled": False,
        "url": "https://example.com/webhook",
        "method": "POST",
        "headers": {"Authorization": "Bearer token"}
    }
}

应用场景实例

案例 1:二手相机监控

场景:摄影爱好者寻找特定型号的二手相机

解决方案:

class CameraMonitor:
    def __init__(self):
        self.config = {
            "name": "索尼相机专业监控",
            "keywords": ["索尼 A7M4", "Sony A7M4", "A7M4"],
            "price_range": [8000, 13000],
            "conditions": {
                "min_condition": "95 新",
                "max_shutter_count": 5000,
                "require_original_box": True,
                "exclude_professional_sellers": True
            },
            "schedule": "0 */3 * * *",
            "notification_channels": ["wechat", "ntfy"]
        }

    def create_monitor_task(self):
        # 通过 Web API 创建任务
        response = requests.post(
            "http://localhost:8000/api/tasks/create",
            json={
                "description": natural_language,
                "config": self.config
            },
            auth=("admin", "password123")
        )
        return response.json()

    def handle_notification(self, item):
        message = f"""
📸 发现符合条件的相机!
型号:{item['title']}
价格:{item['price']}元
成色:{item['condition']}
快门数:{item['shutter_count']}
卖家:{item['seller']}
链接:{item['url']}
AI 推荐度:{item['confidence']}%
"""
        self.send_notification(message)

# 使用示例
monitor = CameraMonitor()
task_id = monitor.create_monitor_task()
print(f"监控任务已创建:{task_id}")

实施效果:

  • 监控精度达到 90%
  • 响应时间 <5 分钟
  • 漏报率 <2%
案例 2:限量版球鞋监控

场景:球鞋收藏家寻找限量版球鞋

解决方案:

class SneakerMonitor:
    def __init__(self):
        self.sneaker_models = [
            "Nike Dunk SB", "Air Jordan 1", "Yeezy 350",
            "限量版球鞋", "联名款球鞋"
        ]

    def setup_monitoring(self):
        tasks = []
        for model in self.sneaker_models:
            task_config = {
                "name": f"{model}监控",
                "keywords": [model, "限量", "联名"],
                "price_range": [500, 3000],
                "filters": {
                    "exclude_fake": True,
                    "min_authenticity_score": 0.9,
                    "require_real_images": True
                },
                "ai_prompt": """
分析球鞋真伪和收藏价值:
1. 检查图片是否实拍图
2. 评估价格是否合理
3. 判断卖家信用
4. 识别假货特征
""",
                "schedule": "*/30 * * * *"
            }
            tasks.append(task_config)
        return tasks

    def process_sneaker_alerts(self, items):
        for item in items:
            if self.is_worth_buying(item):
                self.send_urgency_notification(item)

    def is_worth_buying(self, item):
        criteria = [
            item['authenticity_score'] > 0.95,
            item['price'] <= item['market_value'] * 0.8,
            item['seller_rating'] >= 4.8,
            item['condition'] in ['全新', '99 新']
        ]
        return all(criteria)

# 使用示例
sneaker_bot = SneakerMonitor()
tasks = sneaker_bot.setup_monitoring()
print(f"创建了 {len(tasks)} 个球鞋监控任务")

实施效果:

  • 假货识别准确率 98%
  • 价格合理性评估 准确率 92%
案例 3:电子产品降价监控

场景:等待特定电子产品降价时购买

解决方案:

class PriceDropMonitor:
    def __init__(self, target_product, target_price):
        self.target_product = target_product
        self.target_price = target_price
        self.price_history = {}

    def monitor_price_changes(self):
        config = {
            "name": f"{self.target_product}降价监控",
            "keywords": [self.target_product],
            "price_range": [0, self.target_price * 1.2],
            "ai_prompt": """
重点关注价格变化趋势和降价时机:
1. 记录历史价格
2. 识别真实降价(非虚假促销)
3. 评估降价幅度
4. 判断是否达到目标价位
""",
            "schedule": "0 */1 * * *"
        }
        return config

    def analyze_price_trend(self, items):
        for item in items:
            product_id = item['id']
            current_price = item['price']
            if product_id not in self.price_history:
                self.price_history[product_id] = []
            self.price_history[product_id].append({
                'price': current_price,
                'timestamp': datetime.now(),
                'item': item
            })
            if current_price <= self.target_price:
                self.send_price_alert(item)

    def send_price_alert(self, item):
        message = f"""
🎉 价格达标提醒!
商品:{item['title']}
当前价格:{item['price']}元
目标价格:{self.target_price}元
降价幅度:{self.calculate_discount(item)}%
链接:{item['url']}
⏰ 尽快购买,可能很快售罄!
"""
        self.send_notification(message)

# 使用示例
monitor = PriceDropMonitor("iPad Pro 2022", 4000)
config = monitor.monitor_price_changes()
print("降价监控已设置")

实施效果:

  • 价格监控精度 100%
  • 降价识别准确率 95%

高级功能与定制

1. 自定义 AI 分析
# 自定义分析模板
你是一个专业的{{item_category}}评估专家。请分析以下闲鱼商品:
商品信息:
- 标题:{{title}}
- 价格:{{price}}元
- 描述:{{description}}
- 卖家:{{seller_name}} (信用:{{seller_rating}})
- 图片:{{image_count}}张

评估要求:{{specific_requirements}}

请输出 JSON 格式的分析结果:
{
  "assessment": {
    "quality_rating": 0.95,
    "price_score": 0.88,
    "seller_trustworthiness": 0.92,
    "overall_recommendation": "推荐"
  },
  "details": {
    "strengths": ["优点 1", "优点 2"],
    "concerns": ["需要注意的点"],
    "verification_items": ["需要验证的事项"]
  },
  "pricing_advice": {
    "fair_price_range": [1000, 1200],
    "bargaining_strategy": "还价建议"
  }
}
2. 高级通知策略
# 智能通知路由
class SmartNotifier:
    def __init__(self):
        self.notification_rules = {
            "urgent": {
                "channels": ["wechat", "bark", "sms"],
                "priority": "high",
                "retry_times": 3
            },
            "normal": {
                "channels": ["ntfy", "wechat"],
                "priority": "normal",
                "retry_times": 1
            },
            "low_priority": {
                "channels": ["ntfy"],
                "priority": "low",
                "retry_times": 0
            }
        }

    def route_notification(self, item, confidence):
        if confidence > 0.95:
            return self.notification_rules["urgent"]
        elif confidence > 0.8:
            return self.notification_rules["normal"]
        else:
            return self.notification_rules["low_priority"]

    def send_smart_notification(self, item, analysis_result):
        confidence = analysis_result['confidence']
        rules = self.route_notification(item, confidence)
        message = self.format_message(item, analysis_result, rules['priority'])
        for channel in rules['channels']:
            success = self.send_to_channel(channel, message, rules)
            if not success and rules['retry_times'] > 0:
                self.retry_send(channel, message, rules)
3. 数据导出与分析
# 数据导出功能
class DataExporter:
    def __init__(self, db_path="monitoring_data.db"):
        self.conn = sqlite3.connect(db_path)
        self.setup_database()

    def setup_database(self):
        self.conn.execute("""
            CREATE TABLE IF NOT EXISTS items (
                id TEXT PRIMARY KEY,
                title TEXT,
                price REAL,
                description TEXT,
                seller_info TEXT,
                analysis_result JSON,
                created_at DATETIME,
                updated_at DATETIME
            )
        """)
        self.conn.execute("""
            CREATE TABLE IF NOT EXISTS price_history (
                item_id TEXT,
                price REAL,
                recorded_at DATETIME,
                FOREIGN KEY (item_id) REFERENCES items(id)
            )
        """)

    def export_to_csv(self, output_file="monitoring_report.csv"):
        query = """
            SELECT i.title, i.price, i.seller_info,
                   json_extract(i.analysis_result, '$.confidence') as confidence,
                   COUNT(ph.item_id) as price_changes
            FROM items i
            LEFT JOIN price_history ph ON i.id = ph.item_id
            GROUP BY i.id
        """
        df = pd.read_sql_query(query, self.conn)
        df.to_csv(output_file, index=False, encoding='utf-8-sig')
        return output_file

    def generate_report(self):
        report = {
            "summary": {
                "total_items": self.get_total_items(),
                "avg_price": self.get_average_price(),
                "recommendation_rate": self.get_recommendation_rate(),
                "price_trend": self.get_price_trend()
            },
            "top_findings": self.get_top_findings(10),
            "seller_analysis": self.analyze_sellers(),
            "category_breakdown": self.get_category_breakdown()
        }
        return report

故障排除与优化

1. 常见问题解决

登录问题:

# 检查登录状态
curl -X GET http://localhost:8000/api/system/status
# 重新登录
python login.py --force
# 或者通过 Web 界面更新登录状态

AI 分析失败:

# 检查 AI 服务配置
def check_ai_service():
    import requests
    test_payload = {
        "model": os.getenv('OPENAI_MODEL_NAME'),
        "messages": [{"role": "user", "content": "test"}]
    }
    try:
        response = requests.post(
            f"{os.getenv('OPENAI_BASE_URL')}/chat/completions",
            headers={"Authorization": f"Bearer {os.getenv('OPENAI_API_KEY')}"},
            json=test_payload,
            timeout=10
        )
        return response.status_code == 200
    except Exception as e:
        print(f"AI 服务检查失败:{e}")
        return False

性能优化:

# 优化配置
PERFORMANCE_OPTIMIZATION = {
    "browser": {
        "headless": True,
        "timeout": 30000,
        "concurrent_tabs": 3,
        "retry_attempts": 2
    },
    "ai": {
        "batch_size": 5,
        "timeout": 30000,
        "max_retries": 2
    },
    "network": {
        "proxy_rotation": True,
        "request_delay": [1000, 3000],
        "timeout": 30000
    }
}
2. 监控与日志

日志配置:

import logging
from logging.handlers import RotatingFileHandler

def setup_logging():
    logger = logging.getLogger("goofish_monitor")
    logger.setLevel(logging.INFO)
    file_handler = RotatingFileHandler(
        "monitor.log", maxBytes=10 * 1024 * 1024, backupCount=5
    )
    file_handler.setFormatter(logging.Formatter(
        '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
    ))
    console_handler = logging.StreamHandler()
    console_handler.setFormatter(logging.Formatter('%(levelname)s - %(message)s'))
    logger.addHandler(file_handler)
    logger.addHandler(console_handler)
    return logger

logger = setup_logging()
logger.info("监控服务启动成功")

性能监控:

class PerformanceMonitor:
    def __init__(self):
        self.metrics = {
            "requests": 0,
            "successful": 0,
            "failed": 0,
            "avg_response_time": 0,
            "last_alert": None
        }

    def track_request(self, success, response_time):
        self.metrics["requests"] += 1
        if success:
            self.metrics["successful"] += 1
        else:
            self.metrics["failed"] += 1
        old_avg = self.metrics["avg_response_time"]
        n = self.metrics["successful"] + self.metrics["failed"]
        self.metrics["avg_response_time"] = ((old_avg * (n - 1) + response_time) / n)

    def get_success_rate(self):
        if self.metrics["requests"] == 0:
            return 0
        return self.metrics["successful"] / self.metrics["requests"] * 100

    def check_health(self):
        success_rate = self.get_success_rate()
        if success_rate < 80:
            return "critical"
        elif success_rate < 90:
            return "warning"
        else:
            return "healthy"

    def generate_report(self):
        return {
            "total_requests": self.metrics["requests"],
            "success_rate": f"{self.get_success_rate():.1f}%",
            "avg_response_time": f"{self.metrics['avg_response_time']:.2f}ms",
            "health_status": self.check_health(),
            "timestamp": datetime.now().isoformat()
        }

monitor = PerformanceMonitor()
monitor.track_request(True, 1500)
print(monitor.generate_report())

免责声明

⚠️ 重要提示:

  • 请遵守闲鱼用户协议和 robots.txt 规则
  • 不要进行过于频繁的请求,避免对服务器造成负担
  • 本项目仅供学习和技术研究使用
  • 请勿用于非法用途或商业滥用

许可证:

本项目采用 MIT 许可证发布,按'现状'提供,不提供任何形式的担保。

目录

  1. 简介
  2. 主要功能
  3. 核心架构
  4. 功能矩阵
  5. 技术特性
  6. 安装与配置
  7. 环境要求
  8. 基础要求
  9. 浏览器要求
  10. 生产环境推荐
  11. 安装方式
  12. 克隆仓库
  13. 安装依赖
  14. 安装 Playwright 浏览器
  15. 使用 docker-compose(推荐)
  16. 或者直接使用 Docker
  17. 环境配置
  18. AI 服务配置
  19. 代理配置(可选)
  20. 通知配置
  21. Web 界面认证
  22. 运行配置
  23. 登录配置
  24. 使用指南
  25. 启动服务
  26. 启动 Web 服务
  27. 或者使用 gunicorn(生产环境)
  28. 访问管理界面
  29. 打开浏览器访问 http://localhost:8000
  30. 用户名:admin
  31. 密码:配置的 WEB_PASSWORD
  32. 任务管理
  33. AI 分析配置
  34. prompts/analysis_template.txt
  35. 通知配置
  36. 配置示例
  37. 应用场景实例
  38. 案例 1:二手相机监控
  39. 使用示例
  40. 案例 2:限量版球鞋监控
  41. 使用示例
  42. 案例 3:电子产品降价监控
  43. 使用示例
  44. 高级功能与定制
  45. 1. 自定义 AI 分析
  46. 自定义分析模板
  47. 2. 高级通知策略
  48. 智能通知路由
  49. 3. 数据导出与分析
  50. 数据导出功能
  51. 故障排除与优化
  52. 1. 常见问题解决
  53. 检查登录状态
  54. 重新登录
  55. 或者通过 Web 界面更新登录状态
  56. 检查 AI 服务配置
  57. 优化配置
  58. 2. 监控与日志
  59. 免责声明
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • C 语言程序调试常用方法与技巧
  • ToDesk 顺网云海马云部署 DeepSeek 大模型对比评测
  • OpenClaw SOUL.md:用 Markdown 定义代理身份与行为边界
  • AI 驱动的智能 VR 内容生成系统构建指南
  • Emoji 表情符号编码及名称对照表
  • 递归算法详解:汉诺塔、链表操作与快速幂
  • pyproject.toml 完全指南:Python 项目配置现代化
  • 红黑树进阶:手撕 STL 源码封装 RB-tree 实现 map 和 set
  • Docker 快速部署 AstrBot+NapCat 打造 QQ 智能客服机器人
  • AI 绘画技术演进:从 DALL·E 系列到 Stable Diffusion 解析
  • CC-Switch:AI 编码助手配置管理工具
  • Qwen3-VL-WEBUI 多模态模型本地部署与实战指南
  • 开源AI语音机器人小智Xiaozhi-ESP32:低成本构建个人智能助理
  • ARC SC6N0 Thor AGX 128GB T5X 机器人开发板规格解析
  • 旋转位置编码 RoPE:从 2D 到 nD 的扩展与外推机制解析
  • Windows 系统 WSL2 Ubuntu 部署 OpenClaw
  • VSCode + GitHub Copilot AI 编程实战指南
  • GitHub 精确搜索语法指南
  • 贪心算法核心解析:原理、策略与 C++ 实战
  • Hadoop MapReduce 协同过滤推荐算法实战

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online