网络爬虫--Jsoup的一些获取数据方法

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)     使用正则表达式找到自身的文本

猜你喜欢

转载自blog.csdn.net/desert568/article/details/79433743
今日推荐