HtmlCleaner是一款高效的HTML解析器,支持 Xpath语法提取HTML中的节点或元素。
添加依赖
net.sourceforge.htmlcleaner htmlcleaner 2.29使用
下面的方法还需要使用 Jsoup 从网络上面获取 HTML,然后用 HtmlCleaner 来进行解析。
@RequestMapping("ana")
public String analysis() throws IOException, XPatherException {
Document document = Jsoup.connect("http://bj.xxxxx.com/jzbiaoqian/").timeout(5000).get();
//Elements elements = document.select("div#list-job-id");
String html = document.html();
HtmlCleaner htmlCleaner = new HtmlCleaner();
TagNode tagNode = htmlCleaner.clean(html);
Object[] ns = tagNode.evaluateXPath("//div[@id='list-job-id']//dt//a");
TagNode dlnode = ((TagNode)ns[0]);
String url = dlnode.getAttributeByName("href");
Document document1 = Jsoup.connect(url).timeout(5000).get();
String html1 = document1.html();
HtmlCleaner htmlCleaner1 = new HtmlCleaner();
TagNode tagNode1 = htmlCleaner1.clean(html1);
Map<String,String> map = new HashMap<>();
Object[] rs = tagNode1.evaluateXPath("//div[@class='d-c-left-hear']/h1") ;
Object[] rs2 = tagNode1.evaluateXPath("//p[@class='data-sty mb-5']//span") ;
Object[] rs3 = tagNode1.evaluateXPath("//ul[@class='clearfix pos-relat']/li") ;
Object[] rs4 = tagNode1.evaluateXPath("//div[@class='deta-Corp']") ;
map.put("gongsi",((TagNode)rs[0]).getText().toString());
map.put("date",((TagNode)rs2[0]).getText().toString());
for (Integer i =1;i<rs3.length;i++)
{
TagNode n = (TagNode)rs3[i];
map.put(i.toString(),n.getText().toString());
}
map.put("miaoshu",((TagNode)rs4[0]).getText().toString());
return map.toString();
}
HtmlCleaner 类与 TagNode 类
使用 HtmlCleaner 解析 HTML 文档时,需要使用到两个类:org.htmlcleaner.HtmlCleaner 以及 org.htmlcleaner.TagNode。
HtmlCleaner 类提供了实例化 HtmlCleaner 的方法和将 指定类型输入(如 String 类型的 HTML 字符串、String 类型的 URL 等)转化成节点 (TagNode)的方法,表列举了 HtmlCleaner 类中的部分方法和说明。
方法 | 说明 |
---|---|
TagNode clean(String htmlContent) | 将 String 类型的 HTML 转化成 TagNode |
TagNode clean(File file, String charset) | 按照指定字符集将 File 中存储的 HTML 转化成 TagNode |
TagNode clean(File file) | 按照默认字符集将 File 中存储的 HTML 转化成 TagNode |
TagNode clean(URL url, String charset) | 获取 URL 对应的 HTML 内容(指定字符集),并将其转化成 TagNode |
TagNode clean(URL url) | 获取 URL 对应的 HTML 内容(默认字符集),并将其转化成 TagNode |
TagNode clean(InputStream in, String charset) | 按照指定字符集将输入流中的 HTML 内容转化成 TagNode |
TagNode clean(InputStream in) | 按照默认字符集将输入流中的 HTML 内容转化成 TagNode |
TagNode 类提供了一系列操作节点的方法,如表所示。 |
TagNode 类提供了一系列操作节点的方法,如表所示。
方法 | 说明 |
---|---|
Object evaluateXPath(String xPath) | 基于 Xpath 语法获取 Object 数组 |
String getAttributeByName(String attName) | 基于属性名称获取属性值 |
TagNode findElementByName(String findName, boolean isRecursive) | 基于标签名获取节点 |
CharSequence getText() | 获取节点中的文本 |
TagNode getParent() | 获取父节点 |
List getChildTagList() | 获取所有子节点,返回值为集合 |
boolean hasChildren() | 判断是否存在子节点 |