這周學習了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。