Spaces:
Sleeping
Sleeping
爬虫反爬虫功能分析
当前已有的反爬虫措施 ✅
1. User-Agent 设置
- ✅
OptimizedCrawler: 使用fake-useragent随机生成 User-Agent - ⚠️
SmartCrawler: 使用固定的 User-Agent(容易被识别)
2. 并发控制
- ✅
OptimizedCrawler: 使用Semaphore限制并发数(默认5) - ✅ 防止短时间内发送过多请求导致被封IP
3. 重试机制
- ✅ 失败后自动重试(最多3次)
- ✅ 使用指数退避策略(2^i 秒延迟)
4. 超时设置
- ✅ 请求超时时间:10秒
- ✅ 防止长时间等待
5. 请求延迟(部分)
- ✅
auto_crawler.py中有time.sleep(1)延迟 - ❌
OptimizedCrawler没有请求间隔延迟
已改进的反爬虫功能 ✅ (最新更新)
1. 请求间隔/延迟 ✅
- ✅
OptimizedCrawler现在支持按域名延迟(delay参数) - ✅ 防止对同一域名请求过于频繁
- ✅ 默认延迟:1.0秒
2. 完整的 HTTP Headers ✅
- ✅ 添加了完整的浏览器 Headers(Accept, Accept-Language, Accept-Encoding等)
- ✅ 自动添加 Referer(模拟页面跳转)
- ✅ 更像真实浏览器行为
3. 全局速率限制 ✅
- ✅ 支持令牌桶算法的全局速率限制(
max_rate参数) - ✅ 可以设置每秒最大请求数
- ✅ 防止整体爬取速度过快
仍缺少的反爬虫功能 ❌
1. robots.txt 检查
- ❌ 未检查网站的 robots.txt
- ❌ 可能违反网站的爬取政策
2. Cookie/Session 管理
- ❌ 不支持 Cookie 持久化
- ❌ 不支持需要登录的页面
3. 请求头随机化
- ⚠️ 只有 User-Agent 随机化
- ❌ 其他 headers 应该也随机化
4. IP 轮换
- ❌ 不支持代理池
- ❌ 无法切换 IP 地址
风险评估
低风险场景 ✅
- 爬取自己的网站
- 爬取公开的、允许爬取的网站
- 爬取频率很低(每小时几个请求)
中风险场景 ⚠️
- 爬取教育机构网站(如 TUM)
- 爬取频率中等(每分钟几个请求)
- 当前爬虫已改进,风险降低
高风险场景 ❌
- 爬取商业网站
- 高频爬取(每秒多个请求)
- 需要登录的网站
改进建议优先级
🔴 高优先级(已完成 ✅)
- ✅ 添加请求间隔延迟 - 防止请求过于频繁
- ✅ 完善 HTTP Headers - 更像真实浏览器
- ✅ 添加全局速率限制 - 控制整体爬取速度
🟡 中优先级(建议改进)
- robots.txt 检查 - 遵守网站政策
- 请求头随机化 - 降低识别概率(部分完成:User-Agent已随机化)
- Cookie/Session 支持 - 处理需要登录的页面
🟢 低优先级(可选)
- 代理池支持 - 大规模爬取时使用
- JavaScript 渲染 - 处理 SPA 页面
使用示例
基础使用(默认反爬虫设置)
from crawler import OptimizedCrawler
import asyncio
# 默认设置:并发5,延迟1秒,无全局速率限制
crawler = OptimizedCrawler()
results = asyncio.run(crawler.run(['https://example.com']))
增强反爬虫设置
# 更保守的设置:降低并发,增加延迟,添加速率限制
crawler = OptimizedCrawler(
concurrency=3, # 降低并发数
delay=2.0, # 每个域名请求间隔2秒
max_rate=2.0 # 全局最多每秒2个请求
)
results = asyncio.run(crawler.run(urls))
快速爬取(风险较高)
# 快速但可能被识别为爬虫
crawler = OptimizedCrawler(
concurrency=10, # 高并发
delay=0.5, # 短延迟
max_rate=None # 无速率限制
)
反爬虫功能总结
✅ 已实现
- User-Agent 随机化 - OptimizedCrawler使用fake-useragent
- 并发控制 - Semaphore限制同时请求数
- 请求延迟 - 按域名延迟,防止频繁请求
- 全局速率限制 - 令牌桶算法控制整体速度
- 完整HTTP Headers - 模拟真实浏览器
- Referer支持 - 自动添加Referer头
- 重试机制 - 指数退避策略
- 超时控制 - 防止长时间等待
❌ 未实现(可选)
- robots.txt检查
- Cookie/Session管理
- 代理池支持
- JavaScript渲染
- 请求头完全随机化(除User-Agent外)
建议
对于TUM网站爬取,推荐使用:
crawler = OptimizedCrawler(
concurrency=3, # 保守的并发数
delay=1.5, # 1.5秒延迟
max_rate=3.0 # 每秒最多3个请求
)
这样可以:
- ✅ 降低被封IP的风险
- ✅ 遵守网站的使用政策
- ✅ 保持合理的爬取速度