xianyu-spider 闲鱼商品搜索

基于 FastAPI 的闲鱼(Goofish)商品搜索接口。异步并发爬取、扫码/扫脸/Cookie 登录、私信收发、数据去重与持久化存储,一套命令即可部署的自托管二手交易数据工具。

★ 914 Stars Python MIT License FastAPI TeleAgent Skill

1项目概览

一个把闲鱼搜索能力封装成 HTTP API 的轻量服务,适合二手交易数据采集与私信自动化。

技术栈

FastAPI · httpx · Playwright · Tortoise ORM · Uvicorn

核心能力

异步搜索 · 扫码/扫脸登录 · IM 私信 · 数据去重存储

协议核心

xianyu/mtop.py — 闲鱼 mtop 协议客户端(45KB)

许可证

MIT · 仅供学习研究

2快速开始

安装依赖后,一行命令即可启动服务。

# 安装依赖 + 扫脸认证所需的浏览器内核(一次即可)
pip install -r requirements.txt
playwright install chromium

# 启动服务(默认 8000 端口)
python spider.py

# 登录(终端二维码)
python spider.py login
python spider.py login --cookie     # 粘贴网页 Cookie
python spider.py login --browser    # 打开官方登录页

# 命令行搜索
python spider.py search 手机 --pages 3
python spider.py search 相机 --sort price_asc --min-price 100 --max-price 800 --city 深圳
python spider.py search 自行车 --no-save

3功能特性

三大核心模块,覆盖搜索、登录与私信。

3.1 关键词商品搜索(异步并发)

支持分页、排序、价格、地区筛选,默认按最新发布排序。自动对已抓取的商品做链接特征哈希去重,返回「新增记录」统计。

POST /search/
{
  "keyword": "手机",
  "max_pages": 1,
  "sort": "newest",
  "min_price": 100,
  "max_price": 2000,
  "city": "深圳"
}
# → { "status":"success", "total_results":30, "new_records":5 }

sortnewest(默认)· price_asc · price_desc · default

3.2 登录(扫码 / 扫脸 / Cookie)

扫码确认后如需扫脸会自动打开浏览器完成。登录态保存在 data/session.json,GET /auth/status 校验有效性。Cookie 失效时搜索自动降级为未登录模式(返回 logged_in: false + login_expired)。

3.3 IM 私信(登录后)

支持收发文本、查看本地会话历史,并提供 SSE 实时事件流。未登录返回 401;未 start 即发送返回 409。

curl -X POST http://127.0.0.1:8000/im/start          # 打开 IM 长连接
curl http://127.0.0.1:8000/im/status
curl http://127.0.0.1:8000/im/conversations
curl 'http://127.0.0.1:8000/im/messages?conversation_id=对方id'
curl -X POST http://127.0.0.1:8000/im/send -H 'Content-Type: application/json' \
  -d '{"conversation_id":"对方id","to_user_id":"对方id","text":"在的"}'
curl -N http://127.0.0.1:8000/im/events               # SSE

4HTTP 接口一览

核心 REST 端点。

方法路径说明
POST/search/关键词商品搜索(分页/排序/价格/地区)
GET/auth/status校验登录状态 / Cookie 有效性
POST/im/start打开 IM 长连接
GET/im/statusIM 连接状态
GET/im/conversations会话列表
GET/im/messages某会话消息历史(本地库)
POST/im/send发送私信
GET/im/eventsSSE 实时事件流

5命令行工具

命令说明
spider.py serve启动 HTTP 服务(默认 --host 127.0.0.1 --port 8000)
spider.py login终端二维码登录;--cookie 粘贴 Cookie;--browser 打开登录页
spider.py search <kw>关键词搜索;支持 --pages --sort --min-price --max-price --province --city --days --no-save

6技术架构

模块职责
xianyu/mtop.py核心:闲鱼 mtop 协议客户端(搜索/登录/签名)
xianyu/im_client.pyIM 客户端,WebSocket 长连接
xianyu/im_protocol.pyIM 协议编解码
xianyu/cli.py命令行入口(serve / login / search)
xianyu/routers/FastAPI 路由(auth / im / search)
xianyu/models.pyTortoise ORM 数据模型
spider.py启动入口
api.pyFastAPI 应用装配

7配置

.env 可选(默认使用本地 data/xianyu.sqlite3):

DATABASE_URL=mysql://user:password@localhost/xianyu

8注意事项与合规

请务必遵守:使用前请遵守《中华人民共和国网络安全法》及闲鱼平台 Robots 协议,本项目仅供学习研究使用。

反爬建议配置代理 IP 池与随机请求间隔,默认可能触发平台反爬策略

性能可调整数据库连接池;生产环境建议增加 Redis 缓存

数据抓取结果不得用于商业用途(遵循项目 MIT 许可声明)

安全涉及用户 Cookie / 会话信息,请妥善保管,切勿泄露