自动化网页抓取服务器

基于Playwright和Azure的自动化网页抓取服务器,支持异步处理和自愈功能,适用于大规模数据提取和合规性要求高的场景。

  • by KingP0
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 KingP0/Test_technique_TW3

使用说明

架构MCP IA

本文档列出了开发MCP服务器和智能代理所做的结构化技术选择,以及Azure上的目标体系结构。

1.技术和开发堆栈

1.1自动化引擎:Playwright

决定: 利用率 playwright (异步版本)。 正当理由:

  • JavaScript渲染: 对于动态生成HTML的现代站点(SPA)是必要的,而不是静态刮板(requests).
  • 可靠性: 自动等待减少了脆弱脚本错误(“缺陷”)。
  • 演出 异步方法允许在不阻塞服务器的情况下管理多个任务。

1.2 MCP协议:STDIO传输

决定: 运输利用率 stdio (标准输入/输出)。 正当理由:

  • 简单性: 本地不需要网络管理(端口、防火墙)。
  • 安全: 攻击面减少,因为服务器只能由父进程访问。

2.MCP服务器的设计

2.1国家管理(State Management)

决定: 使用持久浏览器上下文(Singleton)。 正当理由:

  • 抓取是一系列相互关联的操作(导航->等待->单击)。
  • 全球实例 browser_context 允许在两个AI命令之间保留Cookie和活动会话。

2.2工具策略(Tools Strategy)

决定: AI签名的调整。

  • CSS选择器: 独家选择CSS选择器(比LLM的XPath更简洁、更健壮)。
  • 动态屏幕截图: 强制添加参数 filename这允许代理创建可视化历史记录(“操作之前/之后”),而不会覆盖以前的文件。

2.3错误管理(自我修复)

决定: 异常的系统捕获(try/except)在每个工具中。 正当理由:

  • 服务器永远不应该崩溃。
  • 错误以描述性文本的形式返回给AI,使其能够理解问题并尝试自主修复。

2.4清理策略(HTML清理)

决定: 通过DOM严格过滤 BeautifulSoup 在发送到AI之前。 正当理由:

  • 成本和性能: 将所有原始HTML发送到LLM过于昂贵和缓慢。
  • 我们删除脚本、样式和SVG标记,只保留对提取有用的语义结构。

3.架构去生产(Azure)

背景: 工业客户的安全部署(ISO 27001),支持1000个用户。

3.1概述(逻辑图)

该架构基于异步模型(“Fire and Forget”),以确保快速响应时间(<2s),即使抓取持续很长时间。

graph TD
    Client["Utilisateur / App"] -->|HTTPS| Gateway["Azure Application Gateway (WAF)"]
    Gateway --> API["Container App: API Backend"]
    
    subgraph "Zone Sécurisée (VNet)"
        API -->|Dépose la demande| Queue["Azure Service Bus"]
        Queue -->|Déclenche| Worker["Container App: Agent Scraper"]
        
        Worker -->|Navigation| Web("Internet / Sites Cibles")
        Worker -->|Analyse HTML| OpenAI["Azure OpenAI Service"]
        
        Worker -->|Stocke JSON| DB[("Azure Cosmos DB")]
        Worker -->|Stocke Images| Blob[("Azure Blob Storage")]
    end

3.2组件的选择

计算:Azure容器应用程序(ACA) 决定: 使用容器应用程序。 正当理由:

  • 简单性: 允许您部署Docker容器,而无需管理编排器的复杂性。
  • 自动可伸缩性(KEDA): ACA可以在队列满时自动启动新的“工人”(以处理1000个用户的峰值),并在夜间返回零(节省成本)。

模式异步:Azure服务总线 决定: 解耦API和抓取。 正当理由:

  • 规范要求在不到2秒内做出响应。
  • 由于抓取时间超过2秒,API接受请求,返回即时跟踪ID,并将工作委托给总线服务。

库存:Cosmos数据库和Blob存储 决定: 结构化和二进制数据的分离。

  • Cosmos DB(NoSQL): 非常适合存储JSON结果,其模式因抓取站点而异。
  • Blob存储: 高效且廉价的屏幕截图存储(防刮)。

3.3安全与合规(GDPR/ISO 27001)

  • 管理身份(Managed Identity): 代码中不存储API密钥或密码。服务通过Azure AD自动相互验证。
  • 专用网络(VNet): 数据库和人工智能不在公共互联网上公开,遵守严格的安全政策。
  • 可追溯性: 每个操作都集中记录在Azure Monitor中,用于安全审计。