簡體   English   中英

Jsoup無法解析嵌套的html

[英]Nested html not being parsed by 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>

有任何想法嗎?

這是解析嵌套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());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM