网页抓取和查找行标题

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

使用 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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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