2010-04-13 60 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