节点请求,cheerio - 如何处理额外的ajax负载

Dil*_*Dag 2 ajax request node.js web-scraping cheerio

我正在使用node,request和cheerio来从html页面获取数据.这没有任何问题,但是一个页面通过ajax加载额外的数据来填充不同的容器.初始请求完成后,这些是空的和未定义的,我该如何处理这个最好的方法?

request(url, function (error, response, html) {
if (!error && response.statusCode == 200) {

    var $ = cheerio.load(html);

    forum_url = $('.this.url.is.loaded.separatly.with.ajax'[1].attr('href');
}
});
Run Code Online (Sandbox Code Playgroud)

小智 5

Cheerio并没有真正考虑到ajax.如果你能够提取需要下载的网址,你可能会不得不维护多个单独的$对象,因为它是不可能的,他们可以很容易地合并.

通常,如果您需要在已删除的页面上执行javascript,我们将转向Phantom.js.Phantom是一个无头浏览器,你可以使用javascript控制它,这很酷.

你可以在这里查看一些Phantom.js网页抓取代码:http://code4node.com/snippet/web-scraping-with-node-and-phantomjs