网络爬虫的工作原理
网络爬虫从一个或多个种子 URL 开始。它会获取每个网页、解析 HTML、提取链接,并将尚未访问的 URL 加入名为“待访问队列”(crawl frontier)的队列。调度器根据域名、优先级和延迟等规则选择下一个 URL。
种子 URL → 获取网页 → 解析链接 → 新 URL 入队 → 重复
爬虫可以保存网页内容、响应状态、链接关系,以及标题或最后修改日期等元数据。搜索引擎使用这些信息构建索引。网站所有者也会运行爬虫,查找失效链接和缺失网页。
网络爬虫与网页采集工具
爬虫负责发现网页。网页采集则从网页中提取指定信息。
| 网络爬虫 | 网页采集工具 | |
|---|---|---|
| 主要任务 | 发现并获取网页 | 提取特定字段 |
| 典型输入 | 种子 URL 和爬虫规则 | 已知网页或网页类型 |
| 典型输出 | 网页、URL 和链接关系图 | 结构化记录 |
同一个应用可以兼具两种功能。例如,爬虫可以找出商店中的所有商品页面,采集工具再提取每件商品的名称、价格和库存情况。
爬虫控制
配置合理的爬虫会限制访问范围和发送请求的速度:
- **范围:**按主机名、路径、文件类型或链接深度限制访问范围。
- **网站指令:**读取 robots.txt,避开禁止访问的路径。这些规则只用于提供指引,并非访问控制机制。
- **请求速度:**为每个目标主机设置并发数和请求间隔,遵守限速,并在收到 429 响应后遵循
Retry-After。 - **重复内容处理:**规范化 URL、记录已访问的 URL,并过滤或限制查询参数,防止陷入爬虫陷阱。获取网页后使用内容哈希,避免重复处理相同内容。
- **渲染:**只有网页需要 JavaScript 时才使用无头浏览器,因为浏览器比基本的 HTTP 客户端消耗更多内存和带宽。
代理的作用
代理会改变网站看到的来源 IP。爬虫可以借助代理,在获得授权的情况下检查特定地区的公开内容,也可以让不同的数据采集任务使用不同的地址。
轮换代理可以将请求分散到多个 IP,但不会减少网站承受的总负载。限速应覆盖整个爬虫任务,而不能只按单个代理执行。更换 IP 也无法解决请求头不符合真实浏览器特征、浏览器指纹异常或请求模式过于激进等问题,这些问题仍可能触发反爬检测。
常见问题
网络爬虫有什么用途?
网络爬虫用于搜索引擎建立索引、网站审计、内容监测,以及发现需要采集数据的网页。爬虫的输出也可以交给采集工具,由后者提取结构化字段。
网络爬虫与网页采集工具相同吗?
不同。爬虫负责发现并获取网页,采集工具则从这些网页中提取指定数据。许多数据采集系统会结合这两种功能。
使用网络爬虫合法吗?
这取决于网站、数据、司法管辖区和使用目的。应遵守网站条款和 robots.txt,不得绕过访问控制措施,未经授权不得采集私密或受限信息。