1

我想使用 WebRequest 类获取纯文本,就像我们使用webbrowser1.Document.Body.InnerText. 我试过下面的代码

public string request_Resource()
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myurl);
   Stream stream = request.GetResponse().GetResponseStream();
   StreamReader sr = new StreamReader(stream);
   WebBrowser wb = new WebBrowser();
   wb.DocumentText = sr.ReadToEnd();
   return wb.Document.Body.InnerText;
}

当我执行这是得到一个NullReferenceException.

有没有更好的方法来获取纯文本。

注意:我不能直接使用 webbrowser 控件来加载网页,因为我不想处理所有在加载页面时多次触发的事件。

更新:根据建议,我已将代码更改为使用 WebClient 类而不是 WebRequest 我的代码现在看起来像这样

public string request_Resource()
{
   WebClient wc = new WebClient();
   wc.Proxy = null;
   //The user agent header is added to avoid any possible errors
   wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.10) Gecko/20100914 Firefox/3.6.10 ( .NET CLR 3.5.30729; .NET4.0C)");
   return wc.DownloadString(myurl);
}

我正在考虑使用 HTML Utility Pack,任何人都可以提出更好的选择。

4

3 回答 3

3

您正在寻找HTML Agility Pack,它可以在没有 IE 的情况下解析 HTML。
它有一个InnerText属性。


要回答您的问题,您需要等待浏览器解析文本。


顺便说一句,您应该使用WebClient类而不是WebRequest.

于 2010-11-25T18:38:45.113 回答
1

使用网络客户端:

public string request_Resource()
{
    WebClient wc = new WebClient();
    byte[] data = wc.DownloadData(myuri);
    return Encoding.UTF8.GetString(data);
}

这将为您提供网站的内容。然后你可以使用 HtmlAgilityPack 来解析结果。

于 2010-11-25T18:55:03.050 回答
-2

如果您只需要纯 HTML 文本,那么您已经编写了该代码。

public string request_Resource()
{
   HttpWebRequest request = (HttpWebRequest)WebRequest.Create(myurl);
   Stream stream = request.GetResponse().GetResponseStream();
   StreamReader sr = new StreamReader(stream);
   return sr.ReadToEnd();
}
于 2010-11-25T19:12:58.017 回答