有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Jsoup未解析java嵌套html

我试图用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(包括#文档,但不包括框架或内部html)

是否有人知道如何使用JToice获取内部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) 个答案

  1. # 1 楼答案

    下面是如何解析嵌套的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());