2010-04-13 55 views
0

我正在研究一些應用程序,我想試着讓它工作,但遇到了問題。我在下面的代碼中使用Google網頁替換了原始的抓取目標,僅用於測試。似乎我的下載並沒有得到所有的東西,我注意到body和html標籤缺少它們的關閉標籤。我如何獲得它下載的一切?什麼錯我的示例代碼:C#WebClient只下載部分html

string filename = "test.html"; 

WebClient client = new WebClient();    
string searchTerm = HttpUtility.UrlEncode(textBox2.Text);    
client.QueryString.Add("q", searchTerm); 
client.QueryString.Add("hl", "en"); 
string data = client.DownloadString("http://www.google.com/search"); 

StreamWriter writer = new StreamWriter(filename, false, Encoding.Unicode); 
writer.Write(data); 
writer.Flush(); 
writer.Close(); 

回答

4

谷歌的網頁是HTML 5,這意味着BODYHTML標籤可以是自我封閉 - 這就是爲什麼谷歌會忽略這些(信不信由你,這樣可以節省他們的帶寬。)

See this article

您可以在「HTML/SGML」模式下編寫HTML5(它允許在XHTML之前省略HTML之類的結束標籤),也可以在遵循XML規則的「XHTML」中編寫HTML5,要求關閉所有標籤。

瀏覽器選擇解析頁面取決於您是否發送Content-type用於HTML/SGML語法的text/html的標題或用於XHTML語法的application/xhtml+xml。 (來源:HTML5 syntax - HTML vs XHTML

0

...谷歌的頁面沒有關閉標籤<body><html>。談論瘋狂的優化...

0

http://www.google.com/search沒有結束標籤。現在

+0

@walther:OP在抱怨沒有下載關閉標籤。我解釋說他們不在那裏下載。那怎麼不是答案? – 2012-08-23 23:52:00

+0

好吧,當你有一個問題「我怎樣才能在GridView中選擇一個項目?你回答「是的,你可以!」。你在這裏顯而易見地沒有任何進一步的解釋。這就是爲什麼我沒有找到你的帖子非常有用。這就是它;-)沒有什麼個人的。 – walther 2012-08-24 00:13:32

+0

@walther:不用擔心,我不會親自批評;我只是不同意你的評估。你的比喻不適合,因爲沒有結束標記對OP來說並不明顯,他們認爲他們的代碼在某種程度上放棄了它們。如果OP詢問Google爲什麼遺漏了這些標籤,那麼您的批評將是有根據的(但我不會以這種方式回答)。 – 2012-08-24 00:23:47