我最近試圖與JSoup一起解析HTML文檔,我經歷了JSoup的過程,發現select-Method可能是我正在尋找的東西。JSoup選擇標籤遞歸搜索
我試圖完成的是在一個html文檔中查找具有某個類的所有元素。爲了測試這一點,我嘗試了這個與亞馬遜網頁(想法:找到所有優惠)。
因此,我檢查了網頁,看看哪些類和ID正在使用,然後我試圖將其整合到一個小的代碼片段。在這個例子中我發現follwing元件:
<span id="dealTitle" class="a-size-base a-color-link dealTitleTwoLine restVisible singleCellTitle autoHeight">PROCAVE Matratzen-Brücke aus Schaumstoff 25 x 200 cm für ...</span>
此元件被嵌入在其它元件和存在多次(當然每個交易)。所以這裏是我的代碼閱讀交易元素:
Document doc = Jsoup.connect("https://www.amazon.de/gp/angebote/ref=gbph_ftr_s-8_cd61_page_1?gb_f_LD=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL%252CUPCOMING,dealTypes:LIGHTNING_DEAL,page:1,sortOrder:BY_SCORE,dealsPerPage:8&pf_rd_p=425ddcb8-bed4-4e85-ac0f-c1a79d14cd61&pf_rd_s=slot-8&pf_rd_t=701&pf_rd_i=gb_main&pf_rd_m=A3JWKAKR8XB7XF&pf_rd_r=BTHRY008J9N3N5CCMNEN&gb_f_second=dealStates:AVAILABLE%252CWAITLIST%252CWAITLISTFULL,dealTypes:COUPON_DEAL,page:8,sortOrder:BY_SCORE,dealsPerPage:8").timeout(0).get();
Elements deals = doc.select("span.a-size-base.a-color-link.dealTitleTwoLine.restVisible.singleCellTitle.autoHeight");
for (Element deal : deals) {
if (deal.text().contains("ItemMatch")) {
System.out.println("Found deal: " + deal.text());
}
}
不幸的是,我不能得到我期待的元素。 交易總是大小爲0.我試圖修改我的選擇只有一部分類,我添加了id屬性等。不過,我沒有得到這些元素(在這種情況下,這些元素嵌套到其他元素中)。如果我嘗試在DOM層次結構中位於此元素之上的元素(例如,具有類「a-section a-spacing-none slotContainer」的div),則可以找到該元素。
我是不是真的需要指定整個DOM的層次結構(在我的選擇表達式中使用「>」?我希望能夠定義一個選擇器和JSoup會斯格特和搜索整個DOM樹。
如果您的問題得到了充分解答,您應該考慮接受最佳答案,從而將此問題標記爲已解決。如果您需要進一步的幫助,請詳細說明您需要幫助的內容。 – luksch