java - JSOUP 从 p 和 span 中抓取 html 文本

标签 java html jsoup

我很难获得正确的输出。请参阅以下来自 HTML 的示例文本:

 <p><span class="v">1</span> Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.</p>

 <p><span class="v">2</span> Hij doet mij nederliggen in grazige weiden; Hij voert mij zachtjes aan zeer stille wateren.</p>

 <p><span class="v">3</span> Hij verkwikt mijn ziel; Hij leidt mij in het spoor der gerechtigheid, om Zijns Naams wil.</p>

我想获取 paragraph

的值,即 Een psalm van David。 De HEERE is mijn Herder, mij zal niets ontbreken. 基于用户选择的verse

到目前为止,这是我所做的:

HttpGet get = new HttpGet(url);
HttpResponse resp = client.execute(get);

String content = EntityUtils.toString(resp.getEntity());
Document doc = Jsoup.parse(content);

StringBuilder sb = new StringBuilder();

Elements passage = doc.select("p > span.v");

sb.append(passage.text() + "\n");

Elements links = doc.select(className);
for (Element link : links) {
    sb.append(link.text() + " ");
}
Log.e("ELEMENTS", "" + sb.toString());
response = sb.toString();

但我只得到了诗句编号。如何获得正确的输出?我很乐意提供任何帮助。谢谢。

最佳答案

假设你想获取第 1 节的段落,你可以使用:

  1. :has(selector) 只获取包含与选择器匹配的元素的元素
  2. 然后用作选择器 span.v:containsOwn(1) 以指示您想要 v 类的 span text 包含 1
  3. 最后使用 ownText() 获取元素本身的文本而不是其子元素的文本,否则如果您想要两者都使用 text()

所以代码可以是:

String className = "v";
int verse = 1;
Element p = doc.select(String.format("p:has(span.%s:containsOwn(%d))", className, verse))
    .first();
System.out.println(p.ownText());

输出:

Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.

如果要获取所有段落的内容,代码可以是:

StringBuilder sb = new StringBuilder();
Elements paragraphs = doc.select("p:has(span.v)");
for (Element p : paragraphs) {
    sb.append(p.ownText() + "\n");
}
System.out.println(sb);

输出:

Een psalm van David. De HEERE is mijn Herder, mij zal niets ontbreken.
Hij doet mij nederliggen in grazige weiden; Hij voert mij zachtjes aan zeer stille wateren.
Hij verkwikt mijn ziel; Hij leidt mij in het spoor der gerechtigheid, om Zijns Naams wil.

关于java - JSOUP 从 p 和 span 中抓取 html 文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40522752/

相关文章:

java - 将字符从一个点删除到另一点

java - 到底什么是资源泄漏?

jquery - 单击元素行后的 Div block (响应)

javascript - 带有 Font Awesome 控件的 Bootstrap 4.1.0 轮播,但悬停在控件上会使它们消失

java - 如何使用微调器将选择保存到共享首选项

java - Java Netty跨 channel 通信失败

javascript - 下一个和上一个元素

android - 如何在android中使用jsoup获取当天的国家地理照片

java - 如何从 JSOUP 调用 Javascript __doPostBack

javascript - 如何使用 Java 代码从 HTML 中获取变量值?