d27e1236240788056c62245dbb4c81f93753d254
Surugaya Scraper Service
一个用于执行骏河屋(suruga-ya.jp)抓取任务的 HTTP API 服务。首版目标是技术验证:在 Cloudflare 保护场景下,稳定抓取搜索列表与商品详情,并支持 API 被并发调用。
功能概览
- FastAPI 提供 HTTP API
- Bearer Token 接口鉴权(通过
Authorization: Bearer <token>请求头校验) - Playwright 驱动浏览器访问目标站点
- Cloudflare 会话复用:自动获取并复用通过验证后的 Cookie(含
cf_clearance) - 会话存储:优先 Redis(可选),未配置时自动退回进程内存
接口
GET /healthPOST /api/searchPOST /api/item_detail
安装
python -m pip install -e ".[dev]"
python -m playwright install chromium
启动
默认监听 0.0.0.0:31106。
启动前建议先配置 .env(项目使用 pydantic-settings 自动读取同目录下的 .env)。
方式 1:直接运行入口(推荐)
python -m app.main
方式 2:使用 uvicorn
uvicorn app.main:app --host 0.0.0.0 --port 31106
方式 3:使用启动脚本(自动处理端口占用,推荐 Windows 本地开发)
.\start-server.ps1
可选参数:
-Port 31106:指定端口-HostName 0.0.0.0:指定监听地址-NoKillExisting:检测到端口占用时直接报错,不自动结束旧进程-DryRun:只做检查不实际启动
鉴权(Bearer Token)
服务端从请求头 Authorization 取值,字符串替换掉前缀 Bearer 后,与服务端配置的 token 做比较。
建议在 .env 中设置:
SURUGAYA_BEARER_TOKEN
示例(curl):
curl -H "Authorization: Bearer <token>" ^
-H "Content-Type: application/json" ^
-X POST "http://127.0.0.1:31106/api/search" ^
-d "{\"search_word\":\"cat\",\"category\":\"\",\"page\":2}"
常用环境变量
- 服务:
SURUGAYA_APP_HOST(默认0.0.0.0)SURUGAYA_APP_PORT(默认31106)
- 鉴权:
SURUGAYA_BEARER_TOKEN
- 浏览器回收(防止 Chromium 长时间运行内存累积导致 driver 掉线):
SURUGAYA_BROWSER_RECYCLE_AFTER_CONTEXTS(默认200,累计创建上下文达到该值后在空闲时主动重建浏览器,0关闭)SURUGAYA_BROWSER_RECYCLE_AFTER_SECONDS(默认3600,浏览器运行超过该秒数后在空闲时主动重建,0关闭)
- 代理(日本 IP):
SURUGAYA_PROXY_SERVER(例:http://127.0.0.1:7890)SURUGAYA_PROXY_USERNAMESURUGAYA_PROXY_PASSWORD
- Redis(可选):
SURUGAYA_REDIS_HOST(例:127.0.0.1,留空表示不使用 Redis)SURUGAYA_REDIS_PORT(默认6379)SURUGAYA_REDIS_PASSWORDSURUGAYA_REDIS_DB(默认0)
请求示例
搜索
POST /api/search
{
"search_word": "cat",
"category": "",
"page": 2
}
详情
POST /api/item_detail
{
"product_id": "985029623"
}
Description
Languages
Python
98.4%
PowerShell
1%
Dockerfile
0.6%