使用jsoup对html文档进行解析,每个html标签(Element)、文本(TextNode)都抽象成一个Node,每一个Node都含有childNodes()方法来枚举其包含的Node,这里通过递归来提取文本内容,对于非TextNode的Node,我们遍历其孩子Node,对于TextNode我们直接返回结果。
其中jsoup的gradle依赖为
compile 'org.jsoup:jsoup:1.11.3'
HtmlUtils
package com.app.util; import java.util.ArrayList; import java.util.List; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.nodes.Node; import org.jsoup.nodes.TextNode; import org.jsoup.select.Elements; import com.alibaba.druid.util.StringUtils; public class HtmlUtils{ /** * @Title: html2Str * @Description: TODO(使用jsoup解析html并转化为提取字符串) * @param html * @return String * @date 2020年5月7日 下午6:57:37 */ public static String html2Str(String html){ if(StringUtils.isEmpty(html)) { return ""; } Document doc = Jsoup.parse(html); return extractText(doc); } /** * @Title: html2ImgSrc * @Description: TODO(使用jsoup解析html并抽取其中所有img标签中的src) * @param html * @return List<String> * @date 2020年5月7日 下午6:56:47 */ public static List<String> html2ImgSrc(String html){ if(StringUtils.isEmpty(html)) { return null; } List<String> list=new ArrayList<String>(); Document doc = Jsoup.parse(html); Elements elements=doc.select("img"); for (int i = 0; i < elements.size(); i++) { Element jpg=elements.get(i); String attr = jpg.attr("src"); list.add(attr); } return list; } private static String extractText(Node node){ /* TextNode直接返回结果 */ if(node instanceof TextNode){ return ((TextNode) node).text(); } /* 非TextNode的Node,遍历其孩子Node */ List<Node> children = node.childNodes(); StringBuffer buffer = new StringBuffer(); for (Node child: children) { buffer.append(extractText(child)); } return buffer.toString(); } }