使用JSoup选择具有多个类的元素

3

我正在从一个网站解析一些表格,具体来说,我正在尝试通过类名提取以下单元格:

Elements e=d.select("span[class=bld lrg red]");

for (Element element : e) {
System.out.println(element.text());}

这段代码返回的是网站上标记为“价格”的一些值。但在某些情况下,我需要从不同的类中获取价格而非 "span[class=bld lrg red]"
我的意思是如果“bld lrg red”类为空,则希望从“span[class=price]”中获取价格。
那么,在这种情况下我该如何使用“or”?我的意思是,如果“bld lrg red”类有值,则取该价格,否则取“price”类的值。

页面可以同时拥有 span[class=bld lrg red]span[class=price] 元素吗?如果不行,您可以尝试使用 span[class=bld lrg red], span[class=price]。否则,您将会找到它们两个。 - Pshemo
1个回答

3
你也可以使用jsoup通过regex来选择网页中所需的元素,同时你可以使用“或”条件来指定你要查找的内容;
示例:
Elements e = d.select("span[class~=(?i)(bld lrg red|price)]");

上述正则表达式将选择具有“bld lrg red” OR “price”(不区分大小写)直接匹配的元素。
详细信息请参见此处:http://jsoup.org/apidocs/org/jsoup/select/Selector.html 现在您可能希望遍历元素并选择非空,null,两者都有等等。
编辑:根据评论,“price class”不是由元素保存的。为了解决这个问题,您可以使用:
Elements e = d.select("span[class=bld lrg red],del[class=price]");

这将适用于两个都是<span class>类的情况。但在这种情况下,一个类是<del class="price">,另一个是<span class="bld lrg red">。那么我该如何使用这种方法? - sarath
@sarath 是的,在你的问题中,你指定了两个具有不同类值的 span 元素。 - StoopidDonut
@Sarath,请检查上面的编辑,您可以单独指定两个元素,这是一种有效的“或”操作。 - StoopidDonut
2
谢谢PopoFibo,这个很好用,感谢你的帮助。现在我可以得到两个结果了,那么我能否使用逗号(,)来使用多个类,就像上面给出的示例一样。 - sarath
仍然存在一个问题...如果其中一个类别有价格,那么我就不需要另一个类别的值了。例如,您会看到一些网站上为同一产品提供原始价格和折扣价格。考虑到所有产品都没有折扣,因此如果“Price”可用,则使用该价格,否则使用“bld lrg red”。现在,在上面的示例中,每个产品都显示了两个值。希望您理解这个问题。 - sarath
@Sarath 当您遍历所有这些元素时,您可以检查 element.className().equals(...) 以检查该元素属于哪个类。 - StoopidDonut

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接