提问人:Artist 提问时间:2/11/2023 最后编辑:EritreanArtist 更新时间:2/11/2023 访问量:52
如何获取 Jsoup 元素
how to get Jsoup element
问:
<li data-test-component="ProductStats" class="sc-qVkRw dDEgow">
<dl data-test-component="DescriptionList" class="sc-ejxegM hEIIuR">
<dt labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO">В избранном</dt>
<dd labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-fVmuvm eOPaPs dVayGV">1</dd>
<dt labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO">Просмотры</dt>
<dd labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-fVmuvm eOPaPs dVayGV">2</dd>
<dt labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO">Размещено</dt>
<dd labelwidth="208px" labelwidthmobile="168px" class="sc-cOxWqc sc-fVmuvm eOPaPs dVayGV">Сегодня в 13:52</dd>
</dl>
</li>
元素本身如下所示。我需要得到“Сегодня в 13:52”。
通过 xpath,这将像这样完成 >> //li [@data-test-component = 'ProductStats'],并进一步通过 href。我不明白如何在jsoup中实现选择器
尝试通过 F12 复制选择器
答:
1赞
Vikram
2/11/2023
#1
我假设您的目标是 dl 元素的最后一个子元素的文本
Document doc = Jsoup.parse("<li data-test-component=\"ProductStats\" class=\"sc-qVkRw dDEgow\"><dl data-test-component=\"DescriptionList\" class=\"sc-ejxegM hEIIuR\"><dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">В избранном</dt><dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">1</dd><dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">Просмотры</dt><dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">2</dd><dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">Размещено</dt><dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">Сегодня в 13:52</dd></dl></li>");
Elements elList = doc.body().select("li[data-test-component='ProductStats']");
if(elList!=null && elList.size()>0 && elList.get(0).childNodeSize()>0){
Element liElement= elList.get(0);
if(liElement.childNodeSize()>0){
if(liElement.childNodeSize()>0){
Element firstChildElOfLi = liElement.child(0);
Element targetEl = firstChildElOfLi.child(firstChildElOfLi.childNodeSize()-1);
System.out.println(targetEl.text());
}
}
}
评论
0赞
Artist
2/11/2023
类是动态的,在每个页面上它们的名称都不同。
0赞
Vikram
2/11/2023
@Artist只要 li 标签的 data-test-component 属性相同,并且您想要 dl 标签的最后一个子项的文本,给定的代码就可以正常工作,因为它没有任何类名依赖关系
0赞
Vikram
2/12/2023
@モキャデ这很好,一行解,但是如果 li 元素的第一个子元素不是 dl,在这种情况下,你会怎么做?
1赞
モキャデ
2/11/2023
#2
您可以通过一种方法获得所需的内容。selectFirst
String html = "<li data-test-component=\"ProductStats\" class=\"sc-qVkRw dDEgow\">\r\n"
+ " <dl data-test-component=\"DescriptionList\" class=\"sc-ejxegM hEIIuR\">\r\n"
+ " <dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">В избранном</dt>\r\n"
+ " <dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">1</dd>\r\n"
+ " <dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">Просмотры</dt>\r\n"
+ " <dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">2</dd>\r\n"
+ " <dt labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-hIsuHl kWkcWl fhKhnO\">Размещено</dt>\r\n"
+ " <dd labelwidth=\"208px\" labelwidthmobile=\"168px\" class=\"sc-cOxWqc sc-fVmuvm eOPaPs dVayGV\">Сегодня в 13:52</dd>\r\n"
+ " </dl>\r\n"
+ "</li>";
Document doc = Jsoup.parse(html);
Element e = doc.selectFirst("li[data-test-component=ProductStats] > dl > :last-child");
System.out.println(e.text());
输出:
Сегодня в 13:52
上一个:无法获得硒元素
评论