现在我有一个看起来像这样的函数:

static getPageImg(url) {
    return new Promise((resolve, reject) => {
        //get our html
        axios.get(url)
        .then(resp => {
            //html
            const html = resp.data;
            //load into a $
            const $ = cheerio.load(html);
            //find ourself a img
            const src = url + "/" + $("body").find("img")[0].attribs.src;
            //make sure there are no extra slashes
            resolve(src.replace(/([^:]\/)\/+/g, "$1"));
        })
        .catch(err => {
           reject(err);
        });
    });
}


这将处理页面使用相对路径链接到图像且主机名与提供的URL相同的一般情况。

然而,
大多数情况下,URL方案会更复杂,例如,URL可能是stackoverflow.com/something/asdasd,而我需要的是获取stackoverflow.com/someimage链接。或更有趣的情况是使用CDN并且图像来自单独的服务器。例如,如果我想链接到imgur ill上的某个东西,请提供一个链接:http://imgur.com/gallery/epqDj。但是图像的实际位置在网站的http://i.imgur.com/pK0thAm.jpg子域中。更有趣的是,如果我要获取src属性,我将拥有:“ // i.imgur.com/pK0thAm.jpg”。

现在,我想必须有一种获取此图像的简单方法,因为浏览器可以非常快速,轻松地执行“在新选项卡中打开窗口”操作,因此我想知道是否有人除了编写大型函数外,还知道一种简便的方法可以处理所有这些情况。

谢谢!

最佳答案

这是我的功能,最终使用URL类型内置的节点为我的所有测试用例工作。我只需要使用resolve函数。

static getPageImg(url) {
    return new Promise((resolve, reject) => {
        //get our html
        axios.get(url)
        .then(resp => {
            //html
            const html = resp.data;
            //load into a $
            const $ = cheerio.load(html);
            //find ourself a img
            const retURL = nodeURL.resolve(url,$("body").find("img")[0].attribs.src);
            resolve(retURL);
        })
        .catch(err => {
           reject(err);
        });
    });
}

关于html - 如何在所有情况下使用cheerio获取给定页面上图像的URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43360821/

10-11 22:44
查看更多