2016-11-27 103 views
0

多个HTML标记需要解析HTML文件,包含不止一个html标签,用jsoup。我如何从HTML文件中提取正文内容与jsoup

我分裂文件成许多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(); 
} 

输出

,但它似乎忽略了body标签是否存在等在每个元素。

使用Document.body()刚刚吐body标签的所有内容一起。

既然不能得到从每个元件使用上body()一个文件,我怎么能提取从每个元件seperately body标签?

+3

具有多个html标记的文件不是有效的HTML文件。这是几个HTML页面连接(推测),或者如果它们嵌套更糟。你为什么要处理这些无效的文件?没有办法让输入成为几个有效的HTML文件吗?否则,请自行分割文件,然后分别分析每个HTML文档。 –

回答

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部分的结尾(</HTML>)划分的文件,并分别分析每个部分。示例:

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("******************************************");    
     }  
    } 
}