因此,我想使用request-promise来拉动页面的正文。打开页面后,我想收集所有标签并获取这些图像的src数组。假设页面上的src属性同时具有相对路径和绝对路径。我想要页面上的img的绝对路径数组。我知道我可以使用一些字符串操作和npm路径来构建绝对路径,但是我想找到一种更好的方法。
var rp = require('request-promise'),
cheerio = require('cheerio');
var options = {
uri: 'http://www.google.com',
method: 'GET',
resolveWithFullResponse: true
};
rp(options)
.then (function (response) {
$ = cheerio.load(response.body);
var relativeLinks = $("img");
relativeLinks.each( function() {
var link = $(this).attr('src');
console.log(link);
if (link.startsWith('http')){
console.log('abs');
}
else {
console.log('rel');
}
});
});
结果
/logos/doodles/2016/phoebe-snetsingers-85th-birthday-5179281716019200-hp.gif
rel
要获得场景中的图像链接数组,可以使用url.resolve
解析带有请求URLsrc
的img
标记的相对属性,从而得到一个绝对URL。该数组传递到最终的then
; 您可以根据需要使用数组执行其他操作console.log
。
var rp = require('request-promise'),
cheerio = require('cheerio'),
url = require('url'),
base = 'http://www.google.com';
var options = {
uri: base,
method: 'GET',
resolveWithFullResponse: true
};
rp(options)
.then (function (response) {
var $ = cheerio.load(response.body);
return $('img').map(function () {
return url.resolve(base, $(this).attr('src'));
}).toArray();
})
.then(console.log);
这url.resolve
将适用于绝对URL或相对URL(从请求URL解析为相对路径时,它将解析并返回组合的绝对URL,但从请求URL解析为绝对URL时,它将仅返回绝对URL)。例如,img
在google上具有/logos/cat.gif
和https://test.com/dog.gif
作为src
属性的标签,这将输出:
[
'http://www.google.com/logos/cat.gif',
'https://test.com/dog.gif'
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句