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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

jsoup解析HTML用法小结

發布時間:2023/12/3 HTML 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jsoup解析HTML用法小结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自? ?jsoup解析HTML用法小結

使用HttpClient+jsoup做采集器有一段時間了,發現jsoup很好用,而且還有很多方便的東西都沒怎么用上。于是想根據官網上的cookbook來對jsoup的使用做個小結,或者是歸納。按功能分類做個列表,方便在寫程序的時候快速翻閱。

1、jsoup的HTML文檔(Document)對象模型

  • Document對象由Element和TextNode對象組成
  • 繼承鏈Document extends Element extends NodeTextNode extends Node
  • Element包括一個子Node的列表及一個父Element

2、解析文檔

  • 從字符串解析String html = "<html><head><title>First parse</title></head>" + "<body><p>Parse HTML into a doc.</p></body></html>"; Document doc = Jsoup.parse(html);
  • 從URL獲取并解析Document doc = Jsoup.connect("http://example.com/").get(); String title = doc.title();Document doc = Jsoup.connect("http://example.com") .data("query", "Java") .userAgent("Mozilla") .cookie("auth", "token") .timeout(3000) .post();
  • 從文件解析File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/");

3、DOM方式遍歷元素

搜索元素

  • getElementById(String id)
  • getElementByTag(String tag)
  • getElementByClass(String className)
  • getElementByAttribute(String key)
  • siblingElements(),?firstElementSibling(),?lastElementSibling(),?nextElementSibling(),previousElementSibling()
  • parent(),?children(),?child(int index)

獲取元素數據

  • attr(String key)?– 獲取key屬性
  • attributes()?– 獲取屬性
  • id(),?className(),?classNames()
  • text()?– 獲取文本內容
  • html()?– 獲取元素內部HTML內容
  • outerHtml()?– 獲取包括此元素的HTML內容
  • data()?– 獲取<srcipt>或<style>標簽中的內容
  • tag(),?tagName()

4、選擇器語法(jsoup與其他解析器的區別就是可以使用類似jquery的選擇器語法來搜索及過濾出所需的元素)

?基本選擇器

  • tagname: 搜索tag標簽的元素
  • ns|tag: 搜索命名空間內tag標簽的元素,如fb|name:<fb:name>
  • #id: 搜索有指定id的元素
  • .class: 搜索有指定class的元素
  • [attribute]: 搜索有attrribute屬性的元素
  • [^attri]: 搜索有以attri開頭的屬性的元素
  • [attr=value]: 搜索有指定屬性及其屬性值的元素
  • [attr^=value],?[attr$=value],?[attr*=value]: 搜索有指定attr屬性,且其屬性值是以value開頭、結尾或包括value的元素,如[href*=/path/]
  • [attr~=regex]: 搜索有指定attr屬性,且其屬性值符合regex正則表達式的元素
  • *: 搜索所有元素

選擇器組合

  • el#id: 同時指定標簽名稱和id
  • el.class: 同時指定標簽名稱和class
  • el[attr]: 同時指定標簽名稱和及其中所含屬性的名稱
  • 上述3項的任意組合,如a[href].highlight
  • ancestor child: 包含,如div.content p,即搜索<div class=”content”>下含有<p>標簽的元素
  • ancestor > child: 直接包含,如div.content > p,即搜索直屬<div class="content">節點下的<p>標簽元素;div.content > *,即搜索<div class="content">下的所有元素
  • siblingA + siblingB: 直接遍歷,如div.head + div,即搜索<div class="head"><div>的元素,其中不再包含子元素
  • siblingA ~ siblingX: 遍歷,如h1 ~ p,即<h1>下直接或間接有<p>的元素
  • el, el, el: 組合多個選擇器,搜索滿足其中一個選擇器的元素

?偽選擇器(條件選擇器)

  • :lt(n): 搜索n號元素之前的元素
  • :gt(n): 搜索n號元素之后的元素
  • :eq(n): 搜索n號元素
  • :has(seletor): 搜索符合指定選擇器的元素
  • :not(seletor): 搜索不符合指定選擇器的元素
  • :contains(text): 搜索包含指定文本的元素,區分大小寫
  • :containsOwn(text): 搜索直接指包含指定文本的元素
  • :matches(regex): 搜索符合指定正則表達式的元素
  • :matchesOwn(regex): 搜索本元素文本中符合指定正則表達式的元素
  • 注意:以上偽選擇器的索引中,第一個元素位于索引0,第二個元素位于索引1,……

5、獲取元素的屬性、文本和HTML

  • 獲取元素的屬性值:Node.attr(String key)
  • 獲取元素的文本,包括與其組合的子元素:Element.text()
  • 獲取HTML:Element.html()或Node.outerHtml()

6、操作URL

  • Element.attr("href")?– 直接獲取URL
  • Element.attr("abs:href")或Element.absUrl("href")?– 獲取完整URL。如果HTML是從文件或字符串解析過來的,需要調用Jsoup.setBaseUri(String baseUri)來指定基URL,否則獲取的完整URL只會是空字符串

總結

以上是生活随笔為你收集整理的jsoup解析HTML用法小结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。