2008-11-30 105 views
13

我正在重溫我的som舊代碼,並且偶然發現了一種基於網址獲取網站標題的方法。這不是真的,你會稱之爲穩定的方法,因爲它往往不能產生結果,有時甚至會產生不正確的結果。此外,有時它不能顯示標題中的一些字符,因爲它們是可選編碼。如何從c#獲取網站標題#

有沒有人對這個舊版本有改進建議?

public static string SuggestTitle(string url, int timeout) 
{ 
    WebResponse response = null; 
    string line = string.Empty; 

    try 
    { 
     WebRequest request = WebRequest.Create(url); 
     request.Timeout = timeout; 

     response = request.GetResponse(); 
     Stream streamReceive = response.GetResponseStream(); 
     Encoding encoding = System.Text.Encoding.GetEncoding("utf-8"); 
     StreamReader streamRead = new System.IO.StreamReader(streamReceive, encoding); 

     while(streamRead.EndOfStream != true) 
     { 
      line = streamRead.ReadLine(); 
      if (line.Contains("<title>")) 
      { 
       line = line.Split(new char[] { '<', '>' })[2]; 
       break; 
      } 
     } 
    } 
    catch (Exception) { } 
    finally 
    { 
     if (response != null) 
     { 
      response.Close(); 
     } 
    } 

    return line; 
} 

最後要注意的 - 我想代碼的運行速度爲好,因爲它阻止,直到頁面被取出,所以如果我能得到的只有網站標題,而不是整個頁面,它會很棒。

回答

33

更簡單的方法來獲取內容:

WebClient x = new WebClient(); 
string source = x.DownloadString("http://www.singingeels.com/"); 

一個更簡單,更可靠的方式來獲得標題:

string title = Regex.Match(source, @"\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value; 
0

爲了做到這一點,你需要做一些事情。

  • 使您的應用線程化,以便您可以在當時處理多個請求並最大化正在製作的HTTP請求的數量。
  • Durring異步請求,只下載你想拉回來的數據量,你也許可以做分析的數據,它回來找
  • 可能需要使用正則表達式來拉出標題名稱

我之前用SEO機器人完成了這個任務,並且我一次能夠處理將近10,000個請求。您只需確保每個Web請求都可以自包含在一個線程中。

+0

你肯定*不*想給每個請求其自己的線程如果你想一次處理10,000個請求! (所涉及的堆棧會讓你的內存像瘋了一樣。)使用異步API將並行化操作*不需要*爲每個請求花費一個線程。 – 2008-11-30 20:34:00

+0

這是一個有爭議的問題,因爲我只需要一次執行一個請求。速度的需要是因爲用戶正在等待答覆。 – 2008-11-30 20:51:28