【问题标题】:How to use cheerio to get the URL of an image on a given page for ALL cases对于所有情况,如何使用cheerio 获取给定页面上图像的 URL
【发布时间】:2017-09-07 17:16:35
【问题描述】:

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

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 的某些内容,请给出如下链接:http://imgur.com/gallery/epqDj。但图片的实际位置是http://i.imgur.com/pK0thAm.jpg 网站的子域。更有趣的是,如果我要获得 src 属性,我将拥有:“//i.imgur.com/pK0thAm.jpg”。

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

谢谢!

【问题讨论】:

    标签: html node.js url web-crawler cheerio


    【解决方案1】:

    这是我的函数,它最终适用于我所有使用 URL 类型内置节点的测试用例。我只需要使用解析功能。

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

    【讨论】:

    • 什么是nodeURL?是图书馆吗?
    猜你喜欢
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多