我试图抓取以下HTML:
doc.select("[class=cellRight]")
我正在尝试提取学生成绩的值,如果没有成绩,那么如果是这种情况,html中将出现“无成绩”的值。但是,当我执行以下选择请求时:
<div class="gn">
<div class="tx">
2
</div>
<div class="in">
<div class="tx">
1
</div>
</div>
</div>
<style>
body {
margin-left: 0px;
padding-left: 0px;
}
.gn {
width: 800px;
height: 280px;
background-color: rgb(34,34,34);
text-align: -webkit-center;
padding: 40px;
}
.in {
background-color: #f79779;
width: 800px;
height: 300px;
}
.tx {
font-size: 172px;
color: #fff;
text-align: right;
padding-right:120px;
}
@media (max-width:700px){
.gn {
padding:0px;
width:400px;
}
.tx {
padding-right:60px;
}
.in {
width:400px;
}
}
</style>
我得到一个输出,其中所有等级值都列出两次(因为它们嵌套在包含[class = cellRight]区分符的两个元素中,以及正常数量的“无成绩”列表。所以我的问题是,如何我是否只能在包含识别符[class = cellRight]的文档中选择最里面的子项?(我已经处理了空白值的问题)所有帮助都表示赞赏!!
答案 0 :(得分:1)
有很多可能性。
一个是这样的:如果它们也携带该类,则测试每个“cellRight”元素的所有父元素。如果您找到它,请放弃:
List<Element> keepList = new ArrayList<>();
Elements els = doc.select(".cellRight");
for (Element el : els){
boolean keep = true;
for (Element parentEl : el.parents()){
if (parentEl.hasClass("cellRight")){
//parent has class as well -> discard!
keep = false;
break;
}
}
if (keep){
keepList.add(el);
}
}
//keepList now contains inner most elements with your class
请注意,这是在没有编译器的情况下编写的。可能存在拼写/语法错误。
其他说明。只有在有这个单一类的情况下,"[class=cellRight]"
的使用才有效。对于随机顺序的多个clres(完全可以预期),最好使用点语法".cellRight"