这周学习了Jsoup的基本用法,感觉Jsoup解析html文本和dom解析xml大同小异。学习过xml解析的朋友如果学习Jsoup上手很快。没学过的朋友也没关系,Jsoup很简单下面我们一起来学习:
一、Jsoup的介绍:
jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 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) {//获得Html以tag为名的标签,例如“title”标签
return document.getElementsByTag(tag);}
/** 通过解析的document文件获得html的标签之以标签的id获得标签,精准获取** */ public Element getElementById(Document document, String id) {//获得Html以tag为id的标签
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。
转载链接:https://blog.csdn.net/xaingge/article/details/51540879