首页 > 解决方案 > 抓取网页并查找行的标题

问题描述

我正在寻找一种在网页中查找行标题的方法。

使用Puppeteer,如果我知道 div 和类的名称,我可以找到行标题。但如果我不这样做呢?如果我想获得将出现的任何列表的所有标题怎么办?

不是在寻找一个完整的解决方案(如果是这样,更好),甚至是我可以使用什么技术(可能是某种人工智能)来获得这个输出的想法。

例子:

在此处输入图像描述

输出:

  1. Sekiro:影逝二度
  2. 真人快打11
  3. F1 2019
  4. 外荒野

标签: web-scrapingartificial-intelligencepuppeteer

解决方案


监督学习

如果您指的是监督学习 AI 系统(例如神经网络),我想告诉您您将要面临的问题。主要存在三个问题:

训练数据

要创建自动检测标题的 AI,您首先需要训练 AI。您将需要数百甚至数千个样本来训练您的 AI。这意味着,在你的 AI 能够预测任何事情之前,你必须进行大量手动工作来获取和标记输入数据。

为您的 AI 输入

你会给人工智能提供什么输入?你有两个选择:

  • 源代码:这基本上可以训练你的 AI 成为网络浏览器。有趣的挑战,但我怀疑你会从中得到任何结果。
  • 网站的屏幕截图?您不应将实际屏幕截图输入 AI,而应尝试“清理”它。例如,您可以用某种占位符替换所有文本,因为您希望 AI 处理“文档的外观”而不是文本本身。这种方法比第一种方法效果更好,但是在将图像提供给您的 AI 之前,您必须对图像进行一些清理工作。这可以工作,但你需要大量的训练数据才能可靠地工作。

可靠性

即使您解决了所有问题并且您的 AI 最终能够检测到列表的标题,您也需要意识到 AI 永远不会完美地工作。当然,没有算法是完美的,但是使用人工智能,你不能简单地“调整”你的算法以获得更好的结果。

想象一下,您看到对于特定网站,您的 AI 不起作用。您无法轻松调试 AI 并调整代码以使其适用于该页面。你将不得不重新训练你的人工智能,希望在你的调整之后它会起作用。也许,那么它将适用于该页面,但现在另一个网站将不再工作......

算法方法

我建议不要使用 AI,而是使用简单的算法来检测包含标题元素的列表。像下面这样的东西可以工作:

h2对每个标题标签 ( , h3, ...)重复以下操作

  1. 获取所有标题元素(例如h2
  2. 是元素的数量<= 1,那么这不是一个列表(跳过)
  3. 检查每个元素的“周围元素”。如果这是一个列表,所有元素都应该有相同的环境:元素的父级是否具有相同的类名?兄弟节点是否具有相同的类?如果不是,这不是一个列表(跳过)
  4. 鉴于前面的步骤,元素很可能是列表的一部分,并且您的标题元素应该包含列表的标题。

有一些明显的缺点:这种方法仅适用于包含多个元素的列表,并且仅在正确使用标记的情况下才有效。如果网站只使用div元素而不是标题标签,这将不起作用。所以,这只能作为一个起点,算法显然可以改进......


推荐阅读