如何从Node.js访问输出'请求模块

时间:2014-04-24 07:54:58

标签: node.js request web-scraping cheerio

有几个教程介绍如何使用requestcheerio抓取网站。在这些教程中,他们将输出发送到控制台或使用fs将DOM流式传输到文件中,如下例所示。

request(link, function (err, resp, html) {
  if (err) return console.error(err)
  var $ = cheerio.load(html),
      img = $('#img_wrapper').data('src');
  console.log(img);
}).pipe(fs.createWriteStream('img_link.txt'));

但是如果我想在脚本执行期间处理输出怎么办?如何访问输出或将其发送回调用函数?当然,我可以加载img_link.txt并从那里获取信息,但这将是昂贵的,并没有任何意义。

2 个答案:

答案 0 :(得分:1)

一起移除管道。

request(link, function (err, resp, html) {
  if (err) return console.error(err)

  var $ = cheerio.load(html);
  var img = $('#img_wrapper').data('src'); // the var img now has the src attr of some image

  return img; // Will return the src attr
});

<强>更新

根据您的意见,您的请求函数似乎正在按预期工作,但问题是从另一个模块访问数据。

我建议你阅读Purpose of Node.js module.exports and how you use it

这也是描述需要导出的工作方式的good resource article

  • 将上面的代码放在模块中
  • 使用module.exports
  • 将模块放在另一个文件中

答案 1 :(得分:1)

您可以将请求包装在将使用html

回调的函数中
function(link, callback){
  request(link, function(err, im, body){
    callback(err, body);
  });
});

然后将其分配给exports并在任何其他模块中使用。