在C#.net中获取html页面的源代码时出错

时间:2015-10-07 07:45:33

标签: c# html .net xml

我想用WebClient获取C#.net中网站的所有源代码, 我用C#窗体创建一个简单的代码 我尝试其他网站,它的工作正确,但我需要这个网站,我无法得到它。 我的代码:

 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输入   片。请更正错误,然后单击“刷新”按钮,或   稍后再试。

           

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

     

? ^

有没有更好的方法呢?我怎么能解决它?

2 个答案:

答案 0 :(得分:0)

您还没有提供所有代码,因为看起来您将htmlCode字符串保存到临时文件,然后将内容提供给XML查看器。

无论如何,问题是从这个特定网站下载的HTML是HTML5标记 - 根据定义,HTML5并不是严格符合XML的。例如,它包含一行<meta name="viewport" content="width=device-width, initial-scale=1.0">,它不会被XML解析器占用。

因此,您可能希望更改下载HTML标记的方式。

此外,代码中还有另一个问题 - 您已经使用client.DownloadString方法获得了正确的文本,并且不需要以下两行代码将其更改为byte[],然后再返回{{ 1}}。

答案 1 :(得分: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中的每个链接并下载它们。