使用jsoup对html文档进行解析,每个html标签(Element)、文本(TextNode)都抽象成一个Node,每一个Node都含有childNodes()方法来枚举其包含的Node,这里通过递归来提取文本内容,对于非TextNode的Node,我们遍历其孩子Node,对于TextNode我们直接返回结果。
其中jsoup的gradle依赖为
compile 'org.jsoup:jsoup:1.11.3'
下载地址: https://jsoup.org/download
HtmlUtils
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 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();
}
}