SmartPagerankSearch / ANTI_CRAWLING_ANALYSIS.md
GitHub Action
Sync from GitHub Actions (Clean Commit)
7f22d3c

爬虫反爬虫功能分析

当前已有的反爬虫措施 ✅

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)
  • 爬取频率中等(每分钟几个请求)
  • 当前爬虫已改进,风险降低

高风险场景 ❌

  • 爬取商业网站
  • 高频爬取(每秒多个请求)
  • 需要登录的网站

改进建议优先级

🔴 高优先级(已完成 ✅)

  1. 添加请求间隔延迟 - 防止请求过于频繁
  2. 完善 HTTP Headers - 更像真实浏览器
  3. 添加全局速率限制 - 控制整体爬取速度

🟡 中优先级(建议改进)

  1. robots.txt 检查 - 遵守网站政策
  2. 请求头随机化 - 降低识别概率(部分完成:User-Agent已随机化)
  3. Cookie/Session 支持 - 处理需要登录的页面

🟢 低优先级(可选)

  1. 代理池支持 - 大规模爬取时使用
  2. 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       # 无速率限制
)

反爬虫功能总结

✅ 已实现

  1. User-Agent 随机化 - OptimizedCrawler使用fake-useragent
  2. 并发控制 - Semaphore限制同时请求数
  3. 请求延迟 - 按域名延迟,防止频繁请求
  4. 全局速率限制 - 令牌桶算法控制整体速度
  5. 完整HTTP Headers - 模拟真实浏览器
  6. Referer支持 - 自动添加Referer头
  7. 重试机制 - 指数退避策略
  8. 超时控制 - 防止长时间等待

❌ 未实现(可选)

  1. robots.txt检查
  2. Cookie/Session管理
  3. 代理池支持
  4. JavaScript渲染
  5. 请求头完全随机化(除User-Agent外)

建议

对于TUM网站爬取,推荐使用:

crawler = OptimizedCrawler(
    concurrency=3,      # 保守的并发数
    delay=1.5,          # 1.5秒延迟
    max_rate=3.0        # 每秒最多3个请求
)

这样可以:

  • ✅ 降低被封IP的风险
  • ✅ 遵守网站的使用政策
  • ✅ 保持合理的爬取速度