我的 Jsoup 解析代码再也找不到"price"数据了



我正在解析一个网站的一个项目的价格,在我的代码中,我使用:

val parseId : Elements = doc2.select("#PriceSection")
val spanSelected : Elements = parseId.select("span")
stringBuilder2.append(spanSelected)
val spanToString = stringBuilder2.toString()
for(char in spanToString){
list2.add(char)
}
val newList2 = list2.toString()
val cutString2 = newList2.substring(75,105)

这已经工作了好几个星期,但现在这似乎不工作,我只是得到一切除了我需要的位。我不知道如何收集我需要的数据(最后一行的HTML代码,内部的span类)了。我已经尝试了:has:contains的组合,但我不明白为什么Jsoup再也找不到文本了。

下面是来自该网站的HTML代码:


<div id="PriceSection" class="cds-flex-f1g67tkn cds-column-reverse-c1skacs4 cds-borderedTop-b1fsiv3z">
<div class="cds-flex-f1g67tkn cds-3-_64wlqa cds-2-_1xqs9y8 cds-2-_rro7jr" style="width: calc(100% - 1px);">
<div style="width: 100%;">
<div class="cds-flex-f1g67tkn cds-2-_vhy4ik" style="width: 100%;">
<div class="cds-flex-f1g67tkn cds-row-r1tfxker cds-space-between-s1vbz1 cds-0-_1t4ck38 cds-1-_uaer6w cds-1-_qem5ui" style="width: 100%;">
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="false" aria-label="1 hour" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--transparent); --interactable-hovered-background:transparent; --interactable-hovered-opacity:0.88; --interactable-pressed-background:transparent; --interactable-pressed-opacity:0.82; --interactable-disabled-background:transparent;">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: var(--foreground-muted);">1H</span>
</button>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="true" aria-label="1 day" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--primary-wash); --interactable-hovered-background:rgb(240, 243, 250); --interactable-hovered-opacity:0.98; --interactable-pressed-background:rgb(226, 229, 236); --interactable-pressed-opacity:0.92; --interactable-disabled-background:rgb(250, 252, 255);">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: rgb(181, 54, 6);">1D</span>
</button>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="false" aria-label="1 week" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--transparent); --interactable-hovered-background:transparent; --interactable-hovered-opacity:0.88; --interactable-pressed-background:transparent; --interactable-pressed-opacity:0.82; --interactable-disabled-background:transparent;">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: var(--foreground-muted);">1W</span>
</button>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="false" aria-label="1 month" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--transparent); --interactable-hovered-background:transparent; --interactable-hovered-opacity:0.88; --interactable-pressed-background:transparent; --interactable-pressed-opacity:0.82; --interactable-disabled-background:transparent;">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: var(--foreground-muted);">1M</span>
</button>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="false" aria-label="1 year" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--transparent); --interactable-hovered-background:transparent; --interactable-hovered-opacity:0.88; --interactable-pressed-background:transparent; --interactable-pressed-opacity:0.82; --interactable-disabled-background:transparent;">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: var(--foreground-muted);">1Y</span>
</button>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-center-czxavit" style="height: fit-content;">
<button type="button" aria-pressed="false" aria-label="ALL" class="cds-interactable-i9xooc6 cds-transparentChildren-tnzgr0o cds-focusRing-fd371rq cds-transparent-tlx9nbb cds-scaledDownState-sxr2bd6 cds-pressableResetStyles-p1yut83c" style="--interactable-border-radius:100px; --interactable-background:var(--transparent); --interactable-hovered-background:transparent; --interactable-hovered-opacity:0.88; --interactable-pressed-background:transparent; --interactable-pressed-opacity:0.82; --interactable-disabled-background:transparent;">
<span class="cds-typographyResets-t1xhpuq2 cds-label1-ln29cth cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-block-bas7n4z cds-noWrap-n1er3x1v cds-1-_fibjmj cds-1-_18ml2at cds-2-_rro7jr cds-2-_1gzxkm" style="color: var(--foreground-muted);">ALL</span>
</button>
</div>
</div>
</div>
<div class="cds-flex-f1g67tkn cds-center-ca5ylan cds-space-between-s1vbz1 cds-2-_vhy4ik">
<div class="cds-flex-f1g67tkn cds-0-_1jhyfz6 cds-0-_x4cyln" style="flex-grow: 1;">
<div class="cds-flex-f1g67tkn cds-2-_rro7jr">
<div aria-hidden="true" style="width: 100%;">
<div class="cds-typographyResets-t1xhpuq2 cds-headline-hb7l4gg cds-foregroundMuted-f1vw1sy6 cds-transition-txjiwsi cds-start-s1muvu8a">
<span>Price</span>
</div>
<div class="cds-flex-f1g67tkn cds-baseline-b1fcn5pa cds-column-ci8mx7v cds-0-_1t4ck38">
<div class="cds-typographyResets-t1xhpuq2 cds-display3-doujgnf cds-foreground-f1yzxzgu cds-transition-txjiwsi cds-start-s1muvu8a cds-tabularNumbers-t11sqpt cds-1-_qem5ui">
<span>£22,508.13</span>
</div>
<span 

过去的情况是,我可以读到"£22,508.13";在span类的内部,但现在我不能(底部span类)。

我的代码寻找一个名为"PriceSection"然后看了看"PriceSection"从内部获取所有的span类。然后我过滤掉我不需要的。

使用相同的代码,我现在得到一个单词"Relative"这似乎是从另一个html类后的类,其中包含我想要的信息。

为什么Jsoup现在找不到span类(包含价格),当它之前工作良好?

事情停止工作是有原因的——要么是网站发生了变化,要么是你的代码发生了变化。你的代码包含了所有你想要的html吗?如果你打印doc2(屏幕或文件),它有所有预期的html?
你最近对代码做了什么修改吗?
还有一点——不要用"魔术数字";比如75和105。由于价格在最后一个span中,您可以使用以下代码:

val el = doc2.select("#PriceSection span")
println(el?.last()?.text())

最新更新