2011-08-03 21 views
2

場景:只讀標題和/或HTML文件的META標籤,無需加載完整的HTML文件

我需要解析數以百萬計的HTML文件/頁面(實際上,我可以)&然後只讀只有標題或者它元部分&它轉儲到數據庫

什麼我做的是使用System.Net.WebClient類的DownloadString(url_path)下載&然後通過LINQ保存到數據庫附加到SQL

但這DownloadString功能給了我完整的HTML源代碼,我Ĵ只需要標題部分& META標籤部分。

任何想法,只下載那麼多的內容?

回答

1

我認爲你可以用這個URL打開一個流,並使用這個流來讀取第一個x字節,我不能告訴確切的數字,但我認爲你可以將它設置爲合理的數字來獲得標題和描述。

HttpWebRequest fileToDownload = (HttpWebRequest)HttpWebRequest.Create("YourURL"); 
      using (WebResponse fileDownloadResponse = fileToDownload.GetResponse()) 
      { 
       using (Stream fileStream = fileDownloadResponse.GetResponseStream()) 
       { 
        using (StreamReader fileStreamReader = new StreamReader(fileStream)) 
        { 
         char[] x = new char[Number]; 
         fileStreamReader.Read(x, 0, Number); 
         string data = ""; 
         foreach (char item in x) 
         { 
          data += item.ToString(); 
         } 
        } 
       } 
      } 
+0

你能給我一個關於如何獲得Stream的例子嗎?它會對性能有幫助嗎? – Pratik

+0

我更新了代碼,我想告訴你關於 –

0

您可以用動詞「HEAD」中的HttpWebRequest返回響應頭(不元素,爲了獲得與元數據的完整的元素,你需要下載頁面,並解析出元數據你想要的。

System.Net.WebRequest.Create(uri) { Method = "HEAD" }; 
+0

的想法這是否對性能有幫助,或者在後臺可能會下載整個頁面? – Pratik

+2

'HEAD'只返回響應頭;這意味着如果HTML元標記不屬於響應頭部分,則HTML元標記不會被覆蓋,因爲HTML在響應正文中。 – BoltClock

+1

這不起作用,因爲它只返回http頭。不是html的頭部分:http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 – Peter

0

我懷疑Web客戶端將首先嚐試下載整個頁面,在這種情況下,你可能需要一個原始客戶端套接字。發送相應的HTTP請求(手動,因爲你正在使用原始套接字),開始讀取響應(不會立即),並在足夠閱讀時終止連接,但其餘部分可能已經發送從服務器到您的PC,無論您是否需要,都可以節省帶寬。

取決於你想要它,許多一半體面的網站有一個自定義的404頁面,這比一個已知的頁面簡單得多。是否有這些信息是另一回事。

相關問題