Jsoup解析html的基本用法

时间:2022-11-01 00:20:38

          这周学习了Jsoup的基本用法,感觉Jsoup解析html文本和dom解析xml大同小异。学习过xml解析的朋友如果学习Jsoup上手很快。没学过的朋友也没关系,Jsoup很简单下面我们一起来学习:

    一、Jsoup的介绍:

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOMCSS 以及类似于 jQuery 的操作方法来取出和操作数据。(该文字介绍从Jsoup官网翻译而来) ,

    二、Jsoup的功能:

     解析Html文本,将要解析的Html转化为Document的Dom树,通过Document将其html的标签转化为Element元素。通过Element元素获得标签的属性和内容。

     三、Jsoup的使用步骤

       1、由于Jsoup是属于第三方架包,所以肯定要下载该架包这里给出该架包的url(https://jsoup.org/download),朋友们可以根据url下载架包

       2、导入架包,将架包导入到自己测试的项目中,如果用android studio的朋友可能在这一步要小心了,这里可能会出错。遇到问题别灰心,根据提示信息就可以查找出问题的原因。主要的原因是因为Jsoup架包的文件覆盖了android的v4或v7里的文件。这个问题的解决方法网上很多。这里就不详细介绍了。

      3、和其他使用架包一样,导入到项目中了就可以使用jsoup解析Html文本了,解析Html文本的那个要获得文本,该怎样获得呢,jsoup提供了好几种获得Html文本的方法。下面我们将一一介绍;

         3.1、 获得html字符并将其转换为Document对象(该对象与Dom解析xml的Document类似),我们后面讲根据解析的Document对象解析Html的标签,获得其标签的属性值和内容。 

/*
* 解析Html字符串
* */
public Document parseString(String htmlStr) {


return Jsoup.parse(htmlStr);
}


/*
* 通过baseUrl将相对URL转换为绝对URL解析Html字符
* */
public Document parseString(String htmltr, String charsetName) {
return Jsoup.parse(htmltr, charsetName);
}

/*
* 通过Parser解析Html字符串
* */
public Document parseString(String htmlStr, String baseUrl, Parser parser) {
return Jsoup.parse(htmlStr, baseUrl, parser);
}

     

         3.2、 获得html文件并将其转换为Document对象

/*
* 通过文件解析Html文本
* */
public Document parseFile(File file, String charSet) throws IOException {
return Jsoup.parse(file, charSet);

}

       3.3、根据URL获取网络Html文本并将其解析为Document对象

     

/*
* 通过get请求Url,通过Url解析Html文本
* */
public Document parseUrlByGet(String url) throws IOException {
Document document = null;
document = Jsoup.connect(url)//连接到网络
.timeout(3000)//设置超时时间
.get();//通过get方法请求
return document;
}

/*
* 通过post请求Url,通过Url解析Html文本
* */
public Document parseUrlByPost(String url) throws IOException {

Document document = Jsoup.connect(url)
.timeout(3000)
.post();
return document;
}

     ps(以上是jsoup获得不同类型的Htm文本的几种方法,JsoupAPI还提供了其他的方法,读者可以自己去参考APIk了解其他的方法)

   4、获得Document就可以解析其标签,将其标签转化为Element元素,以下是几种将其标签转化为Element元素的方法

 /*
* 通过解析的document文件获得html的标签之以标签名获得标签
*
* */
public Elements getElementByTag(Document document, String tag) {

//获得Htmltag为名的标签,例如“title”标签
return document.getElementsByTag(tag);

}


/*
* 通过解析的document文件获得html的标签之以标签的id获得标签,精准获取
*
* */
public Element getElementById(Document document, String id) {

//获得Htmltagid的标签
return document.getElementById(id);
}



/*
* 通过选择器去解析html,获得满足选择器的标签
* */
public Elements getElementBySelect(Document document ,String selecttor){

//返回获得满足选择器的Element,如slecttor = "div"
return document.select(selecttor);
}
 

   5、通过Element元素获得标签的属性和内容


Elements Elements = bodyElement.select("a");
Log.d("tag","titles = " + Elements.toString());

//遍历Elements,解析其标签
for (Element title:Elements) {
//解析其标签下的属性
org.jsoup.nodes.Attributes titleAttr = title.attributes();
for (Attribute attr: titleAttr) {
//获得属性名
String key = attr.getKey();
Log.d("tag","key = " + key);

if ("href".equals(key)){
//获得属性值
String link = attr.getValue();
Log.d("tag","url = " + link);
}
}
//获得标签的文本内容
Log.d("tag","title = " + title.text());

}


      通过以上的方法就可以解析Html文档获得想要的内容了,虽然 上面的步骤可以解决相当一本分问题,当时是这仅是学习Jsoup的入门知识,想要更多了解Jsoup的读者可以参考Jsoup的官方文档,看文档是学习的最好方法,这是我们程序猿必备的条件之一。这里我给大家找出Jsoup的官方文档(https://jsoup.org/)和中文文档(http://www.open-open.com/jsoup/parsing-a-document.htm)的URL。