嵌套的html没有被Jsoup解析

时间:2014-04-26 01:06:40

标签: java html jsoup

我试图用Jsoup解析一个页面,但html似乎没有正确解析。

一般结构是:

    <html>
        <head> ... </head>
        <frameset ...>
            <frame ...>
                #document
                    <html> ... </html>
            </frame>
        </frameset>
   </html>

当我解析html并用
Document doc = Jsoup.parse(html); System.out.println(doc.html());打印时,它打印出外部html(包括#document,但不打印帧或内部html)。

有谁知道如何使用Jsoup获取内部html,还是应该考虑使用不同的库? 感谢。

编辑:这是我正在解析的网站。我订阅了它;不知道它是否会让你们中的任何人进入。

http://database.asahi.com/library2/login/login.php

验证后,您将转到:http://database.asahi.com/library2/main/start.php

编辑2:

<html>
   <head></head>
   <frameset rows="58,*" border="0">
      <frame name="Header"> </frame>
      <frame name="Introduce">
         #document
            <html>
               <head>hello</head>
               <body>hello again</body>
            </html>
      </frame>
   </frameset>
</html>

然后我跑:

    Document doc = Jsoup.parse(html);
    Elements elems = doc.select("frameset > frame:last-child");
 // print(elems);
    switch(elems.size()) {
        case 0: break;
        case 1: doc = Jsoup.connect(elems.first().attr("src")).get(); break;
        default: break;
    }

  System.out.println(doc.html());

解析后的html(doc.html()):

<html>
 <head></head>
 <body>
  &iuml;&raquo;&iquest;      #document  hello hello again   
 </body>
</html>

所以它甚至没有找到<frameset>

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

以下是如何解析嵌套的html:

// Fetch the page with frameset
Document doc = Jsoup
               .connect("http://database.asahi.com/library2/login/login.php")
               .get(); // Add login, password etc

// Determine the frame url you want to parse...
// Note: I assume you want to parse the content of the first frame
Elements elts = doc.select("frameset > frame:first-child");
switch (elts.size()) {
    case 0:
        // No frame found ...
    break;

    case 1:
       Element frameElt = elts.first();
       Document frameDoc = Jsoup
                          .connect(frameElt.attr("src"))
                          .get();

       // Add the frameDoc nodes to doc (via frameElt#insertChildren) 
       frameElt.insertChildren(0, frameDoc.childNodes());
    break;

    default:
        // Strange result...
} 

System.out.println(doc.html());