从node.js中的外部网页获取所有图像URL的最佳方法是什么
从节点,我想从外部网页获取所有图像URL(从node.js中的外部网页获取所有图像URL的最佳方法是什么,node.js,Node.js,从节点,我想从外部网页获取所有图像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'>
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'>
我可以处理这个问题,但我想知道是否有更简单的方法?我最终使用了
请求
节点模块以及cheerio
和url
。以下是我最后做的事情(请注意,这是mvp代码,而不是生产质量):
我想请求+欢呼可能是最简单的方式。您也可以使用jquery+jsdom代替,这些相对绝对的方法能帮助您吗?看起来node的模块可以在这里实现这个功能。简单的事情是,你可以试试无头浏览器,用NodeJ试试Puppeter
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);
}
}));
}
});
});