现在常用的网页解析工具有:Jsoup,JsoupXpath,HtmlCleaner。
jsoup 是一款Java 的XML、HTML解析器,可直接解析某个URL地址、HTML文本内容和已经存在的文件。
JsoupXPath是基于Jsoup的拓展,使用路径的形式解析XML和HTML文档。核心类为JXDocument;JsoupXPath的节点对象JXNode不仅可以获取标签节点,还可以获取属性节点
HtmlCleaner是一个开源的Java语言的Html文档解析器。HtmlCleaner能够重新整理HTML文档的每个元素并生成结构良好(Well-Formed)的 HTML 文档。默认它遵循的规则是类似于大部份web浏览器为创文档对象模型所使用的规则。然而,用户可以提供自定义tag和规则组来进行过滤和匹配。它被设计的小,快速,灵活而且独立。HtmlCleaner也可用在Java代码中,当命令行工具或Ant任务。 解析后编程轻量级文档对象,能够很容易的被转换到DOM或者JDom标准文档,或者通过各种方式(压缩,打印)连续输出XML。
Jsoup解析:
第一步:创建Document
Jsoup创建Document的方式:
第一种:解析一个字符串获取Document对象
String html = "<div><a href='#'>jsoup测试</a></div>";
Document doc = Jsoup.parse(html);
第二种:解析一个html文档获取Document对象
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
第三种:解析一个URL资源获取Document对象
Connection conn = Jsoup.connect("https://www.hao123.com");
Document doc = conn.get();
第二步:获得Element对象
第一种:通过标签属性获得Element对象
Element getElementById (String id )
Elements getElementsByTag (String tagName ) 通过标签获取一个元素集合对象
Elements getElementByClass( String className) 通过元素类名获取一个元素集合对象
第二种:通过css选择器获得元素对象
Elements select (String cssQuery) 通过css选择器获取Elements对象
Element selectFirst(String cssQuery) 通过css选择获得第一个Element对象
第三步:从Element对象中解析最终结果
for (Element headline : newsHeadlines) {
System.out.println("jsoup selector text=" + headline.html() + " : class=" + headline.attr("class") );
pqnr = headline.html();
return_map.put(dataMxDm, pqnr);
}
JsoupXPath解析
第一步:创建JXDocument对象
public JXDocument (Document doc) 使用Document对象来创建JXDocument对象
String path = test.class.getResource("/html/example.html").getPath();
Document doc = Jsoup.parse(new File(path),"utf-8");
JXDocument jxd = new JXDocument(doc);
第二步:获取JXNode对象
List<JXNode> selN( String xpath) 找到路径返回所有满足的节点对象集合
类似Document的select()方法
JXNode selNOne(String xpath) 找到路径返回的第一个满足的节点对象
类似Document的selectFirst()方法
第三步:解析JXNode对象
JXNode node = (JXNode) jxDocument.selNOne(xpath1);
//JXNode node = (JXNode) jxDocument.selOne(xpath2);
System.out.println("8888"+node.getTextVal());
List<Object> rs = jxDocument.sel(xpath1);
for (Object o:rs){
if (o instanceof Element){
int index = ((Element) o).siblingIndex();
System.out.println(index);
}
System.out.println("99999: "+o.toString());
}
HtmlCleaner解析
第一步:首先我们要创建一个HtmlCleaner
HtmlCleaner htmlCleaner = new HtmlCleaner();
第二步:然后我们就可以用他来获取文件内容content。
TagNode tagNode= htmlCleaner.clean(content);
content可以是文件,也可以是hmtl字符串。
第三步:通过XPath路径解析获得Object[]对象:
Object[] tbodyNodeArray = tagNode.evaluateXPath(XPath);
这里XPath为你要读取的目录,可以是/body/table[2]/tbody/tr/td[2]/table[4]/tbody/tr/td/table/tbody
这样,直接读取到table。
ReadFileUtil readFileUtil = new ReadFileUtil();
html = readFileUtil.readFilePath(url);
HtmlCleaner hc = new HtmlCleaner();
TagNode tn = hc.clean(html);
Object[] ns = tn.evaluateXPath(xpath);
for(Object on : ns) {
TagNode n = (TagNode) on;
System.out.println("HtmlCleaner xpath text="+n.getText() + " : class=" + n.getAttributeByName("class") );
pqnr = n.getText().toString();
}
如何获取Xpath路径以及CSS选择器路径:
打开目标网页,按F12.然后选中点中红框中的箭头,点击序号,及定位到序号在源文件的位置,然后右键,选择Copy,Copy Xpath 选取的就是XPath路径,Copy selector 选中的就是CSS选择器路径。
Demo下载:
https://download.csdn.net/download/u013310119/12274974