日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jsoup解析

發(fā)布時(shí)間:2024/1/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsoup解析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

jsoup官方文檔https://www.open-open.com/jsoup/
?? 我們抓取到頁面之后,還需要對(duì)頁面進(jìn)行解析。可以使用字符串處理工具解析頁面,也可以使用正則表達(dá)式,但是這些方法都會(huì)帶來很大的開發(fā)成本,所以我們需要使用一款專門解析html頁面的技術(shù)。
??jsoup 是一款基于 Java 語言的 HTML 請(qǐng)求及解析器,可直接請(qǐng)求某個(gè) URL 地址、解析 HTML 文本內(nèi)容。它提供了一套非常省力的 API,可通過 DOM、CSS 以及類似于 jQuery 的操作方法來取出和操作數(shù)據(jù)。
??jsoup的主要功能如下:
??1.從一個(gè)URL,文件或字符串中解析HTML;
??2.使用DOM或CSS選擇器來查找、取出數(shù)據(jù);
??3.可操作HTML元素、屬性、文本;
注意:
??雖然使用Jsoup可以替代HttpClient直接發(fā)起請(qǐng)求解析數(shù)據(jù),但是往往不會(huì)這樣用,因?yàn)閷?shí)際的開發(fā)過程中,需要使用到多線程,連接池,代理等等方式,而jsoup對(duì)這些的支持并不是很好,所以我們一般把jsoup僅僅作為Html解析工具使用
jsoup 一個(gè)重要用途是解析 HTML 文件,在開始用之前,必須弄清 jsoup 中的 Node、Element、Document 的相關(guān)概念及區(qū)別,防止因概念混淆而導(dǎo)致亂用錯(cuò)用。

??1.Document(文檔):指整個(gè) HTML 文檔的源碼內(nèi)容
??2.Node(節(jié)點(diǎn)):HTML 中所包含的內(nèi)容都可以看成一個(gè)節(jié)點(diǎn)。節(jié)點(diǎn)有很多種類型:屬性節(jié)點(diǎn)(Attribute)、注釋節(jié)點(diǎn)(Note)、文本節(jié)點(diǎn)(Text)、元素節(jié)點(diǎn)(Element)等。解析 HTML 內(nèi)容的過程,其實(shí)就是對(duì)節(jié)點(diǎn)操作的過程。
??3.Element(元素):元素是節(jié)點(diǎn)的子集,所以一個(gè)元素也是一個(gè)節(jié)點(diǎn)。
??
代碼演示

import org.apache.commons.io.FileUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.junit.Test;import java.io.File; import java.net.URL;/*** Author itcast* Date 2020/5/4 14:49* Desc*/ public class JsopTest {/*** 測(cè)試JSoup-獲取Document*/@Testpublic void testDocument() throws Exception {Document doc1 = Jsoup.connect("http://www.itcast.cn/").get();Document doc2 = Jsoup.parse(new URL("http://www.itcast.cn/"), 1000);String html = FileUtils.readFileToString(new File("jsoup.html"), "UTF-8");Document doc3 = Jsoup.parse(html);System.out.println(doc1);System.out.println(doc2);System.out.println(doc3);}/*** 測(cè)試JSoup-解析html*/@Testpublic void testJsoupHtml() throws Exception {Document doc = Jsoup.parse(new File("jsoup.html"), "UTF-8");//**使用dom方式遍歷文檔//1. 根據(jù)id查詢?cè)豨etElementByIdElement element = doc.getElementById("city_bj");System.out.println(element.text());//2. 根據(jù)標(biāo)簽獲取元素getElementsByTagelement = doc.getElementsByTag("title").first();System.out.println(element.text());//3. 根據(jù)class獲取元素getElementsByClasselement = doc.getElementsByClass("s_name").last();System.out.println(element.text());//4. 根據(jù)屬性獲取元素getElementsByAttributeelement = doc.getElementsByAttribute("abc").first();System.out.println(element.text());element = doc.getElementsByAttributeValue("class", "city_con").first();System.out.println(element.text());//**元素中數(shù)據(jù)獲取//1. 從元素中獲取idString str = element.id();System.out.println(str);//2. 從元素中獲取classNamestr = element.className();System.out.println(str);//3. 從元素中獲取屬性的值attrstr = element.attr("id");System.out.println(str);//4. 從元素中獲取所有屬性attributesstr = element.attributes().toString();System.out.println(str);//5. 從元素中獲取文本內(nèi)容textstr = element.text();System.out.println(str);//**使用選擇器語法查找元素//jsoup elements對(duì)象支持類似于CSS (或jquery)的選擇器語法,來實(shí)現(xiàn)非常強(qiáng)大和靈活的查找功能。//select方法在Document/Element/Elements對(duì)象中都可以使用。可實(shí)現(xiàn)指定元素的過濾,或者鏈?zhǔn)竭x擇訪問。//1. tagname: 通過標(biāo)簽查找元素,比如:spanElements span = doc.select("span");for (Element e : span) {System.out.println(e.text());}//2. #id: 通過ID查找元素,比如:#city_bjjstr = doc.select("#city_bj").text();System.out.println(str);//3. .class: 通過class名稱查找元素,比如:.class_astr = doc.select(".class_a").text();System.out.println(str);//4. [attribute]: 利用屬性查找元素,比如:[abc]str = doc.select("[abc]").text();System.out.println(str);//5. [attr=value]: 利用屬性值來查找元素,比如:[class=s_name]str = doc.select("[class=s_name]").text();System.out.println(str);//**Selector選擇器組合使用//1. el#id: 元素+ID,比如: h3#city_bjstr = doc.select("h3#city_bj").text();System.out.println(str);//2. el.class: 元素+class,比如: li.class_astr = doc.select("li.class_a").text();System.out.println(str);//3. el[attr]: 元素+屬性名,比如: span[abc]str = doc.select("span[abc]").text();System.out.println(str);//4. 任意組合,比如:span[abc].s_namestr = doc.select("span[abc].s_name").text();System.out.println(str);//5. ancestor child: 查找某個(gè)元素下子元素,比如:.city_con li 查找"city_con"下的所有l(wèi)istr = doc.select(".city_con li").text();System.out.println(str);//6. parent > child: 查找某個(gè)父元素下的直接子元素,//比如:.city_con > ul > li 查找city_con第一級(jí)(直接子元素)的ul,再找所有ul下的第一級(jí)listr = doc.select(".city_con > ul > li").text();System.out.println(str);//7. parent > * 查找某個(gè)父元素下所有直接子元素.city_con > *str = doc.select(".city_con > *").text();System.out.println(str);} }

總結(jié)

以上是生活随笔為你收集整理的jsoup解析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。