第五期:web 动态爬虫
🎯 作业目标
- 深入学习动态爬虫(也称“智能爬虫”)的原理,并动手实现一个基础的动态爬虫。
📖 作业背景
随着前端技术的发展,越来越多的网站内容由 JavaScript 动态生成,传统的静态爬虫(仅请求HTML)已无法获取完整的页面信息。动态爬虫通过模拟真实用户在浏览器中的行为(如点击、滚动、等待AJAX加载),能够有效地处理这些现代 Web 应用。
本期作业将深入 crawlergo
的源码,学习其设计思想,并实现我们自己的动态爬虫。
📝 作业要求
-
学习
crawlergo
源码:- 阅读
crawlergo
的源代码,理解其核心工作流程。 - 重点分析以下模块:
- 如何使用
Chrome DevTools Protocol
启动和控制浏览器。 - 如何监听和拦截网络请求。
- 如何模拟用户交互(如点击、表单填充)。
- 如何从 DOM 中提取新的 URL。
- 如何处理伪静态 URL 和去重。
- 如何使用
- 阅读
-
实现自己的动态爬虫:
- 基于你的学习,使用
pyppeteer
,puppeteer
或chromedp
等库,编写一个简单的动态爬虫。 - 基础功能:
- 输入一个起始 URL。
- 启动浏览器,访问该 URL。
- 监听网络请求,收集所有发出的
GET
和POST
请求。 - 解析页面中的
<a>
和<form>
标签,发现新的 URL 和表单。 - 将新发现的 URL 加入待爬取队列。
- (选做)高级功能:
- 实现对页面上的按钮和可点击元素进行模拟点击。
- 实现简单的表单自动填充和提交。
- 实现请求去重逻辑。
- 基于你的学习,使用
-
成果展示:
- 提供你的动态爬虫源代码。
- 分享你在学习
crawlergo
源码过程中的笔记和心得。 - 用你的爬虫去爬取一个动态加载内容的网站,并展示爬取到的请求列表。
💡 核心思路与提示
- 事件驱动:动态爬虫的核心是事件驱动。你需要处理各种浏览器事件,如页面加载完成、网络请求发起、DOM变化等。
- URL 管理:如何高效地管理待爬取队列和已爬取集合,并进行有效的去重,是爬虫性能的关键。
- 关注细节:处理 URL 相对路径转绝对路径、过滤非 HTTP 链接、处理 JS 伪协议等细节问题。
🔗 参考链接
- 题目来源: https://t.zsxq.com/0b3U08Slv
- crawlergo 源码学习系列:
掌握动态爬虫技术,是通往高级 Web 安全扫描器的必经之路。