Vanson's Eternal Blog

Python爬虫系统架构设计

Python spider basic.png
Published on
/4 mins read/---

Spider

主流爬虫系统

Scrapy

scrapy

Feapder

feapder

Pyspider

pyspider

Crawley

Crawley

Crawl4ai

crawl4ai

实现

graph TD
    A[调度中心] --> B[URL管理器]
    A --> C[下载器集群]
    C --> D[解析器集群]
    D --> E[数据存储]
    F[监控中心] --> A & B & C & D & E
    G[代理/IP池] --> C
    H[缓存系统] --> C & D

调度中心

  • 分布式任务调度:采用主从架构(如Celery+Redis/Kafka)
  • 动态负载均衡:基于节点CPU/网络实时分配任务
  • 优先级队列:支持VIP站点优先抓取(加权轮询算法)

URL管理器

去重系统:

短期去重:Bloom Filter(错误率<0.01%

长期去重:RocksDB存储指纹(SHA256)

下载器集群

多协议支持:HTTP/2, WebSocket, gRPC

连接池优化:

Keep-Alive连接复用(单机维持500+连接)

智能超时设置:

connect_timeout: 5s
read_timeout: 15s
total_timeout: 30s

自适应限流:令牌桶算法控制请求频率

解析器集群

多模式解析引擎

graph LR
    HTML --> XPath解析
    JSON --> JMESPath
    JavaScript --> Headless Chrome
    PDF --> Tika OCR

容错机制:Sandbox隔离环境防止解析崩溃

数据存储

  • 原始页面:HDFS + Parquet 冷热分层(S3归档)
  • 结构化数据:Elasticsearch + PG 主存储(TTL 3年)
  • URL状态:Redis Cluster 持久化RDB+AOF
数据类型存储生命周期压缩备份
原始页面HDFS Parquet + S3 Glacier7天热→冷→30天归档LZ4→ZSTD跨区3副本
结构化数据ClickHouse (主) + ES (搜索)TTL 3年ZSTD(6)双活
URL状态Redis Cluster (RDB+AOF)永久RDB 每6h+AOF实时
监控指标VictoriaMetrics15天ZSTD冷存

关键技术

反爬对抗体系

维度v1v2 升级
IP轮换代理池ISP+住宅IP双池 + 实时质量评分 (丢包率>5% → 拉黑)
TLS指纹ja3随机ja3n+ja4+http2 fingerprint 全链路随机
浏览器指纹500 模板指纹工厂(每次启动随机 Canvas/WebGL/Audio)
行为模拟鼠标轨迹完整交互链:鼠标→滚轮→键盘→悬停→延迟泊松分布
验证码打码平台混合策略:2Captcha + 自训练 CNN(YOLOv8)

IP轮换系统:

  • 代理池维护(数据中心IP+住宅IP混合)
  • 智能切换策略

行为指纹混淆

  • 鼠标轨迹模拟(贝塞尔曲线)
  • TLS指纹随机化(ja3算法)
  • 浏览器指纹库轮换(500+指纹模板)

运维保障体系

监控矩阵

指标SLISLO采集报警
抓取成功率2xx/(2xx+5xx)≥99.5 %Prometheus 10sAlertmanager
解析延迟P95<2 sOpenTelemetry 5sPagerDuty
代理健康success_rate≥90 %自研 exporter 30sWebhook
数据丢失未落盘消息数0Kafka lagDeadManSnitch

自动扩缩容

# Kubernetes HPA示例
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
spec:
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:
          type: Utilization
          averageUtilization: 70
  minReplicas: 10
  maxReplicas: 500