如何使用Java的jsoup库提取HTML标签中的href、文本及日期数据
Jsoup提取Alfresco目录列表字段实现方案
前提说明
Alfresco WebDAV返回的目录列表HTML默认采用表格布局,每一行对应一个目录/文件条目,首列存放带链接的资源名称,专门的日期列存放修改时间,以下代码基于该通用结构编写,若你的实际HTML列顺序有差异,调整列索引即可适配。
依赖引入(Maven示例)
<dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.14.3</version> </dependency>
核心实现代码
import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class AlfrescoDirParser { public static void main(String[] args) throws IOException { // 方式1:解析本地存储的HTML字符串 String html = "你的Alfresco目录HTML代码内容"; Document doc = Jsoup.parse(html); // 方式2:直接请求WebDAV地址解析,替换为实际地址,需认证可在header中加Authorization参数 // Document doc = Jsoup.connect("http://你的服务地址/alfresco/webdav/rep/") // .header("Authorization", "Basic 你的认证串") // .get(); List<Map<String, String>> resultList = new ArrayList<>(); // 选择表格所有行,跳过第一行表头,可替换为更精准的选择器适配你的页面结构 Elements rows = doc.select("table tr:gt(0)"); for (Element row : rows) { // 提取a标签相关字段,默认a在第一列,可调整td索引适配实际结构 Element link = row.selectFirst("td:first-child a"); if (link == null) { continue; // 跳过无有效链接的行 } String href = link.attr("href"); String name = link.text(); // 提取修改日期,默认日期在第二列,可调整索引适配实际结构 String modifyDate = row.select("td").get(1).text(); // 存入结果集 Map<String, String> item = new HashMap<>(); item.put("href", href); item.put("name", name); item.put("modifyDate", modifyDate); resultList.add(item); } // 打印验证结果 for (Map<String, String> item : resultList) { System.out.println("资源链接:" + item.get("href")); System.out.println("资源名称:" + item.get("name")); System.out.println("修改时间:" + item.get("modifyDate")); System.out.println("------------------------"); } } }
适配调整说明
- 如果目标表格有专属id或class,将
table tr:gt(0)替换为更精准的选择器,比如table#dirList tr:gt(0),避免匹配到页面其他无关表格 - Basic认证场景下,可先将
用户名:密码做Base64编码,拼接为Basic 编码结果填入header的Authorization字段即可
内容的提问来源于stack exchange,提问作者user15973370
相关产品推荐
相关产品推荐

