一个基于 Playwright + FastAPI 的闲鱼商品智能监控与采集系统,支持多任务调度、Web 管理界面、结果存储与查询,适合批量监控目标商品并进行后续数据分析。
.
├── src/
│ ├── config.py # 全局配置(登录状态文件路径、运行模式等)
│ ├── spider/ # 页面解析逻辑
│ │ ├── parsers.py # 商品与卖家数据解析
│ │ ├── spider.py # 核心爬虫脚本,负责商品采集
│ ├── task/
│ │ ├── task.py # 任务数据结构与管理
│ │ ├── result.py # 爬取结果存储与查询
│ ├── server/
│ │ ├── scheduler.py # 任务调度与运行管理
│ │ ├── server.py # Web 服务入口,提供任务管理与结果接口
│ ├── utils/
│ │ ├── utils.py # 工具函数
├── resources/
│ └── static/ # 前端静态资源 (Web 管理界面)
- 多任务并行监控
- 支持关键词、价格区间、个人闲置等筛选条件
- 采集商品信息与卖家完整资料
- 爬虫过程自动防反爬处理与休眠机制
- FastAPI 提供任务与结果管理接口
- Web 管理界面支持任务管理与结果查看
- 提供 Docker 镜像,一键部署
- 接入简单的 AI 商品分析模块
- 支持ntfy、geotify通知服务
- 增加 通知功能(邮件/钉钉/微信推送)
- 支持 结果导出为 CSV/Excel
git clone https://github.com/just-ads/ai-goofish.gitcd ai-goofish
# 创建.env
cp .env.example .env
# 构建并运行
docker compose up --build -d安装依赖:
pip install -r requirements.txt
playwright installcd webui
npm run buildpython start.py启动后访问(默认用户名admin,密码admin):
http://127.0.0.1:8000
登录后可在 Web 界面管理任务、启动/停止采集、查看数据。
| 变量名 | 默认值 / 示例 | 说明 |
|---|---|---|
| RUN_HEADLESS | true |
爬虫是否以无头模式运行 (true/false),本地调试可设为 false |
| SERVER_PORT | 8000 |
服务运行端口,默认 8000 |
| WEB_USERNAME | admin |
Web 服务登录用户名 |
| WEB_PASSWORD | admin |
Web 服务登录密码 |
| NTFY_TOPIC_URL | `` | ntfy 通知服务地址 |
| GOTIFY_URL | `` | Gotify 通知服务地址 |
| GOTIFY_TOKEN | `` | Gotify 通知服务地址 Token |
- 任务配置加载
- 从
tasks.json读取启用的任务(或根据传参执行单任务)。 - 每个任务包含关键词、页数、价格区间等筛选条件。
- 从
- 爬虫执行
- 使用 Playwright 打开搜索页,模拟用户筛选条件(最新、个人闲置、价格区间)。
- 解析搜索结果,获取商品 ID 与链接。
- 请求详情页,采集商品信息与卖家信息。
- 自动检测反爬虫机制,如遇拦截会进入长时间休眠并退出。
- 结果存储
- 每个任务的结果以
jsonl格式保存,避免重复写入。 - 提供基于关键词的结果查询与删除接口。
- 每个任务的结果以
- Web 管理界面
- 登录认证基于 JWT。
- 提供任务的增删改查、手动启动/停止、查看执行状态。
- 结果支持分页查询与筛选。
对商品进行分步骤评估,减少大量token消耗。
完整流程由以下三大步骤组成:
-
标题筛选
检查商品标题是否符合目标商品描述,确保分析范围正确。- 输入:目标商品描述 + 当前商品标题
- 输出字段:
analysis: 标题匹配分析说明suggestion: 建议度分数 (0–100)reason: 简短中文理由
-
卖家信息评估
基于卖家信息(如信誉、销量、回复率等)计算卖家可信度。- 输入:卖家信息(除去卖家ID)
- 输出字段:
analysis: 卖家信誉分析suggestion: 卖家建议度分数reason: 简短中文理由
-
商品信息评估
综合卖家可信度、目标商品描述与商品详情,对商品整体质量与匹配度进行分析。- 输入:目标商品描述 + 商品详情 + 上一步卖家分析结果
- 输出字段:
analysis: 商品符合度分析suggestion: 商品建议度分数reason: 简短中文理由
根据最后得分计算推荐结论:
| 建议度分数区间 | 结论文本 |
|---|---|
| 80–100 | 非常建议购买 |
| 60–79 | 建议购买 |
| 30–59 | 谨慎购买 |
| 0–29 | 不建议购买 |
最终输出示例:
{
"推荐度": 75,
"建议": "建议购买",
"原因": "商家信誉较好,商品描述基本符合目标商品。"
}本项目在开发过程中参考了以下项目:
本系统/平台/软件(以下简称“本服务”)所提供的内容、资料及相关信息,仅供参考与学习使用。使用者在使用本服务时,应自行判断其适用性与风险。
本服务尽力确保所提供的信息完整、准确,但不对其及时性、可靠性或适用性作出任何保证。使用者应在依赖前进行独立验证。
因使用或无法使用本服务所导致的任何直接或间接损失、数据丢失、系统故障或其他后果,本服务提供方均不承担任何责任。
本服务可能包含第三方提供的链接、接口或资源,本服务对其内容或使用结果不作任何保证或承诺。
使用者在使用本服务时,应遵守所在地相关法律法规,若因使用不当而违反法律规定,责任由使用者自行承担。
本服务有权随时修改或更新本免责声明,修改后的内容一经公布即刻生效。