如何阅读c#中的网站内容?

Aze*_*ram 7 html c# webclient httpwebrequest streamreader

我想阅读没有HTML标签和标题的网站文本.我只需要在Web浏览器中显示的文本.

我不需要这样

<html>
<body>
bla bla </td><td>
bla bla 
<body>
<html>
Run Code Online (Sandbox Code Playgroud)

我只需要文本"bla bla bla bla".

我已经使用webclient和httpwebrequest方法来获取HTML内容并拆分接收的数据,但这是不可能的,因为如果我更改网站,标签可能会更改.

那么有没有办法只能以网页方式获取网站上显示的文字?

Tig*_*ran 5

您需要使用特殊的HTML解析器.获取此类非常规语言内容的唯一方法.

请参阅:在C#中解析html的最佳方法是什么?


yam*_*men 4

以下是使用HtmlAgilityPack 的方法。

首先是您的示例 HTML:

var html = "<html>\r\n<body>\r\nbla bla </td><td>\r\nbla bla \r\n<body>\r\n<html>";
Run Code Online (Sandbox Code Playgroud)

加载它(在本例中作为字符串):

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
Run Code Online (Sandbox Code Playgroud)

如果从网络获取,类似:

var web = new HtmlWeb();
var doc = web.Load(url);
Run Code Online (Sandbox Code Playgroud)

现在仅选择具有非空白的文本节点并修剪它们。

var text = doc.DocumentNode.Descendants()
              .Where(x => x.NodeType == HtmlNodeType.Text && x.InnerText.Trim().Length > 0)
              .Select(x => x.InnerText.Trim());
Run Code Online (Sandbox Code Playgroud)

如果您愿意,您可以将其作为单个连接字符串获取:

String.Join(" ", text)
Run Code Online (Sandbox Code Playgroud)

当然,这只适用于简单的网页。任何复杂的东西也会返回带有您明显不想要的数据的节点,例如 javascript 函数等。