网页抓取和查找行标题

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

使用 Puppeteer,如果我知道div和类的名称,我可以找到行的标题。但是如果我不知道呢?如果我想获取任何列表的所有标题,该怎么办?

我不是在寻找一个完整的解决方案(如果有,那更好),但即使是一个关于我可以使用什么技术的想法(可能是某种AI)来达到这个输出也行。

示例:

enter image description here

输出:

  1. Sekiro: Shadows Die Twice
  2. Mortal Kombat 11
  3. F1 2019
  4. Outer Wilds

回答:

监督学习

如果你指的是像监督学习AI系统(如神经网络)这样的东西,我想给你一个关于你将要面对的问题的想法。有三个主要问题:

训练数据

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

AI的输入

你会给AI什么作为输入?你有两个选择:

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

可靠性

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

想象一下,你发现对于某个特定的网站,你的AI不起作用。你不能轻易地调试你的AI并调整你的代码以使其适用于那个页面。你将不得不重新训练你的AI,希望在你的调整之后它会工作。也许,然后它会适用于那个页面,但现在另一个网站将不再工作…

算法方法

我建议使用一个简单的算法来检测带有标题元素的列表,而不是使用AI。以下类似的东西可能有效:

对每个标题标签(h2h3等)重复以下步骤

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

有一些明显的缺点:这种方法只适用于超过一个元素的列表,并且仅在正确使用标记时有效。如果网站只使用 div 元素而不是标题标签,这将不起作用。因此,这应该只是一个起点,显然可以改进这个算法…

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注