2010-11-25 64 views
1

我想用WebRequest類,就像我們所得到的,當我們使用webbrowser1.Document.Body.InnerText獲得純文本的反應得到明文。我試了下面的代碼如何從WebRequest類在C#

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工具包考慮,任何人都可以提出任何更好的選擇。

+0

@SLaks的建議,我檢查了HTML實用程序包,任何人都可以提出一個簡單的解決方案,而不使用第三方庫。 謝謝 – Vamsi 2010-11-25 18:47:59

+0

看看這個SO回答使用Html Agility Pack - http://stackoverflow.com/questions/2785092/c-htmlagilitypack-extract-inner-text/2785108#2785108 – 2010-11-25 18:57:36

+0

謝謝大家的HTML實用工具包建議,我肯定會考慮,但這樣做,任何人可以提出任何其他的方式做到這一點之前。 來到Webclient類,我已經改變了我的代碼 – Vamsi 2010-11-25 19:03:30

回答

3

您正在尋找的HTML Agility Pack,可解析HTML沒有IE瀏覽器。
它有一個InnerText屬性。


要回答你的問題,你需要等待瀏覽器解析文本。


順便說一句,你應該使用WebClient類而不是WebRequest

+0

謝謝你的HTML敏捷包,我會檢查一個 – Vamsi 2010-11-25 18:45:20

1

使用Web客戶端:

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

這會給你的網站的內容。然後你可以使用HtmlAgilityPack來解析結果。

-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(); 
}