我想使用 c# 获取网页的 HTML 源代码,就像使用 IE9、Chrome、Firefox 等不同浏览器访问它一样。有没有办法做到这一点?
问问题
5087 次
2 回答
2
您可以通过多种方式获取 HTML 源代码。我的首选方法是HTML Agility Pack
HtmlDocument doc = new HtmlDocument();
doc.Load("http://domain.com/resource/page.html");
doc.Save("file.htm");
.NET 中的WebClient也很好用。
WebClient myWebClient = new WebClient();
myWebClient.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"); // If you need to simulate a specific browser
byte[] myDataBuffer = myWebClient.DownloadData (remoteUri);
string download = Encoding.ASCII.GetString(myDataBuffer);
// This is verbatim from MSDN... unfortunately their example does not dispose
// of myWebClient (it implements IDisposable). You should wrap use of a WebClient
// in a using statement.
http://msdn.microsoft.com/en-us/library/xz398a3f.aspx
你得到的 HTML 就是你得到的。给定的浏览器决定了它的构成(除非服务器为不同的用户代理呈现不同的 HTML)。
如果您确实需要显式设置用户代理(以模拟不同的浏览器),以下帖子显示了如何执行此操作:
http://blog.abodit.com/2010/03/a-simple-web-crawler-in-c-using-htmlagilitypack/
(此链接还使用 HTML Agility Pack 实现了一个简单的网络爬虫)
于 2012-06-29T03:10:47.953 回答
1
我不是 C# 专家,但假设无论哪个“浏览器”访问 url,html 都是相同的,您可以使用 System.Net.WebClient(如果您只需要简单的控制)或 HttpWebRequest(如果您需要更高级的控制)
对于 WebClient,只需创建一个实例并调用其中一个 Download* 方法:
var cli = new WebClient();
string data = cli.DownloadString("http://www.stackoverflow.com");
于 2012-06-29T03:12:35.603 回答