【问题标题】:JSoup Select Tag Recursive SearchJSoup 选择标签递归搜索
【发布时间】: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 树。

【问题讨论】:

  • 如果您的问题得到充分回答,您应该考虑接受最佳答案,从而将此问题标记为已解决。如果您需要进一步的帮助,请具体说明您需要帮助的内容。

标签: html dom jsoup


【解决方案1】:

不,您不必指定完整的 DOM 层次结构。如果元素确实是 DOM 的一部分,您的测试应该可以工作。我怀疑它们可能不是 DOM 的一部分,因为它是由 JSoup 加载的。原因可能是我,内部 DOM 节点由 JavaScript 通过 AJAX 填充。 JSoup 不运行 JavaScript,因此无法访问动态加载的 DOM 部分。要实现您想要的,您可以直接查看 AJAX 调用并分析它们,或者您继续使用其他解决方案,如 selenium webdriver,它运行一个真正的浏览器,包括一个工作的 JavaScript 引擎。

【讨论】:

  • 是的,你是对的,这是因为 JS/AJAX。感谢您将我重定向到 selenium webdriver,我会改为尝试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多