7

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

我不需要这样

<html>
<body>
bla bla </td><td>
bla bla 
<body>
<html>

我只需要文本“bla bla bla bla”。

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

那么有什么方法可以仅以字谜方式获取网站中显示的文本吗?

4

5 回答 5

5

您需要使用特殊的 HTML 解析器。获取此类正则语言内容的唯一方法。

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

于 2012-05-14T07:48:27.627 回答
4

以下是使用HtmlAgilityPack的方法。

首先是您的示例 HTML:

var html = "<html>\r\n<body>\r\nbla bla </td><td>\r\nbla bla \r\n<body>\r\n<html>";

加载它(在这种情况下作为字符串):

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

如果从网上获取,类似:

var web = new HtmlWeb();
var doc = web.Load(url);

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

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

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

String.Join(" ", text)

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

于 2012-05-14T08:10:39.103 回答
0
public string GetwebContent(string urlForGet)
{
    // Create WebClient
    var client = new WebClient();
    // Download Text From web
    var text = client.DownloadString(urlForGet);
    return text.ToString();
}
于 2014-01-04T15:40:45.383 回答
-1

我认为这个链接可以帮助你。

/// <summary>
/// Remove HTML tags from string using char array.
/// </summary>
public static string StripTagsCharArray(string source)
{
char[] array = new char[source.Length];
int arrayIndex = 0;
bool inside = false;

for (int i = 0; i < source.Length; i++)
{
    char let = source[i];
    if (let == '<')
    {
    inside = true;
    continue;
    }
    if (let == '>')
    {
    inside = false;
    continue;
    }
    if (!inside)
    {
    array[arrayIndex] = let;
    arrayIndex++;
    }
}
return new string(array, 0, arrayIndex);
}
于 2012-05-14T08:09:29.343 回答
-2
// Reading Web page content in c# program
//Specify the Web page to read
WebRequest request = WebRequest.Create("http://aspspider.info/snallathambi/default.aspx");
//Get the response
WebResponse response = request.GetResponse(); 
//Read the stream from the response
StreamReader reader = new StreamReader(response.GetResponseStream()); 
//Read the text from stream reader
string str = reader.ReadLine();
for(int i=0;i<200;i++)
{
   str += reader.ReadLine();

}

Console.Write(str);
于 2012-05-14T07:47:49.593 回答