我想获取图片中的文本,在 Google 开发人员工具中我会这样做(我基本上进入跨度的另一个子节点以在 DevTools 中找到 md5 但在 Jsoup 中它似乎不同并且只返回“md5”文本)
document.getElementById("additional-info-content").childNodes[1].children[1].childNodes[1].innerHTML
我无法使用 JSoup dom/selector 获取它。 (如果可以给出这两个例子的话)
2.
我如何在 Jsoup 的 CSS 中指定一个 child ? 比如我右击图中蓝色标线上方的span class字段,点击“Copy Selector”:
#file-details > div:nth-child(2) > div:nth-child(1) > span
它给我文件详细信息作为第一个 div,甚至认为它不是文档中唯一的文件详细信息,但是好吧,假设它应该是这样的(?):
#additional-info-content > div:file-details > div:nth-child(2) > div:nth-child(1) > span
我如何设法将它翻译成与 child 一起工作的 JSoup CSS 脚本? (如果可能的话,还有 DOM 示例)
3.
在寻找特定值/节点时,是否有很好的洞察力,如何寻找以及如何找到正确的路径?
我现在所做的基本上是打开 Developer Tools,然后单击一个唯一的 div 类名,然后在 DevTools 中的属性窗口中检查子节点,并继续挖掘子节点,直到找到正确的路径。 ..(就像我在第一个问题中复制的一样)
有没有更好的方法来看待这个问题?
我的意思是,使用 DevTools 控制台非常简单,只需编写 .children[1].childnodes[3].children[1] 查看属性并看到我需要的正确属性,但我知道这不是我猜的正确方式?
最佳答案
1)
// 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();
2) 有很多方法可以指定 child 。您可以使用 CSS 选择器或一些 jsoup 便捷方法。
如果我想从以下 html 中提取文本 foo
:
<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();
决定采用哪种方式实际上取决于您正在解析的文档的 HTML 结构。参见 CSS Selectors更多示例。
3) 检查源代码,而不是浏览器中呈现的代码。 Jsoup 不调用 JavaScript。如果你的页面的 DOM 在加载时发生了变化,那么你需要在解析之前渲染页面。以下是如何执行此操作的示例:https://stackoverflow.com/a/38572859/1176178
关于java - JSoup CSS/DOM 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38601311/