【问题标题】:How to extract Article Text contents from HTML page like Pocket (Read It Later) or Readability? [closed]如何从诸如 Pocket(稍后阅读)或 Readability 之类的 HTML 页面中提取文章文本内容? [关闭]
【发布时间】:2012-09-02 19:38:21
【问题描述】:

我正在寻找一些开源框架或算法,通过清理 HTML 代码、删除垃圾内容从任何 HTML 页面中提取文章文本内容,类似于 Pocket(又名 Read It Later)软件所做的。

口袋官网:http://getpocket.com/

此问题已在以下链接中提供: How to extract text contents from html like Read it later or InstaPaper Iphone app? 但我的要求有点不同。我想通过保留字体和样式 (CSS) 来清理 HTML 并使用图像提取主要内容。

【问题讨论】:

    标签: c# .net html c#-4.0 article


    【解决方案1】:

    我会推荐NReadability,以及HtmlAgilityPack

    在 NReadability 对页面进行转码后,主文本始终位于 id 为 readInner 的 div 中。

    //** replace this with any url **
    string url = "http://www.bbc.co.uk/news/world-asia-19457334";
    
    var t = new NReadability.NReadabilityWebTranscoder();
    bool b;
    string page = t.Transcode(url, out b);
    
    if (b)
    {
        HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
        doc.LoadHtml(page);
    
        var title = doc.DocumentNode.SelectSingleNode("//title").InnerText;
        var imgUrl = doc.DocumentNode.SelectSingleNode("//meta[@property='og:image']").Attributes["content"].Value;
        var mainText = doc.DocumentNode.SelectSingleNode("//div[@id='readInner']").InnerText;
    }
    

    【讨论】:

    • 抱歉,如果您使用 HtmlAgilityPack,为什么还要使用 NReadability?
    • nReadability 的“文档”似乎表明它只是一个漂亮的 HTML 打印机(HAP 也有这个功能)。
    • @Oded,请在评论之前测试上述代码。我以前用过它,知道它的作用。它确实做到了 OP 想要的(“清理 html 代码”
    • 无意冒犯 - 缺少有关该库的文档, 在网站上看到的所有内容都表明它是一台漂亮的打印机。我似乎也错过了 OP 在问题中要求“清理 html 代码”的位置。
    【解决方案2】:

    使用HTML Agilty Pack - 它是一个用于 .NET 的开源 HTML 解析器。

    什么是 Html Agility Pack (HAP)?

    这是一个敏捷的 HTML 解析器,它构建一个读/写 DOM 并支持普通的 XPATH 或 XSLT(实际上你不必了解 XPATH 或 XSLT 就可以使用它,不用担心......)。它是一个 .NET 代码库,可让您解析“网络之外”的 HTML 文件。解析器对“真实世界”格式错误的 HTML 非常宽容。对象模型与 System.Xml 的提议非常相似,但用于 HTML 文档(或流)。

    您可以使用它来查询 HTML 并提取您想要的任何数据。

    【讨论】:

    • HAP 很酷,但我更喜欢 ScrapySharp - 基于 HTML Agility Pack 构建。它向 HAP 添加了对 CSS 选择器的支持。 nuget.org/packages/ScrapySharp
    • 我已经厌倦了使用它,但我无法获得想要的结果。你能指导我如何提取文章类型的东西(即文本,包括带有代码样式和图像的示例代码)。
    • @petro.sidlovskyy - 不错!不知道它,当我下次需要抓取 HTML 时可能会开始使用它。
    • @furqan.safdar - “无法获得预期的结果”不是很具有描述性。您需要给出比这更好的定义。
    • @furqan.safdar - 这已经很清楚了。不清楚的是你遇到了什么问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2016-02-07
    • 2011-03-03
    • 2014-01-13
    相关资源
    最近更新 更多