Java获取网站页面的favicon图标,顶栏的小图标

目录

前言 

一、引入依赖

二、写demo 

三、访问效果 

总结 


前言 

有时候我们可能想获取页面的某些内容,就比如我,需要获取页面的favicon小图标,但是一个个手动去获取太麻烦了,想着能不能试试使用Java解决,一开始我想使用正则表达式来进行匹配处理,但是发现各各网站的路径格式不一样,匹配起来比较麻烦,后面我就发现了jsoup,这是一款Java的HTML解释器,我们可以像使用jquery的方式来使用它,方便便捷!下面给大伙献丑了~

一、引入依赖

首先我们需要引入 jsoup的依赖,这个是重点,另外的hutool是一个工具包,一个很全面的工具包,可以了解下,你会爱上它的!

<!--Java的HTML解释器-->
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>

<!--工具包-->
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.5.15</version>
</dependency>

二、写demo 

代码已提供,代码上也有相关的注释,因为每个网站的格式可能会不一样,做了一些你看起来可能多余的处理,这是我测试了多个网站之后改善出来的结果,你可以试着让它更加完善,也希望你能向我提出来,我也想知道更好的方案!

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URL;

public class TestClass {

    public static void main(String[] args) {
        String faviconUrl = getFaviconUrl("https://baidu.com");
        System.out.println("faviconUrl = " + faviconUrl);
    }

    public static String getFaviconUrl(String str) {
        try {
            String url = StrUtil.trimToEmpty(str);
            // 假设输入的参数不携带协议,则拼接协议
            if (!isHttpOrHttps(str)) {
                url = StrUtil.format("https://{}", str);
            }
            URL urlObj = new URL(url);
            // 处理出新的url
            String newUrl = urlObj.getProtocol().concat("://").concat(urlObj.getHost());
            // 发请求
            Document document = Jsoup.connect(newUrl).get();
            // 筛选包含favicon图标的link标签
            Elements title = document.select("link[type=image/x-icon]");
            title = ObjectUtil.isEmpty(title) ? document.select("link[rel$=icon]") : title;
            // 获取favicon路径
            String href = title.attr("href");
            // 假设获取到的favicon路径已经包含了域名,则直接返回
            if (isHttpOrHttps(href) && StrUtil.containsAny(href, "favicon")) {
                return href;
            }
            // 拼接favicon的访问链接
            return StrUtil.format("{}/{}", newUrl, StrUtil.removePrefix(href, "/"));
        } catch (IOException i) {
            i.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
            return "链接无法识别";
        }
        return "";
    }

    /**
     * 检测是否http或https
     *
     * @param url URL
     * @return 检验是否是http或https
     */
    public static boolean isHttpOrHttps(String url) {
        String lowerCaseStr = url.toLowerCase();
        return lowerCaseStr.startsWith("http:") || lowerCaseStr.startsWith("https:");
    }
}

打印结果:

faviconUrl = https://baidu.com/favicon.ico

三、访问效果 

让我们来查看一下测试的效果:

总结 

写在最后,如果有不明白的地方欢迎评论区导论,也许你的问题解决了别人的疑问呢?

鸣谢 

感谢评论区西行呀的博客_CSDN博客-Calcite领域博主 揪出的bug,现已修复

🥇原创不易,还希望各位大佬支持一下!
👍点赞,你的认可是我创作的动力 !
🌟收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦境游子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值