我想使用Jsoup从HTML页面中提取所有文本,并返回所有文本的单个字符串,而不包含任何HTML。我使用的代码一半有效,但具有连接元素的效果,这些元素会影响我对字符串的关键字搜索。
这是我正在使用的Java代码:
String resultText = scrapePage(htmldoc);
private String scrapePage(Document doc) {
Element allHTML = doc.select("html").first();
return allHTML.text();
}
针对以下HTML运行:
<html>
<body>
<h1>Title</h1>
<p>here is para1</p>
<p>here is para2</p>
</body>
</html>
输出resultText会给出&#34; Titlehere是para1here是para2&#34; 意味着我无法搜索单词&#34; para1&#34;唯一的一个词是&#34; para1here&#34;。
我不想将文档拆分成除必要之外的其他元素(例如,获取所有H1,p.text元素,因为我可以匹配各种各样的标记
(例如 data1data2 会来自):
<td>data1</td><td>data2</td>
有没有办法可以从页面获取所有文本但是还包含标签之间的空格?我不想保留whitepsace,否则不需要保留换行符,因为我只是准备一个关键字字符串。由于这个原因,我可能会将所有空白区域修剪为单个空格。
答案 0 :(得分:0)
我没有使用 JSoup 1.7.3 。
来解决这个问题这是我用于测试的完整代码:
final String html = "<html>\n"
+ " <body>\n"
+ " <h1>Title</h1>\n"
+ " <p>here is para1</p>\n"
+ " <p>here is para2</p>\n"
+ " </body>\n"
+ "</html>";
Document doc = Jsoup.parse(html);
Element element = doc.select("html").first();
System.out.println(element.text());
输出:
Title here is para1 here is para2
你可以运行我的代码吗?如果你还没有1.7.3,也可以更新到更新版本的jsoup。
答案 1 :(得分:0)
之前的答案是不正确的,因为它只是因为添加到每一行的“\ n”行结尾,但实际上你可能没有在每行HTML行的末尾有行结束......
答案 2 :(得分:0)
void example2text() throws IOException {
String url = "http://www.example.com/";
String out = new Scanner(new URL(url).openStream(), "UTF-8").useDelimiter("\\A").next();
org.jsoup.nodes.Document doc = Jsoup.parse(out);
String text = "";
Elements tags = doc.select("*");
for (Element tag : tags) {
for (TextNode tn : tag.textNodes()) {
String tagText = tn.text().trim();
if (tagText.length() > 0) {
text += tagText + " ";
}
}
}
System.out.println(text);
}