如何使用jsoup从带有多个html标签的html文件中提取正文内容

时间:2016-11-27 14:57:06

标签: java html jsoup

我需要用jsoup解析一个包含多个html标签的html文件。

我将文档分成许多html元素,我能够提取一些标签,如标题

Document doc = Jsoup.parse(file, "UTF-8");
Elements el = doc.getElementsByTag("html");
for (Element e : el) {
   writer = new PrintWriter(output);
   writer.println(e.select("title"));
   writer.println(e.select("body"));
   writer.close();
}

输出

<title>titletext</title>

但它似乎忽略了每个元素中body标记的存在。

使用Document.body()只会将身体标签的所有内容一起吐出。

由于我无法从每个元素获取文档以使用body(),我如何单独从每个元素中提取body标签?

1 个答案:

答案 0 :(得分:0)

假设您有这样的文件:

<!DOCTYPE html>
<html>
<head>
<title>Page Title 1</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph on page 1.</p>
</body>
</html> 

<html>
<head>
<title>Page Title 2</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph on page 2.</p>
</body>
</html> 

<html>
<head>
<title>Page Title 3</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph on page 3.</p>
</body>
</html> 

您可以在每个html部分(&lt; / html&gt;)的末尾拆分文件,并分别解析每个部分。示例:

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupTest {

    public static void main(String argv[]) throws IOException {
        String multihtml = new String(Files.readAllBytes(Paths.get("C:\\users\\manna\\desktop\\test.html")));
        String [] htmlParts = multihtml.split("(?<=</html>)");
        Document doc;  

        for(String part : htmlParts){
            doc = Jsoup.parse(part);
            System.out.println("");
            System.out.println("title : "+doc.title());
            System.out.println("");
            System.out.println(doc.body().outerHtml());
            System.out.println("******************************************");            
        }       
    } 
}