1. 一些获取方式
// 根据ID获得节点 Element elementDiv = doc.getElementById("shop-all-list"); //根据<ul>标签名获得节点 Elements elementsUl = elementDiv.getElementsByTag("ul"); //获取elementsUl中第一个<li>的标签节点 Elements elements = elementsUl.first().getElementsByTag("li"); Elements elements1 = element.children(); String targetUrl = elements1.get(0).getElementsByTag("a").attr("href"); String img = elements1.get(0).getElementsByTag("img").first().attr("data-src"); //判断字符串中是否包含.jpg if(img.contains(".jpg")) //获得字符串中.jpg第一次出现位置 int a = img.indexOf(".jpg"); //字符串截取 img = img.substring(0, a + 4); |
2、参考资料
Jsoup解析有很多种方法能得到同样的结构,就看你想用哪种思路。
有用id定位的,有用TagName获取的有用class 获取的。
常用的方法如下:
jsoup提供类似JS获取html元素:
getElementById(Stringid) 用id获得元素
getElementsByTag(Stringtag) 用标签获得元素
getElementsByClass(StringclassName) 用class获得元素
getElementsByAttribute(Stringkey) 用属性获得元素
同时还提供下面的方法提供获取兄弟节点:siblingElements(),firstElementSibling(), lastElementSibling();nextElementSibling(),previousElementSibling()
获得与设置元素的数据:
attr(String key) 获得元素的数据 attr(String key, String value) 设置元素数据
attributes() 获得所以属性
id(),className(),classNames()获得id class得值
text() 获得文本值
text(String value) 设置文本值
html() 获取html
html(String value) 设置html
outerHtml() 获得内部html
data() 获得数据内容
tag() 获得tag 和 tagName() 获得tagname
操作html元素:
append(String html), prepend(String html)
appendText(String text), prependText(Stringtext)
appendElement(String tagName),prependElement(String tagName)
html(String value)
jsoup还提供了类似于JQuery方式的选择器
采用选择器来检索数据
tagname 使用标签名来定位,例如 a
ns|tag 使用命名空间的标签定位,例如 fb:name 来查找 <fb:name> 元素
#id 使用元素 id 定位,例如 #logo
.class 使用元素的 class 属性定位,例如 .head
* 定位所有元素
[attribute] 使用元素的属性进行定位,例如 [href] 表示检索具有 href 属性的所有元素
[^attr] 使用元素的属性名前缀进行定位,例如 [^data-] 用来查找 HTML5 的 dataset 属性
[attr=value] 使用属性值进行定位,例如 [width=500] 定位所有 width 属性值为 500 的元素
[attr^=value],[attr$=value],[attr*=value] 这三个语法分别代表,属性以value 开头、结尾以及包含
[attr~=regex] 使用正则表达式进行属性值的过滤,例如 img[src~=(?i)\.(png|jpe?g)]
以上是最基本的选择器语法,这些语法也可以组合起来使用
组合用法:
el#id 定位id值某个元素,例如 a#logo-> <a id=logo href= … >
el.class 定位 class 为指定值的元素,例如div.head -> <div class=head>xxxx</div>
el[attr] 定位所有定义了某属性的元素,例如 a[href]
以上三个任意组合,例如 a[href]#logo 、a[name].outerlink
除了一些基本的语法以及这些语法进行组合外,jsoup 还支持使用表达式进行元素过滤选择
:lt(n) 例如 td:lt(3) 表示小于三列
:gt(n) div p:gt(2) 表示 div 中包含 2 个以上的 p
:eq(n) form input:eq(1) 表示只包含一个 input 的表单
:has(seletor) div:has(p) 表示包含了 p 元素的 div
:not(selector) div:not(.logo) 表示不包含class=logo 元素的所有 div 列表
:contains(text) 包含某文本的元素,不区分大小写,例如p:contains(oschina)
:containsOwn(text) 文本信息完全等于指定条件的过滤
:matches(regex) 使用正则表达式进行文本过滤:div:matches((?i)login)
:matchesOwn(regex) 使用正则表达式找到自身的文本