完成加载/重定向后刮取页面

时间:2016-06-24 05:15:03

标签: javascript node.js request cheerio

有问题的网页:

http://watch2gether.com/go#<link>

我需要能够在完全加载并重定向到最终目的地后抓取此页面。

现在,详细说明我的问题: 我一直在使用请求和cheerio试图刮掉页面,我已经成功了:

var searchTerm = 'https://www.youtube.com/watch?v=link';
var url = 'https://www.watch2gether.com/go#' + searchTerm;

request(url, function(err, resp, body){
  $ = cheerio.load(body);
  links = $('link'); //use your CSS selector here
  $(links).each(function(i, link){
    sleep.sleep(2);
    console.log($(link).text() + ':\n  ' + $(link).attr('href'));
  });
});

但是,它会在页面实际加载并重定向到最终页面之前返回每个href属性的值,因此它实际上是在抓取http://watch2gether.com/go#而不是http://watch2gether.com/rooms/

因为第二页只在第一页被请求后加载,我怎么能让我的代码刮掉第二页而不是第一页呢?

1 个答案:

答案 0 :(得分:0)

  

因为第二页只在第一页被请求后加载,我怎么能让我的代码刮掉第二页而不是第一页呢?

我并不完全理解你问题的这一部分。但是,我认为您遇到的是javascript的异步特性。

当你这样做时

  

$(links).each(function(i,link){   //你的附加代码在这里   })

javascript的异步性质根据$(&#39; links&#39;)上的CSS选择器获取所有链接。加载完所有链接后,它会开始执行其余代码,并相应地重定向/执行操作。

请检查事件循环或javascript的异步性。