我试图编写一个网络蜘蛛来从html页面中提取文本,我使用Jsoup来解析html,简单的代码如下所示:
File file = new File("test2.html");
Document doc = Jsoup.parse(file, "utf-8");
System.out.println(doc.select("body").text());
test2.html如下所示:
hellothis is a simple testtest link
<!-- test here -->
<ul>
<li>test1</li>
<li>test2</li>
<li>test3</li>
<li>test4</li>
<li>test5</li>
<li>test6</li>
</ul>
似乎Jsoup将textarea中的代码视为所有文本。
如何删除所有html tages,只保留真实文本?
答案 0 :(得分:0)
正如fairjm指出的那样,这是预期的行为。
如果您使用jsoup检查textarea
元素,您会发现:
doc.select("textarea").first().childNodeSize()
返回1
)doc.select("textarea").first().childNode(0).nodeName()
返回#text
)<强>解决方案强>
如果你真的只想删除任何标签 - 即使它们是故意在文本字段中 - 双重解析内容(侧注:当然双重解析会降低性能,但除此之外只有文字被定位时不应该有更多的缺点):
File file = new File("test2.html");
Document doc = Jsoup.parse(file, "utf-8");
System.out.println(Jsoup.parse(doc.select("body").text(), "UTF-8").text());
<强>输出强>
hellothis is a simple testtest link test1 test2 test3 test4 test5 test6