我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
目录
网络爬虫(一种互联网机器人)从种子 URL 开始系统地搜索网络内容。此过程称为爬行,存储获取的内容以供后续使用。搜索引擎使用这些存储的数据进行索引和排名。
本具体讨论重点关注网络爬行,不涉及搜索引擎中的索引和排名阶段。
由于遍历时间与存储需求同样重要,我们来计算一下一次性抓取的大概时间。假设每个网页的平均HTTP遍历为60毫秒,则遍历所有50亿个页面 >?将是:
总计?遍历?时间=5?十亿秒< /span>年9.5?=?十亿=0.3?毫秒×60
使用一次抓取实例遍历整个互联网大约需要 9.5 年时间一次抓取,但我们希望在一天。我们可以通过设计系统来支持多工作线程架构并将任务分配给在不同服务器上运行的多个工作线程来实现此目的。
这是安排网址抓取的关键构建块之一。它由两个单元组成:优先级队列和关系数据库。
图 1.0:调度程序组件
网络爬虫需要 DNS 解析器将主机名映射到 IP 地址以获取 HTML 内容。由于DNS 查找是一个耗时的过程,更好的方法是创建自定义 DNS 解析器并在其生存时间内缓存常用的 IP 地址,因为它们在生存时间后必然会发生变化-直播。
HTML 提取器启动与托管 URL 的服务器的通信。它根据底层通信协议下载文件内容。我们主要关注文本内容的?HTTP 协议,但?HTML 获取器?可以轻松扩展到其他通信协议。
该组件充当爬虫的大脑,由工作实例组成。该服务主机/爬虫执行三个主要任务:
图2.0:服务主机与其他组件集成
HTML 提取程序获取网页后,下一步就是从网页中提取两部分内容:网址和内容。提取器直接将提取的 URL 以及带有文档输入流 (DIS)?的内容发送到重复消除器。?DIS 是一个缓存,用于存储提取的文档,以便其他组件可以访问和处理它。在这里,我们可以使用?Redis?作为我们的缓存选择,因为它具有先进的数据结构功能。
一旦验证数据存储中不存在重复项,提取器就会将URL 发送到包含 URL 边界的任务计划程序并将内容存储在?blob 存储中以用于索引目的
网络的互联性导致不同 URL 可能存在重复内容。为了防止资源浪费,重复数据删除组件会检查重复项。它计算提取的 URL 的校验和并将其与存储的校验和进行比较。匹配项将被丢弃,而新条目将添加到数据库中。
图 3.0:重复消除器设计
重复消除器对提取的内容重复相同的过程并将新网页的校验和值添加到文档校验和数据存储中以供将来匹配.
由于网络爬虫是主干搜索引擎、存储和索引?>。非结构化数据,因为我们需要存储大量blob存储?获取的内容和相关元数据非常重要。设计需要有一个分布式存储,例如
图4.0:网络爬虫的最终设计
我们的系统由多个爬行工作者组成。爬网内容之间的数据一致性至关重要。因此,为了避免数据不一致和抓取重复,我们的系统会计算网址和文档的校验和,并将其与?URL文档校验和数据存储,分别。
除了重复数据删除之外,为了通过容错条件确保数据一致性,所有服务器都可以定期将其状态检查点到备份服务,例如 Amazon S3 或离线磁盘。