基于 FastAPI 的闲鱼(Goofish)商品搜索接口。异步并发爬取、扫码/扫脸/Cookie 登录、私信收发、数据去重与持久化存储,一套命令即可部署的自托管二手交易数据工具。
一个把闲鱼搜索能力封装成 HTTP API 的轻量服务,适合二手交易数据采集与私信自动化。
FastAPI · httpx · Playwright · Tortoise ORM · Uvicorn
异步搜索 · 扫码/扫脸登录 · IM 私信 · 数据去重存储
xianyu/mtop.py — 闲鱼 mtop 协议客户端(45KB)
MIT · 仅供学习研究
安装依赖后,一行命令即可启动服务。
# 安装依赖 + 扫脸认证所需的浏览器内核(一次即可)
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
三大核心模块,覆盖搜索、登录与私信。
支持分页、排序、价格、地区筛选,默认按最新发布排序。自动对已抓取的商品做链接特征哈希去重,返回「新增记录」统计。
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
扫码确认后如需扫脸会自动打开浏览器完成。登录态保存在 data/session.json,GET /auth/status 校验有效性。Cookie 失效时搜索自动降级为未登录模式(返回 logged_in: false + login_expired)。
支持收发文本、查看本地会话历史,并提供 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
核心 REST 端点。
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /search/ | 关键词商品搜索(分页/排序/价格/地区) |
| GET | /auth/status | 校验登录状态 / Cookie 有效性 |
| POST | /im/start | 打开 IM 长连接 |
| GET | /im/status | IM 连接状态 |
| GET | /im/conversations | 会话列表 |
| GET | /im/messages | 某会话消息历史(本地库) |
| POST | /im/send | 发送私信 |
| GET | /im/events | SSE 实时事件流 |
| 命令 | 说明 |
|---|---|
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 |
| 模块 | 职责 |
|---|---|
xianyu/mtop.py | 核心:闲鱼 mtop 协议客户端(搜索/登录/签名) |
xianyu/im_client.py | IM 客户端,WebSocket 长连接 |
xianyu/im_protocol.py | IM 协议编解码 |
xianyu/cli.py | 命令行入口(serve / login / search) |
xianyu/routers/ | FastAPI 路由(auth / im / search) |
xianyu/models.py | Tortoise ORM 数据模型 |
spider.py | 启动入口 |
api.py | FastAPI 应用装配 |
.env 可选(默认使用本地 data/xianyu.sqlite3):
DATABASE_URL=mysql://user:password@localhost/xianyu
反爬建议配置代理 IP 池与随机请求间隔,默认可能触发平台反爬策略
性能可调整数据库连接池;生产环境建议增加 Redis 缓存
数据抓取结果不得用于商业用途(遵循项目 MIT 许可声明)
安全涉及用户 Cookie / 会话信息,请妥善保管,切勿泄露