5.8 KiB
		
	
	
	
	
	
	
	
			
		
		
	
	
			5.8 KiB
		
	
	
	
	
	
	
	
代理IP抓取和验证服务
一个基于Node.js的代理IP自动抓取、验证和管理系统,提供RESTful API接口和定时任务调度。
功能特性
- 🕷️ 自动抓取: 从快代理网站抓取免费代理IP
 - ✅ 自动验证: 通过访问百度验证代理可用性
 - 🗄️ 数据存储: 使用SQLite存储代理数据
 - 🔄 定时任务: 自动抓取和验证维护代理池
 - 🚀 RESTful API: 完整的API接口服务
 - 📊 统计监控: 实时代理池状态统计
 - 🛡️ 错误处理: 完善的错误处理和重试机制
 
项目结构
dailiip/
├── src/
│   ├── database/
│   │   ├── db.js           # 数据库连接管理
│   │   └── models/
│   │       └── proxy.js    # 代理数据模型
│   ├── services/
│   │   ├── scraper.js      # 代理抓取服务
│   │   ├── validator.js    # 代理验证服务
│   │   └── scheduler.js    # 定时任务调度器
│   ├── routes/
│   │   └── proxies.js      # API路由
│   └── app.js              # 应用入口
├── config/
│   └── database.js         # 数据库配置
├── logs/                   # 日志目录
├── proxies.db             # SQLite数据库
├── package.json
└── README.md
快速开始
1. 安装依赖
npm install
2. 启动服务
npm start
服务将在 http://localhost:3000 启动
3. 验证服务
访问 http://localhost:3000/health 检查服务状态
API接口
基础信息
- 基础URL: 
http://localhost:3000 - Content-Type: 
application/json 
接口列表
1. 获取服务信息
GET /
2. 健康检查
GET /health
3. 获取代理列表
GET /api/proxies?limit=100&offset=0&sortBy=response_time&order=ASC
limit: 限制数量 (默认100)offset: 偏移量 (默认0)sortBy: 排序字段 (response_time, created_at, updated_at, ip, port)order: 排序方式 (ASC, DESC)
4. 获取随机代理
GET /api/proxies/random?count=1
count: 返回数量 (1-10)
5. 获取统计信息
GET /api/proxies/stats
6. 验证单个代理
POST /api/proxies/verify
{
  "ip": "192.168.1.1",
  "port": 8080
}
7. 批量验证代理
POST /api/proxies/verify-batch
{
  "proxies": [
    {"ip": "192.168.1.1", "port": 8080},
    {"ip": "192.168.1.2", "port": 8080}
  ]
}
8. 手动触发抓取
POST /api/proxies/scrape
{
  "pages": 5
}
9. 手动触发验证
POST /api/proxies/validate-all
{
  "limit": 50
}
10. 搜索代理
GET /api/proxies/search?ip=192.168.1.1&port=8080
11. 清理无效代理
DELETE /api/proxies/cleanup
定时任务
系统自动执行以下定时任务:
抓取任务
- 频率: 每小时整点执行
 - 功能: 抓取快代理网站前5页的代理IP
 - 网址: https://www.kuaidaili.com/free/inha/
 
验证任务
- 频率: 每10分钟执行一次
 - 功能: 验证数据库中的代理IP可用性
 - 验证方式: 通过访问 https://www.baidu.com
 - 超时时间: 8秒
 
健康检查
- 频率: 每小时30分执行
 - 功能: 检查代理池健康状态
 - 应急处理: 可用代理少于10个时触发紧急抓取
 
数据库结构
proxies 表
| 字段名 | 类型 | 说明 | 
|---|---|---|
| id | INTEGER | 主键,自增 | 
| ip | TEXT | IP地址 | 
| port | INTEGER | 端口号 | 
| location | TEXT | 地理位置 | 
| speed | INTEGER | 响应速度(毫秒) | 
| last_check_time | TEXT | 最后验证时间 | 
| is_valid | INTEGER | 是否可用 (1:可用, 0:不可用) | 
| response_time | INTEGER | 验证响应时间 | 
| created_at | DATETIME | 创建时间 | 
| updated_at | DATETIME | 更新时间 | 
唯一约束: (ip, port)
使用示例
获取随机代理
curl http://localhost:3000/api/proxies/random
响应:
{
  "success": true,
  "data": {
    "id": 1,
    "ip": "101.132.134.160",
    "port": 8888,
    "location": "上海市",
    "is_valid": 1,
    "response_time": 150,
    "created_at": "2025-10-30 12:00:00",
    "updated_at": "2025-10-30 12:30:00"
  }
}
验证代理
curl -X POST http://localhost:3000/api/proxies/verify \
  -H "Content-Type: application/json" \
  -d '{"ip":"101.132.134.160","port":8888}'
响应:
{
  "success": true,
  "data": {
    "ip": "101.132.134.160",
    "port": 8888,
    "isValid": true,
    "responseTime": 150,
    "error": null
  }
}
获取统计信息
curl http://localhost:3000/api/proxies/stats
响应:
{
  "success": true,
  "data": {
    "total": 50,
    "valid": 30,
    "invalid": 20,
    "validRate": "60.00%"
  }
}
配置说明
环境变量
PORT: 服务端口 (默认: 3000)
数据库配置
数据库配置文件: config/database.js
const dbConfig = {
  development: {
    dialect: 'sqlite',
    storage: path.join(__dirname, '../proxies.db')
  }
};
日志和监控
- 服务启动后会输出详细的执行日志
 - 通过 
/health接口可查看系统状态 - 支持优雅关闭,保证数据完整性
 
注意事项
- 合法使用: 请遵守网站服务条款,合理使用代理IP
 - 频率控制: 内置请求延迟和重试机制,避免对目标网站造成压力
 - 数据质量: 免费代理IP质量参差不齐,建议仅用于测试和学习
 - 资源占用: 定时任务会占用一定的系统资源
 
开发和部署
开发模式
npm run dev
生产部署
建议使用 PM2 进行进程管理:
npm install -g pm2
pm2 start src/app.js --name "proxy-service"
pm2 logs proxy-service
pm2 status proxy-service
许可证
MIT License
贡献
欢迎提交Issue和Pull Request!