【发布时间】:2017-01-02 11:02:43
【问题描述】:
我最近尝试使用 JSoup 来解析 HTML 文档,我浏览了 JSoup 上的教程,发现 select-Method 可能是我正在寻找的。p>
我试图完成的是在 html 文档中找到所有具有特定类的元素。为了测试这一点,我在亚马逊网页上尝试了这个(想法:找到所有优惠的交易)。
所以我检查了网页以查看正在使用哪些类和 id,然后我尝试将其集成到一个小代码 sn-p 中。在此示例中,我找到了以下元素:
<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());
}
}
很遗憾,我无法获得我正在寻找的元素。 deals 的大小始终为 0。我尝试仅使用部分类修改我的选择,我添加了 id 属性等等。不过,我没有得到元素(在这种情况下,这些元素嵌套在其他元素中)。如果我尝试在 DOM 层次结构中高于此元素的元素(例如,具有类“a-section a-spacing-none slotContainer”的 div),则会找到该元素。
我是否真的需要指定整个 DOM 层次结构(通过在我的选择表达式中使用“>”?我希望能够定义一个选择器,JSoup 将遍历并搜索整个 DOM 树。
【问题讨论】:
-
如果您的问题得到充分回答,您应该考虑接受最佳答案,从而将此问题标记为已解决。如果您需要进一步的帮助,请具体说明您需要帮助的内容。