Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
节点请求,cheerio-如何处理额外的ajax负载_Ajax_Node.js_Web Scraping_Request_Cheerio - Fatal编程技术网

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

节点请求,cheerio-如何处理额外的ajax负载,ajax,node.js,web-scraping,request,cheerio,Ajax,Node.js,Web Scraping,Request,Cheerio,我使用节点request和cheerio从html页面获取数据。这并没有什么问题,但是一个页面通过ajax加载额外的数据来填充不同的容器。当初始请求完成时,这些是空的和未定义的,我如何以最佳方式处理它 request(url, function (error, response, html) { if (!error && response.statusCode == 200) { var $ = cheerio.load(html); forum_url =

我使用节点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');
}
});

Cheerio的设计并没有真正考虑ajax。如果能够提取需要下载的URL,则可能需要维护多个独立的
$
对象,因为它们不太可能轻松合并

通常,如果您需要执行在一个刮过的页面上找到的javascript,我们会转向Phantom.js。Phantom是一款无头浏览器,可以使用javascript控制,非常酷


您可以在此处查看一些Phantom.js web抓取代码:

因此,在使用cheerio.load之前,没有其他参数或方法保持并等待页面加载的额外时间?或者如果可以使用DOMNodeInserted事件。否则,是否有其他类似的节点模块?必须有一个解决办法,幻影不是我在这种情况下的选择。对其他人如何解决类似问题感兴趣。通过检查dom并查看是否有其他方法可以迭代数据来解决我的问题。我发现每个ajax调用都使用同一个url和不同的查询id,所以我将id存储在第一个循环中,然后使用异步序列遍历id。您的链接不再工作<代码>http://code4node.com/snippet/web-scraping-with-node-and-phantomjs