.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/

blob.png

其他解决方案:seleniumhq http://www.guojl.com/article/55/

blob.png

HttpClient + jsoup是个什么鬼

Java版的使用范例:http://my.oschina.net/apdplat/blog/399090

2016-03-04补充:

  1. WebClient的使用

  2. Eval动态编译js输出页面,防止抓取

最后修改:2015 年 07 月 06 日
如果觉得我的文章对你有用,请随意赞赏