Java jsoupcss/DOM问题

Java jsoupcss/DOM问题,java,css,dom,jsoup,Java,Css,Dom,Jsoup,一,。 (发件人:) 我想得到图片中的文本,在Google开发者工具中我会这样做(我基本上进入了另一个子节点,在DevTools中找到md5,但在Jsoup中它看起来不同,只返回“md5”文本) document.getElementById(“其他信息内容”).childNodes[1]。childNodes[1]。childNodes[1]。innerHTML 我无法使用jsoupdom/selector获得它。 (如果可以给出这两个示例) 二, 如何在Jsoup中的CSS中指定子级? 例

一,。 (发件人:)

我想得到图片中的文本,在Google开发者工具中我会这样做(我基本上进入了另一个子节点,在DevTools中找到md5,但在Jsoup中它看起来不同,只返回“md5”文本)

document.getElementById(“其他信息内容”).childNodes[1]。childNodes[1]。childNodes[1]。innerHTML

我无法使用jsoupdom/selector获得它。 (如果可以给出这两个示例)


二,

如何在Jsoup中的CSS中指定子级? 例如,我右键单击图片中蓝色标记线上方的span class字段,然后单击“复制选择器”:

它以第一个div的形式向我提供了文件详细信息,尽管它不是文档中唯一的文件详细信息,但好吧,假设它应该是这样的(?):

我如何将它转换成一个与孩子一起工作的JSoup CSS脚本?(如果可能,还可以使用DOM示例)


三,

在查找特定值/节点时,是否对如何查找以及如何找到正确的路径有很好的了解

我现在所做的基本上是打开开发工具,然后单击唯一的div类名,然后检查DevTools中的属性窗口中的子节点,并继续挖掘子节点,直到找到正确的路径…(就像我在第一个问题中复制的那样)

有没有更好的方法来看待这个问题

我的意思是,使用DevTools控制台非常简单,只需编写 .children[1].childrendes[3].childrendes[1]查看属性并查看所需的正确属性,但我知道我猜这不是正确的方式?

1)


2) 有很多方法可以指定孩子。您可以使用CSS选择器或一些jsoup便利方法

如果我想从以下html中提取文本
foo

<html>
 <body>
  <div> 
   <span><b>foo</b></span> 
   <span><b>bar</b></span>
  </div>
 </body>
</html>
决定采用哪种方式实际上取决于正在解析的文档的HTML结构。有关更多示例,请参见



3) 检查源代码,而不是浏览器中呈现的代码。Jsoup不调用JavaScript。如果页面的DOM在加载时更改,则需要在解析页面之前呈现页面。下面是一个如何执行此操作的示例:

Hello。请另外,由于jsoup是Java库,您可能会使用
Java
标记而不是
javascript
获得更好的响应。第一个和第二个问题的答案可能在这里以及元素/元素文档中(如果您对单独处理文本节点感兴趣,也可能使用Node).那么我应该编辑这个问题并多做两个线程吗?我已经看过了,但我仍然无法获得我所需要的正确值:(。是的,试着在帖子中一次只关注一件事。如果你对代码有特定的问题,最好是包含你的代码尝试(/)在帖子中。好吧,我想这次我会把它们放在一起,因为它们都与彼此和图片相关,我会编辑并添加代码来源的网站,这样人们就可以在图片旁边看到它。下次我会这样做,非常感谢,尽管我仍然无法获得我在图片中指出的代码:(.是因为文本本身在span/元素之外吗?在google开发工具中,我可以找到MD5儿童并获取它,但在JSoup中,我无法做到这一点:(.@ShlomiBazel我编辑了我对问题1的回答。看起来你正在抓取的站点仅限于某些用户代理。我将其设置为Mozilla,并能够提取md5哈希。谢谢你,伙计,谢谢你。
#additional-info-content > div:file-details > div:nth-child(2) > div:nth-child(1) > span
    // connect to url and retrieve source code as document
    Document doc = Jsoup
            .connect(url)
            .userAgent("Mozilla/5.0")
            .referrer("http://www.google.com")
            .get();

    String md5= doc

            // use CSS selector to grab only enums which contain md5
            .select("div#file-details.extra-info > div.enum-container > div.enum:contains(md5)")

            // use the first element in the result set
            .first()

            // use only its text node and ignore the text node of the span
            .ownText();
<html>
 <body>
  <div> 
   <span><b>foo</b></span> 
   <span><b>bar</b></span>
  </div>
 </body>
</html>
    doc.select("div > span > b").last().ownText();

    doc.select("div > span > b").get(1).ownText();

    doc.select("div > span:last-child > b").text();

    doc.select("div > span:last-child").text();

    doc.select("div > span").last().text();

    doc.select("div > span").get(1).text();

    doc.select("div > span:last-child > b").first().ownText();

    doc.select("span > b").last().text();