代码之家  ›  专栏  ›  技术社区  ›  Ran

查找HTML节文档的内容

  •  2
  • Ran  · 技术社区  · 15 年前

    所谓“内容”,我指的是包含人类看到的页面内容的dom,没有噪音,只是“页面实际内容”。 我知道问题的定义不明确,但让我们继续。。。 例如,在博客网站中,这通常是很容易的,当浏览到一篇特定的文章时,你通常在页面顶部有一些工具栏,可能在LHS上有一些导航元素,然后你就有了包含内容的div。试图从HTML中找出这一点可能很棘手。不过,幸运的是,大多数博客都有RSS提要,在这篇特定文章的提要中,您可以找到一个<说明>节(或<内容:encoded>),这正是您想要的。 因此,要完善内容的定义,这就是页面上包含有趣部分的实际内容,删除所有广告、导航元素等。 因此,从博客中查找内容相对容易,假设他们有RSS。其他支持RSS的网站也是如此。

    新闻网站呢?在许多情况下,新闻网站都有RSS,但并不总是如此。那么,人们如何在新闻网站上找到内容呢? 更一般的网站呢?许多网页(当然不是全部)都有内容部分和其他部分。你能想出一个好的算法来找出那些“有趣”的部分吗?也许是那些不改变的部分改变了?

    希望我已经说清楚了。。。谢谢

    2 回复  |  直到 15 年前
        1
  •  2
  •   Alistair Knock    15 年前

    我没有这样做,但这将是我的一般做法。

    正如您所指出的,可见内容部分中缺少结构(即,它没有诸如 header , navigation , ads

    • 元元素,例如 !doctype head (以 title (作为单独的数据)
    • object , embed , applet , script
    • img
    • 表单元素,即。 form , input , textarea , label , legend select , option

    然后,第二个过程可以开始排除常见的情况 div ul id/类名,以及其中的所有标记,例如:

    • 标题 , footer , meta
    • nav , 航行 topnav , sidebar
    • ad , 广告 , adu

    这将有望从页面中删除大量装饰。下一个挑战是尝试从剩下的内容中识别主要内容,我建议首先假设站点作者正确使用语义HTML,因此主要使用 h1 , h2 头标签和 p 段落标记。

    h1 标签通常(可以说是错误的)用于显示站点名称或徽标,但这有望通过排除页面的标题部分来消除。)后续的每一段都应添加到当前内容中,直到您到达一个中断,该中断可能是页面的结尾 div td

    由于页面上可能仍有几组您收集的内容(可能是主要内容加上关于作者的简介),因此您需要在此处测试和完善决策步骤,以选择最有可能的候选人。无论从长度还是所使用的段落元素的数量来看,这通常都是最大的。

    当您收集更多的内容示例时,您可以向算法添加支持措施;这可能是因为您注意到许多页面使用 div id="content" id="maincontent" . 保留您检测到的次要内容项目也可能很有用,这样,如果某些网站有一种奇怪的内容结构方式,那么一旦您在算法中添加了一个捕获器,它就可以仅针对该网站的内容重新运行。

        2
  •  0
  •   Bill Yang    15 年前

    一个结构良好的站点的公共区域将重用相同的代码,例如导航、标题等。

    当您有一个要分析的目标页面时,请尝试浏览同一域/子域下的其他几个页面,并查找所有页面共有的元素。这些是你想要消除的噪音。

    然后你可以看看剩下的东西,看看是否有噪音。当你收集了相当数量的数据后,试着从中找出一些模式。完善你的逻辑并重复。