.net自带的HttpWebRequest并不支持渲染js,如果网站使用了js产生,根本无法抓取到。
以前也对抓取研究过,本以为winform的WebBrowser可以,网上的另一种解决方案使asp.net可以抓取执行过js后的页面,见http://blog.uoolo.com/Article/75,结果都不行,原谅我当时并没有测试。
只好重新研究一下,百度到基本上是关于Java呀,Python呀等等的js渲染抓取,关于.net的很少,基本上也没啥用,好不容易找到一篇文章,帮我解决了大难题,http://www.cnblogs.com/zcjiang/p/3579879.html,关于如何使用NHtmlUnit抓取js生成的页面,NHtmlUnit其实就是Java版HtmlUnit移植过来的。使用VS的程序包管理控制台安装,http://nugetmusthaves.com/Package/NHtmlUnit,一句搞定:Install-Package NHtmlUnit。
_ueditor_page_break_tag_
using NHtmlUnit;
using NHtmlUnit.Html;
using System.Threading;
public string getWebBrowserHtml(string url)
{
WebClient client = new WebClient(BrowserVersion.CHROME);
client.Options.JavaScriptEnabled = true;
client.Options.CssEnabled = true;
client.Options.ThrowExceptionOnScriptError = false;
client.Options.Timeout = 5000;
HtmlPage page = client.GetHtmlPage(url);
Thread.Sleep(3000);
string xml = page.AsXml();
return xml;
//return "";
}
client.Options.JavaScriptEnabled = true;关键了。
博客园有回答:PhantomJS也是一种选择,有空再研究。 http://q.cnblogs.com/q/53566/
其他解决方案:seleniumhq http://www.guojl.com/article/55/
HttpClient + jsoup是个什么鬼
Java版的使用范例:http://my.oschina.net/apdplat/blog/399090
2016-03-04补充:
WebClient的使用
Eval动态编译js输出页面,防止抓取