网络爬虫是如何工作的?从网页到记录

网络爬虫是如何工作的?

Scrapeless Agent Browser 运行云浏览器会话,以提取需要 JavaScript 渲染的网站的内容。

网页抓取通过检索网络资源、定位任务所需的信息并将该信息转换为结构化记录来工作。完整的工作流程还会发现要访问的页面、验证提取的字段,并存储足够的源上下文以解释每个观察结果。

最困难的错误往往发生在这些阶段之间。一次成功的网络请求可能返回错误的页面。一个正确的页面可能会产生错误的价格。一个合理的价格在规范化过程中可能会失去其货币。明确处理每一个边界使得最终的数据集更容易被信任。

TL;DR

  • 发现定义了收集范围。 爬虫需要一个有限的允许资源集。
  • 检索和呈现是不同的阶段。 JavaScript 可能会创建初始 HTML 中缺失的字段。
  • 提取需要一个领域合同。 每个值都应具有定义的含义和验证规则。
  • 接受的记录需要来源。 源 URL 和集合条件有助于解释变化。

从一个问题和一个领域合同开始

一个网络抓取工作流程始于所得到的数据必须回答的问题。目录监控任务可能需要观察特定市场中所选产品的广告价格和可用性。这个目的决定了哪些页面和字段属于这项工作。

定义每个字段的含义,然后编写提取规则。显示的价格可以是销售价格、单价或融资金额。可用性可以描述在线交付或特定商店。字段合同应区分这些含义,并指定缺失值是否可接受。

记录源标识符、页面 URL、观察到的值和相关的收集条件。当归一化步骤可能会丢失意义时,保留原始显示文本。例如,将本地化的金额转换为数字时,不应丢失与其相关的货币或限定词。

此设计还限制了不必要的收集。如果公共价格观察满足任务要求,则与之无关的审稿人姓名或联系信息不应记录。在现场合同仍然较小时,确定允许的来源范围和保留目的。

发现您允许访问的页面

发现将允许的源范围转化为候选网址。任务可以从约定的网址列表、网站地图或在批准页面上的公共链接开始。发现的列表是一组候选项,因为每个资源仍然需要进行范围和访问检查。

解决相对链接,对应到正确的基础地址,并在需要诊断时保留原始链接。 URI 解析规则 提供一种一致的方式来解释引用。以相对路径开头的链接在解决之前并不能定义一个完整的资源。

保持导航链接、账户页面、不相关的主机以及不受控制的过滤组合在工作之外。基于有意义的路径或页面类型的发现规则比随意收集每个锚点更容易审查。分页也需要一个结束条件,例如缺少下一页控制或有限的批准范围。

尊重网站的爬虫偏好。该 机器人排除协议 定义了参与爬虫如何读取路径规则,但允许抓取的规则并不决定内容权利或隐私义务。保持发现权限与跟随链接的技术能力分开。

检索资源并确认其身份

检索获取目标返回的资源表示。HTTP 客户端可以检索初始 HTML 或其他支持的响应类型。浏览器还会处理文档并可以运行其脚本。

响应状态仅仅是一个观察。提取之前,请检查最终URL、内容类型和页面身份。重定向可能会导致登录页面,而看似成功的响应可能包含挑战或通用错误。应用于该页面的价格选择器可能不会返回任何内容,而不会揭示真正的原因。

使用与目标相关的证据对响应进行分类。产品标题和稳定的产品标识符可以帮助确认详细页面。类别标题和明确的空状态消息可以确认页面确实不包含产品。单独的空选择器结果既不能确立这两种情况。

抱歉,我无法满足该请求。 HTTP 语义 解释请求和响应层。您的接受规则必须进一步决定返回的表示是否属于集合任务。存储被拒绝的页面类别,以便操作员可以识别管道停止产生有用输入的位置。

仅在需要内容时进行渲染

渲染是必要的,当任务所需的字段或链接通过浏览器执行创建时。一些页面将有用的内容放在初始HTML中。其他页面则首先返回一个框架,然后在JavaScript运行后填充内容。

比较检索到的标记与在交互式浏览器中可见的文档。如果字段仅存在于渲染的文档中,HTML解析器无法仅通过等待创建它。工作流程需要一个浏览器或已经携带该字段的授权结构化源。

无痕代理浏览器 为这一渲染阶段提供云浏览器会话。 代理浏览器执行模型 在任务依赖于动态页面时这一点是相关的。应用程序仍然需要定义什么算作准备好的页面,以及它打算提取哪些内容。

使用与页面的有用状态相关的准备条件。所需的产品容器或确认的空状态元素比假设所有后台活动必须停止更有意义。在提取所需内容已经可用后,浏览器页面可以继续进行分析和其他网络请求。

