我想用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' ...
? ^
有没有更好的方法呢?我怎么能解决它?
答案 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中的每个链接并下载它们。