2015-10-07 105 views
0

我想在C#.net中使用WebClient获取所有网站源代码, 我在C#窗体中创建了一个简单代码 我尝试了其他网站工作正确,但我需要这个网站,我不能得到它。 我的代码:错误获取C#中的html页面源代码.net

using (WebClient client = new WebClient()) 
      { 
       client.Encoding = Encoding.UTF8; 
       client.Encoding = UTF8Encoding.UTF8; 
       string htmlCode = client.DownloadString("http://www.feleziran.ir/products/milgerd"); 
       byte[] bytes = Encoding.Default.GetBytes(htmlCode); 
       htmlCode = Encoding.UTF8.GetString(bytes); 
      } 

当我使用断点和获取视图中xml显示此消息htmlDode:

的XML页面无法显示使用样式 表无法查看XML输入。请更正错误,然后单击刷新按钮,或稍后再次尝试 。


在文档的顶层无效。处理资源时出错 'file:/// C:/Users/user/AppData/Local/Temp/VSD1.tmp.XML'...

?^

有没有更好的办法做到这一点?我怎么能解决它?

回答

0

Html文档可能并不总是有效的XML文件。所以你不应该用一个XML查看器来显示它。尝试保存并用浏览器打开它。

using (WebClient client = new WebClient()) 
{ 
     client.Encoding = Encoding.UTF8; 
     client.Encoding = UTF8Encoding.UTF8; 
     string htmlCode = client.DownloadString("http://www.feleziran.ir/products/milgerd"); 
     System.IO.File.WriteAllText("c:\\htmlfile.html", htmlCode); 

} 

反正你想达到什么,这还不够,你必须解析HTML中的各个环节,并下载它们。

0

您没有提供所有的代码,因为它似乎你那么htmlCode字符串保存到临时文件,然后供应内容到一个XML阅读器。

但无论如何,问题是,从该特定网站下载的HTML是HTML5标记 - 根据定义HTML5不是严格XML兼容。例如,它包含一行<meta name="viewport" content="width=device-width, initial-scale=1.0">,这将不会被XML解析器所接受。

所以,你可能想改变你如何查看下载的HTML标记。

此外,还有在代码中的另一个问题 - 你已经得到适当的文字与client.DownloadString方法,不需要的,它变成byte[]然后回到string代码如下两行。

+0

如此,从来没有我不能这样做呢?有没有办法获得页面的html代码? – MoHaMmAd

+0

你已经有了html代码,你只是不能使用XML查看器来查看它 - 而是使用一个简单的TextBox。 – Seany