jsoup解析HTML用法小结
生活随笔
收集整理的這篇文章主要介紹了
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用法小结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 粜籴怎么读 粜籴的意思
- 下一篇: Eclipse 内置浏览器