我在这个网页上使用了htmlUnit http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html 有一个部分索引,每个部分都有自己的文本。我想创建一个方法,返回传递section的名称的文本。
所有部分的名称都在名为'lista'的标签内,我以这种方式得到这些信息:
HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html");
final String pageAsText = page.asText();
final Iterable<DomElement> div = page.getHtmlElementById("lista").getChildElements();
ArrayList<String> menu = new ArrayList<>();
for (DomElement e : div) {
menu.add(e.asText());
}
所有信息都在我迭代的范围内:
Iterable<DomElement> desc = page.getHtmlElementById("foglietto_descrizioni").getChildElements();
每个部分都在没有id或class的h2标签内。所以我不知道如何将标签h2之间的所有文本提取到另一个标签。
答案 0 :(得分:1)
如果元素层次结构遵循模式,则可以访问 H2 标记:
$('#Indicazioni').parent()
然后,如果你想获得H2里面的所有文字,你可以使用:
$('#Indicazioni').parent().text()
不确定是否能回答你的问题。
我没有使用过HtmlUnit,但据我所知,它支持jQuery。
答案 1 :(得分:0)
您可以使用.getByXPath,如下例所示:
try (WebClient webClient = new WebClient()) {
HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html");
HtmlElement span = page.getHtmlElementById("foglietto_descrizioni");
for (Object o : span.getByXPath(".//h2")) {
HtmlHeading2 h2 = (HtmlHeading2) o;
System.out.println("text 1 = " + h2.getFirstChild().getNextSibling().asText());
System.out.println("text 2 = " + h2.<HtmlElement>getFirstByXPath("./span").asText());
}
}
请注意,.
表示来自此节点,/
表示搜索直接子节点,而//
表示递归搜索子节点和子孙,