从许多HTML页面中提取文本和标题的有效方法

时间:2016-05-07 11:43:43

标签: c# html matlab html-agility-pack

我想知道从许多(1000个html页面)中提取文本的有效方法,并将从每个页面提取的每个文本存储为自己的html页面名称,

方法是尽可能地提取那些正在讨论的页面。 我已经过测试并看到了一些问题和答案..但它对于提取纯文本效率不高,

以下示例..有很多信息,如链接和格式代码,标签和其他不符合我的兴趣..所以对于这个页面

<html>
    <title>Sport today and tomorrow </title>
    <body>
           <h1> sport players.</h1>
           something....
           <h3> sport plays </h3>
           <img src="sport.jpg"/>
    </body>
</html>

因此提取的信息存储在具有该页面名称的文本文件中,并且仅包含: 页面标题=运动...... content = sport ....

我的问题是有任何工具或软件可以做到吗? 什么是字段处理这个问题的名称..像DOM或其​​他一些?

我要感谢任何人可以给我一个关于这个问题的说明。

我的编程语言是C#..和Matlab谢谢

1 个答案:

答案 0 :(得分:0)

使用AngleSharp,您可以通过IHtmlDocument.Title获取标题元素,并使用LINQ OfType<IHtmlHeadingElement>()获取标题元素。以下是控制台应用程序中的示例:

using AngleSharp.Dom.Html;
using AngleSharp.Parser.Html;

....

var raw = @"<html>
    <title>Sport today and tomorrow </title>
    <body>
           <h1> sport players.</h1>
           something....
           <h3> sport plays </h3>
           <img src=""sport.jpg""/>
    </body>
</html>";
var parser = new HtmlParser();
var document = parser.Parse(raw);

var title = document.Title;
var headings = document.All
                       .OfType<IHtmlHeadingElement>()
                       .Select(h => h.TextContent.Trim())
                       .ToList();
Console.WriteLine(title);
Console.WriteLine();
foreach (var heading in headings)
{
    Console.WriteLine(heading);
}

输出

Sport today and tomorrow

sport players.
sport plays