所以,我一直在使用jSoup来解析网站上的一些metaData,效果很好。问题是我需要的一些重要元数据不在任何标签内,我不知道如何获得它。
以下是我需要从我的网址获取的数据示例:
<div class="newclass ">
<div>
<p>
<strong>Arist:</strong> Picasso Biggie <em>|</em>
<strong>Released:</strong> 3 years ago <em>|</em>
<strong>Album:</strong> Picasso Biggie: The Big OneUp <em>|</em>
<strong>Producer:</strong> Various <em>|</em>
<strong>Featuring:</strong> Mount Kimbie <em>|</em>
</p>
</div>
</div>
我在html中寻找的是艺术家“Picasso Biggie”,它是“3年前”发行的那一年,以及专辑“Picasso Biggie:The Big OneUp”等...... 我已经研究过使用带有jSoup的节点,但我只能找到一些例子,并且无法弄清楚如何让jSoup去做我正在寻找的东西。
这是我尝试过的代码,它什么都不返回:
Document doc = Jsoup.connect(URL).get;
Elements dakss1 = doc.select(".newclass ");
for(Element dakss : rayz1) {
TextNode quill = (TextNode) rayz1.nextSibling().childNode(0);
System.out.println("" + quill);
}
更新: Shaowei Ling的答案非常适合在标签之外获取所有文字,但我想知道是否有办法只指定特定节点,所以我可以只得到具体的话。例如,而不是
Picasso Biggie
3 years ago
Picasso Biggie: The Big OneUp
Various
Mount Kimbie
我只得到:
3 years ago
如果我需要的只是专辑发行的那一年?
更新#2: 好的,为了解决我的第二个问题,即我使用与上面相同的HTML结构解析多个项目,我只是继续在jSoup的选择器查询中包含我想要的特定元素。所以,例如,如果我想获得Picasso Biggies专辑的所有发行日期。这是我使用的代码:
Document doc = Jsoup.connect(URL).get;
Elements dakss1 = doc.select(".newclass p strong:contains(Released) ");
for(Element dakss : dakss1) {
Node nodeWithReleaseDates =(Node) dakss.nextSibling();;
System.out.println("" + nodeWithReleaseDates);
}
这继续并且返回了毕加索Biggie各种专辑所需的所有发行日期,如下所示:
3 years ago
2 years ago
7 months ago
1 month ago
答案 0 :(得分:3)
在您的问题中,有一个未定义的变量rayz1
。
示例代码可以帮助您。我已经运行它,它有效。
String html =
"<div class=\"newclass \">\n"
+ " <div>\n"
+ " <p> \n"
+ " <strong>Arist:</strong> Picasso Biggie <em>|</em>\n"
+ " <strong>Released:</strong> 3 years ago <em>|</em>\n"
+ " <strong>Album:</strong> Picasso Biggie: The Big OneUp <em>|</em> \n"
+ " <strong>Producer:</strong> Various <em>|</em> \n"
+ " <strong>Featuring:</strong> Mount Kimbie <em>|</em> \n"
+ " </p>\n"
+ " </div>\n"
+ "</div>";
Document doc = Jsoup.parse(html);
Elements dakss1 = doc.select("div p strong");
for (Node dakss : dakss1) {
System.out.println(dakss.nextSibling().toString().replace(" ", "").trim());
}
结果将是:
Picasso Biggie 3 years ago Picasso Biggie: The Big OneUp Various Mount Kimbie