jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
下面是我在开发中通过Jsoup解析网页两种通用方法。
1. 获取单个元素
/**
* 根据path获取单个元素
*
* @param element
* @param path : [id=idstr]>[class*=classstr]>span#5>a
* @return
*/
public static Element getElementByPath(Element element, String path){
if(element == null){
return null;
}
if(path == null || "".equals(path)){
return null;
}
if(path.contains(">")){
String[] paths = path.split(">");
if(paths != null && paths.length > 0){
for(String p : paths){
element = getElementByPath(element, p);
if(element == null){
break;
}
}
}
}else{
int index = 0;
String p = path;
if(path.contains("#")){
p = path.substring(0, path.indexOf("#"));
String indexstr = path.substring(path.indexOf("#")+1).replace("[^0-9]", "");
if(!"".equals(indexstr)){
index = Integer.valueOf(indexstr);
}
}
Elements elements = element.select(p);
if(index > 9999){
element = elements.last();
}else{
if(elements.size() <= index){
return null;
}
element = elements.get(index);
}
}
return element;
}
2. 获取多个元素
/**
* 根据path获取多个元素
*
* @param element
* @param path : [id=idstr]>[class*=classstr]>span#5>a
* @return
*/
public static Elements getElementsByPath(Element element, String path){
if(element == null){
return null;
}
if(path == null || "".equals(path)){
return null;
}
Elements elements = null;
if(path.contains(">")){
String[] paths = path.split(">");
if(paths != null && paths.length > 0){
for(String p : paths){
elements = getElementsByPath(element, p);
if(elements == null){
break;
}
int index = 0;
if(p.contains("#")){
String indexstr = p.substring(p.indexOf("#")+1).replace("[^0-9]", "");
p = p.substring(0, p.indexOf("#"));
if(!"".equals(indexstr)){
index = Integer.valueOf(indexstr);
}
}
if(index > 9999){
element = elements.last();
}else{
if(elements.size() <= index){
elements = null;
break;
}
element = elements.get(index);
}
}
}
}else{
String p = path;
if(path.contains("#")){
p = path.substring(0, path.indexOf("#"));
}
elements = element.select(p);
}
return (elements != null && elements.size() > 0) ? elements : null;
}