【问题标题】:Scraping web page and finding titles of rows抓取网页并查找行的标题
【发布时间】:2019-09-08 05:51:43
【问题描述】:

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

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

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

例子:

输出:

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

【问题讨论】:

  • 可能类似于h2,h3,h4,[class*=title]
  • 实际上你需要训练一些人工智能来理解什么是标题,什么不是。计算机不会自动知道我们期望哪个作为输出。 :D

标签: web-scraping artificial-intelligence puppeteer


【解决方案1】:

监督学习

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

训练数据

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

人工智能输入

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

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

可靠性

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

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

算法方法

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

对每个标题标签(h2h3、...)重复以下操作

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-10
    • 2020-08-28
    • 2021-09-25
    • 1970-01-01
    • 2019-01-05
    • 2021-11-02
    • 2020-07-03
    相关资源
    最近更新 更多