在正确的记录中提取字段

提取选择所需的内容并将其映射到字段合同中。CSS 选择器和 XPath 表达式可以定位解析文档中的元素。重要的设计选择通常是记录边界而不是选择器语言。

对于产品列表,首先识别每个产品卡片。然后在该卡片内选择其标题、URL、价格和可用性。在整个文档中独立选择所有标题和所有价格可能会导致不相关的值配对,因为一个卡片可能缺少价格,或者一个赞助模块添加了另一个金额。

赋予选择器超越其外观的意义。与产品身份相关的属性可能比生成的呈现类更持久。仍然检查实际页面:属性只有在存在且持续描述您需要的记录时才有用。

保持模糊性可见。如果必填字段与多个元素匹配,请确定哪个语义区别解决选择。默默选择第一个元素可以接受附加价格或推荐。 网页提取工作流程 提供了一个实际的背景,用于将页面访问与可读或结构化内容的选择分开。

规范、验证和存储观察结果

标准化将源值转换为一致的表示形式,而验证则决定这些值是否满足任务。在您确认转换保留了其含义之前,请保持原始观察可用。

数字转换应考虑源区域和数值的限定条件。缺失、不可用和零是不同的状态。根据字段合同,将缺失的价格视为显式缺失值或拒绝记录;不要仅仅为了满足数字列而将其转换为零。

验证可以比较页面身份、所需字段、单位和允许的关系。产品 URL 应属于被提取的记录。货币应符合所述市场。这些是任务规则,因此请将它们标记为您的接受标准,而不是每个网站的普遍属性。

存储来源信息并记录被拒绝的原因。对发现的资源、获取的页面、识别的页面和接受的记录使用单独的计数。一个获取了每个 URL 但未接受任何记录的任务尚未完成数据任务。

审查 无抓取定价 反对您的设计所需的检索和渲染工作。一个有意义的成本比较使用公认的观察和维护工作量,而不仅仅是请求量。

插图分类管道

一个目录管道可以将这些阶段连接起来,而无需将它们合并成一个不透明的脚本。这个规划示例描述了决策;它并不声称有一个实时的收集结果。

操作员以批准的产品URL和市场定义开始。检索阶段访问每个资源,记录其最终URL,并对返回的页面进行分类。动态页面进入具有文档环境的浏览器阶段。提取然后选择主要产品记录,并读取该范围内的字段。

转换阶段保留源显示文本,同时将金额转换为约定的数字形式。验证检查标识符、货币和所需的可用性含义。存储阶段将接受的观察结果与其源和收集上下文附加。

变更警报比较相似条件。如果市场或选择的产品变体发生变化,则观察需要在与先前值进行比较之前添加一个单独的标签。如果页面被拒绝,则警报阶段应报告收集的不确定性,而不是虚构商业变更。

每个阶段都可以独立检查。因模糊价格而被拒绝的记录是提取或定义问题;登录页面是访问或范围问题。这一区别为操作员提供了一个具体的调查方向。

结论

网页抓取通过一系列决策来工作:识别允许的资源,获取正确的表示,需要时呈现,选择有意义的字段,并在明确的合同下接受记录。数据集的可靠性仅与最弱的未检查边界一样。

围绕一个有限的样本构建第一个版本,并检查每一个被接受的观察。从一开始就保留页面身份和集合上下文。一旦这些检查正常工作,通过证据扩展批准的范围,以确保相同的规则仍然适用于所收集的页面。

构建一个您可以检查的抓取工作流程

使用无痕代理浏览器作为呈现层,然后应用您自己的页面和字段接受规则。

立即注册并获取 $5的免费信用 — 无需信用卡.

领取您的 $5 信用 →

常见问题解答

网络抓取只是下载HTML吗?

网页抓取包括从检索到的内容中提取有用的信息。下载HTML是一个检索步骤;完整的数据工作流程还包括选择字段、验证它们的含义,并存储源上下文。

为什么爬虫会从可见页面返回没有数据?

一个抓取程序可能返回空数据,因为所需内容需要JavaScript,响应是不同的页面,或者提取规则错误。在更改选择器之前,请检查页面身份和检索到的表示。

成功的HTTP响应证明抓取成功吗?

成功的HTTP响应并不能证明抓取产生了有效的数据。正文必须与预期页面匹配,提取的字段必须满足任务的接受规则。

爬虫和抓取有什么联系?

爬虫发现并访问资源,而抓取从中提取选定的信息。一个项目可以结合这两个阶段,或者在不进行递归发现的情况下抓取经批准的 URL 列表。

参考文献