随机抽取数据

时间:2018-05-30 04:26:20

标签: javascript web-scraping nightmare

这里有点奇怪的事情,想知道是否有人可以告诉我我忽略了什么。 我的应用程序设置与节点一起使用nightmare.js从我的自定义函数生成的随机时间内从网站上抓取数据。

问题是console.log()会在setTimeout内被调用,但console.log只会在我的结果回调中被调用一次,而不会在每个随机区间内被调用?

这是我在终端中输出的输出:

Server started PORT:3000
SHOULD HAVE SCRAPED?
scraped successfully!Tue May 29 2018 21:15:26 GMT-0700 (PDT)
SHOULD HAVE SCRAPED?
SHOULD HAVE SCRAPED?
SHOULD HAVE SCRAPED?

这是我的剧本:

  function randomIntFromInterval(min,max) {
   return Math.floor(Math.random()*(max-min+1)+min);
  }

  // Call the scrape function to get new data at a random time between two bounds
  function scrapeAtRandomInterval(min, max) {
    var rand = randomIntFromInterval(min, max);
    setTimeout(function() {
      scrape(); 
      console.log('SHOULD HAVE SCRAPED?');
      scrapeAtRandomInterval(min, max);  
    }, rand);
  }
  scrapeAtRandomInterval(1000, 10000);

  function scrape() {
    nightmare.goto('SOME WEBSITE') 
      .wait(2000)
      // wait 2 seconds so page is guaranteed to be fully loaded

      .evaluate(function() {
        var data = [];
        ... gather data from DOM ...
        return data
      })

      .end()
      .then(function(result) {
        console.log('scraped successfully!' + new Date());
      })
  }

我知道我得到了正确的数据,但应该在每个时间间隔内抓取新内容。我认为这个问题可能与梦魇.wait方法有关吗?

0 个答案:

没有答案