我正在尝试使用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 -->
我有兴趣获取hotwords
页面中所有内容的列表(例如“Fizz”、“Buzz”、“Foo”和“Bar”)。但我不能只查询hotword
,因为他们到处使用hotword
类来装饰许多不同的元素。具体来说,我需要元素hotwords
中存在的所有pbk pg hotword
内容。注意 pbks 可以包含 0+ pgs, pgs 可以包含 0+ hotwords, hotwords 可以包含 1+ other hotwords。我有以下代码:
// 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,要么没有使用正确的选择器,或者两者兼而有之。关于我要去哪里出错的任何想法?提前致谢!