跳过了js加载的部分,也就是说爬虫抓取的网页是残缺的,不完整的,下面可以看下博客园首页
从首页加载中我们看到,在页面呈现后,还会有5个ajax异步请求,在默认的情况下,爬虫是抓取不到这些ajax生成的内容的,
这时候要想获取就必须调用浏览器的内核引擎来下载这些动态页面,目前内核引擎三足鼎立。
Trident: 也就是IE内核,WebBrowser就是基于该内核,但是加载性内比较差。
Gecko: FF的内核,性能相对Trident较好。
WebKit: Safari和Chrome的内核,性能你懂的,在真实场景中还是以它为主。
好了,为了简单方便,这里使用WebBrowser来玩一把,使用WebBrowser我们要注意以下几点:
第一:因为WebBrowser在System.Windows.Forms 中,属于winform控件,所以我们要设置STAThread标记。
第二:winform是事件驱动的,而Console并不会去响事件,所有事件在windows的消息队列中等待执行,为了不让程序假死,
我们需要调用DoEvents方法转让控制权,让操作系统执行其他的事件。
第三:WebBrowser中的内容,我们需要用DomDocument来查看,而不是DocumentText。
判断一个动态网页是否加载完毕,一般常会有两种方法:
①:设定一个最大值,因为每当异步加载一个js,都会触发一个Navigating和DocumentCompleted事件,所以我们需要在此
处记录一下count值即可。
②: 当然除了通过判断最大值确定是否已经加载完成,我们还可以通过设定一个Timer来判断,比如3s,4s,5s后来查看
WEBbrowser 是否加载完毕。