【问题标题】:Jsoup: Extract text as a human would read itJsoup:以人类阅读的方式提取文本
【发布时间】:2014-08-05 04:46:49
【问题描述】:

我需要从 HTMl 片段中提取所有文本。

例子:

输入<p><div>how are</div> you doing?</p><p>I'm doing well</p>

输出how are you doing? I'm doing well

我发现了一些问题,比如这个Text Extraction from HTML Java,处理类似的问题,但它们都只是删除了<p> 标签,但没有删除内部元素。

最初,我尝试列出每个 <p> 标记的子级并连接它们的内容,并递归检查每个孙子级并连接其子级等等,直到只有文本。问题是一些文本没有被标签包围,只是简单的。

我也尝试过Jsoup.parse(html).select("p").text(),但我得到了"[]I'm doing well" 作为输出。

这似乎是网络爬虫类程序的常见需求,但我找不到解决方案。

【问题讨论】:

  • 这是对 HTML 的滥用。子元素意味着相关但独立的内容。因此,为什么您正在努力寻找类似的解决方案。您需要实现的是一种递归解决方案,以确保在进入下一个元素之前解析当前元素的所有子元素。
  • @christopher Ohhhh... 意外地,我在编写单元测试时输入了div 而不是span(我随后将其复制到这个问题中)。如果我用 span 标签替换它,它现在可以工作了。很抱歉浪费大家的时间。

标签: java html jsoup


【解决方案1】:

试试这个:

Document doc = Jsoup.parse("<p><div>how are</div> you doing?</p><p>I'm doing well</p>");
String body = doc.body().text();

【讨论】:

  • doc.body().text() 仅在编译文本时删除 span 标签,但在使用 div 标签时不会。
  • 这是一个非常好的解决方案。向我 +1!
猜你喜欢
  • 2013-10-25
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
  • 1970-01-01
  • 2016-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多