目录
前言
一、引入依赖
二、写demo
三、访问效果
总结
前言
有时候我们可能想获取页面的某些内容,就比如我,需要获取页面的favicon小图标,但是一个个手动去获取太麻烦了,想着能不能试试使用Java解决,一开始我想使用正则表达式来进行匹配处理,但是发现各各网站的路径格式不一样,匹配起来比较麻烦,后面我就发现了jsoup,这是一款Java的HTML解释器,我们可以像使用jquery的方式来使用它,方便便捷!下面给大伙献丑了~
一、引入依赖
首先我们需要引入 jsoup的依赖,这个是重点,另外的hutool是一个工具包,一个很全面的工具包,可以了解下,你会爱上它的!
org.jsoup
jsoup
1.14.3
cn.hutool
hutool-all
4.5.15
二、写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;
public class TestClass {
public static void main(String[] args) {
String faviconUrl = getContentTest("https://sgdygb.blog.csdn.net/");
System.out.println("faviconUrl = " + faviconUrl);
}
public static String getContentTest(String str) {
try {
// 去掉多余部分,保留域名部分
int i = StrUtil.indexOf(str, '/', StrUtil.indexOf(str, '.'));
String url = StrUtil.sub(str, 0, i);
// 假设输入的参数不携带协议,则拼接协议
if (!isHttpOrHttps(url)) {
url = StrUtil.format("https://{}", url);
}
// 发请求
Document document = Jsoup.connect(url).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("{}/{}",url , StrUtil.removePrefix(href, "/"));
} catch (IOException i) {
i.printStackTrace();
}catch (Exception e){
e.printStackTrace();
return "链接无法识别";
}
return "";
}
public static boolean isHttpOrHttps(String url) {
String lowerCaseStr = url.toLowerCase();
return lowerCaseStr.startsWith("http:") || lowerCaseStr.startsWith("https:");
}
}
首先我们需要引入 jsoup的依赖,这个是重点,另外的hutool是一个工具包,一个很全面的工具包,可以了解下,你会爱上它的!
代码已提供,代码上也有相关的注释,因为每个网站的格式可能会不一样,做了一些你看起来可能多余的处理,这是我测试了多个网站之后改善出来的结果,你可以试着让它更加完善,也希望你能向我提出来,我也想知道更好的方案!
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;
public class TestClass {
public static void main(String[] args) {
String faviconUrl = getContentTest("https://sgdygb.blog.csdn.net/");
System.out.println("faviconUrl = " + faviconUrl);
}
public static String getContentTest(String str) {
try {
// 去掉多余部分,保留域名部分
int i = StrUtil.indexOf(str, '/', StrUtil.indexOf(str, '.'));
String url = StrUtil.sub(str, 0, i);
// 假设输入的参数不携带协议,则拼接协议
if (!isHttpOrHttps(url)) {
url = StrUtil.format("https://{}", url);
}
// 发请求
Document document = Jsoup.connect(url).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("{}/{}",url , StrUtil.removePrefix(href, "/"));
} catch (IOException i) {
i.printStackTrace();
}catch (Exception e){
e.printStackTrace();
return "链接无法识别";
}
return "";
}
public static boolean isHttpOrHttps(String url) {
String lowerCaseStr = url.toLowerCase();
return lowerCaseStr.startsWith("http:") || lowerCaseStr.startsWith("https:");
}
}
打印结果:
faviconUrl = https://g.csdnimg.cn/static/logo/favicon32.ico
三、访问效果
让我们来查看一下测试的效果:
让我们来查看一下测试的效果:
总结
写在最后,如果有不明白的地方欢迎评论区导论,也许你的问题解决了别人的疑问呢?
点赞,你的认可是我创作的动力 !
收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富!



