gpt4 book ai didi

java - 使用 JSoup CSS 选择器

转载 作者:行者123 更新时间:2023-12-02 06:32:28 26 4
gpt4 key购买 nike

我正在尝试使用JSoup从网站上删除一些内容。以下是我感兴趣的页面中的一些示例 HTML 内容:

<div class="sep_top shd_hdr pb2 luna">
<div class="KonaBody" style="padding-left:0px;">
<div class="lunatext results_content frstluna">
<div class="luna-Ent">
<div class="header">
<div class="body">
<div class="pbk">
<div id="rltqns">
<div class="pbk">
<span class="pg">
<span id="hotword">
<span id="hotword">Fizz</span>
</span>
</span>
<div class="luna-Ent">
<div class="luna-Ent">
<div class="luna-Ent">
<div class="luna-Ent">
</div>
<div class="pbk">
<span class="sectionLabel">
<span class="pg">
<span id="hotword">
<span id="hotword">Buzz</span>
</span>
</span>
<span class="pg">
<span id="hotword">
<span id="hotword">Foo</span>
</span>
</span>
<span class="pg">
<span id="hotword">
<span id="hotword">Bar</span>
</span>
</span>
</div>
<div class="tail">
</div>
<div class="rcr">
<!-- ... rest of content omitted for brevity -->

我有兴趣获取页面中所有热词的列表(例如“Fizz”、“Buzz”、“Foo”和“Bar”)。 但我不能只查询 hotword,因为他们到处都使用 hotword 类来装饰许多不同的元素。具体来说,我需要 pbk pg hotword 元素中存在的所有hotwords。请注意,pbks 可以包含 0 个以上的 pg,pg 可以包含 0 个以上的热词,而热词可以包含 1 个以上的其他热词。我有以下代码:

// Update, per PShemo:
Document doc = Jsoup.connect("http://somesite.example.com").get();

System.out.println("Starting to crawl...");

// Get the document's .pbk elements.
Elements pbks = doc.select(".pbk");

List<String> hotwords = new ArrayList<String>();

System.out.println(String.format("Found %s pbks.", pbks.size()));
int pbkCount = 0;
for(Element pbk : pbks) {
pbkCount++;

// Get the .pbk element's .pg elements.
for(Element pg : pbk.getElementsByClass("pg")) {
System.out.println(String.format("PBK #%s has %s pgs.", pbkCount, pbk.getElementsByClass("pg").size()));
Element hotword = pg.getElementById("hotword");

System.out.println("Adding hotword: " + hotword.text());
hotwords.add(hotword.text());
}
}

运行该代码会产生以下输出:

Starting to crawl...
Found 3 pbks.

我要么没有正确使用 JSoup API,要么没有使用正确的选择器,或者两者兼而有之。关于我哪里出了问题有什么想法吗?

最佳答案

如果您使用getElementsByClass,那么您不需要在其前面添加.,只需使用类名,例如getElementsByClass("pg"),而不是getElementsByClass(".pg")

同样适用于getElementById。不要在 id 值之前添加 #。只需使用 getElementById("hotword")

此外,您的带有 pbk 类的 div 似乎是嵌套的,因此 getElementsByClass 可能会给您重复的结果。

<小时/>

知道您要解析哪个页面后,您可以使用一个选择器来完成它。试试这个方法吧

for (Element element:doc.select("div.body div.pbk span.pg")){
System.out.println(element.text());
}

关于java - 使用 JSoup CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19939129/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com