我要抓的页面是http://v.qq.com/page/k/9/2/k0188qdxy92.html,它在中国托管,因此加载需要一些时间。我想从这个页面得到的数据只是视频的播放次数,位于播放器的东南方,其选择器如图所示。
当您打开页面时,您会注意到此号码的显示时间晚于页面的其他部分。
var time1 = Date.now();
var time2;
var casper = require('casper').create();
var url = 'http://v.qq.com/page/k/9/2/k0188qdxy92.html';
casper.start(url,function(){
time2 = Date.now();
console.log((time2-time1)/1000);
this.echo(this.fetchText('.played_count em'));
})
casper.run();
这是我最初尝试过的。昨天它工作,但今天它只是打印一个空行并返回到shell。我认为这可能是因为号码是异步请求的,网络速度很慢。所以我在脚本中添加了一个等待时间:
var time1 = Date.now();
var time2;
var casper = require('casper').create();
var url = 'http://v.qq.com/page/k/9/2/k0188qdxy92.html';
casper.start(url);
casper.wait('6000',function(){
time2 = Date.now();
console.log((time2-time1)/1000);
this.echo(this.fetchText('.played_count em'));
})
casper.run();
你只能看到4次尝试中有1次我得到了正确的号码,这意味着我的代码正在运行,尽管其他因素阻止我总是获得正确的数据。它是什么?可能是网络,还是网页上的一些脚本?
我还尝试使用waitForSelector
和waitFor
,但每次收到waittimeout expired, exiting
等错误消息时,即使我将waitTimeout
选项设置为30000
}或60000
。我真的被困在这里了。虽然我是casperjs的新手,但我成功地从其他视频网站上删除了类似的数据。页面,这个有什么特别之处?