casperjs:从页面中抓取项目查看号码时遇到问题

时间:2016-04-28 15:54:34

标签: javascript web-scraping timeout casperjs

我要抓的页面是http://v.qq.com/page/k/9/2/k0188qdxy92.html,它在中国托管,因此加载需要一些时间。我想从这个页面得到的数据只是视频的播放次数,位于播放器的东南方,其选择器如图enter image description here所示。

当您打开页面时,您会注意到此号码的显示时间晚于页面的其他部分。

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();

虽然打开页面很慢,但60秒就足够了。但是,这就是我得到的: enter image description here

你只能看到4次尝试中有1次我得到了正确的号码,这意味着我的代码正在运行,尽管其他因素阻止我总是获得正确的数据。它是什么?可能是网络,还是网页上的一些脚本?

我还尝试使用waitForSelectorwaitFor,但每次收到waittimeout expired, exiting等错误消息时,即使我将waitTimeout选项设置为30000 }或60000。我真的被困在这里了。虽然我是casperjs的新手,但我成功地从其他视频网站上删除了类似的数据。页面,这个有什么特别之处?

0 个答案:

没有答案