我试图用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>
 #document hello hello again
</body>
</html>
所以它甚至没有找到<frameset>
有什么想法吗?
答案 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());