1

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

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从那里加载和获取信息,但这会很昂贵而且没有意义。

4

2 回答 2

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
});

更新

根据您的评论,您的请求功能似乎按预期工作,但问题在于从另一个模块访问数据。

我建议您阅读Node.js module.exports 的目的以及如何使用它

这也是一篇很好的资源文章,描述了requireexport是如何工作的。

  • 将上面的代码放在一个模块中
  • 使用module.exports
  • 需要在另一个文件中的模块
于 2014-04-24T08:09:12.540 回答
1

您可以将请求包装在一个将回调的函数中html

function(link, callback){
  request(link, function(err, im, body){
    callback(err, body);
  });
});

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

于 2014-04-24T08:20:15.927 回答