基于 Node.js 和 Playwright 的智能网页内容提取服务,支持抓取网页标题和正文内容。
git clone <repository-url>
cd playwright-web-scraper
npm install
npm run install-browsers
npm run dev
# 构建镜像
./scripts/docker-build.sh prod
# 启动服务
./scripts/docker-deploy.sh start prod
# 查看状态
./scripts/docker-deploy.sh status
# 查看日志
./scripts/docker-deploy.sh logs
# 启动服务
./scripts/docker-compose-deploy.sh up
# 查看状态
./scripts/docker-compose-deploy.sh status
# 查看日志
./scripts/docker-compose-deploy.sh logs
# 停止服务
./scripts/docker-compose-deploy.sh down
# 构建镜像
npm run docker:build
# 启动服务
npm run docker:up
# 查看日志
npm run docker:logs
# 停止服务
npm run docker:down
📖 详细部署指南: 查看 DOCKER_DEPLOYMENT.md 获取完整的Docker部署文档
🔧 故障排除: 如遇到浏览器安装问题,请查看 TROUBLESHOOTING.md
接口地址: POST /api/scrape
请求头:
Content-Type: application/json
请求参数:
{
"url": "https://example.com"
}
成功响应:
{
"success": true,
"data": {
"url": "https://example.com",
"title": "页面标题",
"content": "页面正文内容...",
"contentLength": 1234,
"metadata": {
"description": "页面描述",
"keywords": "关键词1,关键词2",
"author": "作者名称",
"publishTime": "2023-12-01T12:00:00Z",
"url": "实际访问的URL"
},
"scrapeTime": "2023-12-01T12:00:00.000Z"
}
}
错误响应:
{
"success": false,
"error": "错误描述信息"
}
接口地址: GET /health
响应:
{
"status": "ok",
"message": "服务运行正常"
}
playwright-web-scraper/ ├── src/ │ ├── server.js # Express 服务器主文件 │ ├── scraper.js # 完整版抓取器 │ └── scraper-simple.js # 简化版抓取器 ├── public/ │ └── index.html # 前端测试页面 ├── scripts/ │ ├── docker-build.sh # Docker 构建脚本 │ ├── docker-deploy.sh # Docker 部署脚本 │ └── docker-compose-deploy.sh # Docker Compose 部署脚本 ├── spec/ │ └── req.md # 需求文档 ├── logs/ # 日志目录(Docker挂载) ├── package.json # 项目配置 ├── Dockerfile # 基础Docker配置 ├── Dockerfile.production # 生产环境Docker配置 ├── docker-compose.yml # Docker Compose配置 ├── .dockerignore # Docker忽略文件 ├── .env.example # 环境变量示例 ├── DOCKER_DEPLOYMENT.md # Docker部署详细指南 └── README.md # 项目说明
| 变量名 | 默认值 | 说明 |
|---|---|---|
PORT | 3000 | 服务端口 |
NODE_ENV | development | 运行环境 |
PLAYWRIGHT_BROWSERS_PATH | - | Playwright浏览器路径 |
# 克隆项目
git clone <repository-url>
cd playwright-web-scraper
# 启动服务
docker-compose up -d
# 检查状态
docker-compose ps
# 查看日志
docker-compose logs -f
# 安装依赖
npm ci --only=production
# 安装浏览器
npx playwright install --with-deps chromium
# 启动服务
NODE_ENV=production npm start
# 安装PM2
npm install -g pm2
# 启动应用
pm2 start src/server.js --name "playwright-scraper"
# 查看状态
pm2 status
# 查看日志
pm2 logs playwright-scraper
# 清理缓存重新安装
rm -rf ~/.cache/ms-playwright
npm run install-browsers
# 清理Docker缓存
docker system prune -a
# 重新构建
npm run docker:build
# 增加Docker内存限制
docker run -m 2g -p 3000:3000 playwright-scraper
# 启用详细日志
DEBUG=playwright:* npm start
# 非无头模式(本地调试)
HEADLESS=false npm start
| 网站类型 | 支持程度 | 说明 |
|---|---|---|
| 微信公众号 | ✅ 完美支持 | 专用选择器优化 |
| 知乎 | ✅ 良好支持 | 通用选择器适配 |
| 博客网站 | ✅ 良好支持 | 标准HTML结构 |
| 新闻网站 | ✅ 良好支持 | 多种选择器覆盖 |
| 政府网站 | ⚠️ 部分支持 | 可能有访问限制 |
| SPA应用 | ⚠️ 部分支持 | 需要等待JS渲染 |
在 src/scraper-simple.js 中添加:
const selectors = [
'article',
'.your-new-selector', // 添加新选择器
// ...
];
修改 src/scraper-simple.js 中的元数据提取逻辑:
const metadata = {
// 现有字段...
customField: getMeta('custom-meta-name')
};
在 src/server.js 中添加新的路由:
app.post('/api/batch-scrape', async (req, res) => {
// 批量抓取逻辑
});
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情
⭐ 如果这个项目对您有帮助,请给个 Star!