2

从节点,我想从外部网页获取所有图像 url(src来自标签的属性)。img

我从考虑 phantonjs 开始,但不喜欢它没有真正集成到节点中(即它在外部进程中运行)。

接下来,我尝试使用请求模块和cheerio。这很好用,除了我必须处理相对图像 url。例如

<img src='http//example.com/i.jpg'>
<img src='/i.jpg'>
<img src='i.jpg'>
<img src='../images/i.jpg'>

我可以解决这个问题,但我想知道是否有更简单的方法?

4

1 回答 1

8

我最终将requestnode 模块与cheerioand一起使用url。这是我最终做的(请注意,这是 mvp 代码,而不是生产质量):

app.get('/scrape-images', function(req, res) {
  request(req.query.url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
      var $ = cheerio.load(body);
      var reqUrl = url.parse(req.query.url);

      res.send($('img').map(function(i, e) {
        var srcUrl = url.parse($(e).attr('src'));

        if (!srcUrl.host) {
          return url.resolve(reqUrl, srcUrl);
        } else {
          return url.format(srcUrl);
        }
      }));
    }
  });
});
于 2013-06-07T14:09:42.397 回答