跳转至

第五期:web 动态爬虫

🎯 作业目标

  • 深入学习动态爬虫(也称“智能爬虫”)的原理,并动手实现一个基础的动态爬虫。

📖 作业背景

随着前端技术的发展,越来越多的网站内容由 JavaScript 动态生成,传统的静态爬虫(仅请求HTML)已无法获取完整的页面信息。动态爬虫通过模拟真实用户在浏览器中的行为(如点击、滚动、等待AJAX加载),能够有效地处理这些现代 Web 应用。

本期作业将深入 crawlergo 的源码,学习其设计思想,并实现我们自己的动态爬虫。

📝 作业要求

  1. 学习 crawlergo 源码

    • 阅读 crawlergo 的源代码,理解其核心工作流程。
    • 重点分析以下模块:
      • 如何使用 Chrome DevTools Protocol 启动和控制浏览器。
      • 如何监听和拦截网络请求。
      • 如何模拟用户交互(如点击、表单填充)。
      • 如何从 DOM 中提取新的 URL。
      • 如何处理伪静态 URL 和去重。
  2. 实现自己的动态爬虫

    • 基于你的学习,使用 pyppeteer, puppeteerchromedp 等库,编写一个简单的动态爬虫。
    • 基础功能
      • 输入一个起始 URL。
      • 启动浏览器,访问该 URL。
      • 监听网络请求,收集所有发出的 GETPOST 请求。
      • 解析页面中的 <a><form> 标签,发现新的 URL 和表单。
      • 将新发现的 URL 加入待爬取队列。
    • (选做)高级功能
      • 实现对页面上的按钮和可点击元素进行模拟点击。
      • 实现简单的表单自动填充和提交。
      • 实现请求去重逻辑。
  3. 成果展示

    • 提供你的动态爬虫源代码。
    • 分享你在学习 crawlergo 源码过程中的笔记和心得。
    • 用你的爬虫去爬取一个动态加载内容的网站,并展示爬取到的请求列表。

💡 核心思路与提示

  • 事件驱动:动态爬虫的核心是事件驱动。你需要处理各种浏览器事件,如页面加载完成、网络请求发起、DOM变化等。
  • URL 管理:如何高效地管理待爬取队列和已爬取集合,并进行有效的去重,是爬虫性能的关键。
  • 关注细节:处理 URL 相对路径转绝对路径、过滤非 HTTP 链接、处理 JS 伪协议等细节问题。

🔗 参考链接


掌握动态爬虫技术,是通往高级 Web 安全扫描器的必经之路。