web-scraping - 抓取网页并查找行标题

标签 web-scraping artificial-intelligence puppeteer

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

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

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

示例:

enter image description here

输出:

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

最佳答案

监督学习

如果您指的是监督学习人工智能系统(如神经网络)之类的东西,我想让您了解您将面临的问题。主要存在三个问题:

训练数据

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

AI 的输入

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

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

可靠性

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

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

算法方法

我建议使用简单的算法来检测内部包含标题元素的列表,而不是使用人工智能。像下面这样的东西可能会起作用:

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

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

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

关于web-scraping - 抓取网页并查找行标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57839514/

相关文章:

php - 构建比较字符串相似度的推荐系统

javascript - 当队列为 'full' 时暂停循环

javascript - 通过管道而不是 websocket 连接 Puppeteer 的优点和缺点是什么

python scrapy - 输出csv文件为空

python - 网页抓取打印换行符

security - 击败扑克机器人

node.js - 试图在使用 Puppeteer 生成的 PDF 上隐藏第一个页脚/页眉

javascript - 如何在java中使用网络爬虫获取内容

javascript - 用Javascript解析SHOUTcast服务器信息表?

javascript - 如果轮盘赌选择返回相同的父项怎么办?