JSOUP为html添加了额外的编码内容
实际上JSOUP在我的jSOUP解析器中为我的HTML添加了一些额外的编码值。我正在尝试通过以下方式来处理它
String url = "http://iqtestsites.adtech.de/pictelatest/custombkgd/StylelistDevil.html"; System.out.println("Fetching %s..."+url); Document doc = Jsoup.connect(url).get(); //System.out.println(doc.html()); Document.OutputSettings settings = doc.outputSettings(); settings.prettyPrint(false); settings.escapeMode(Entities.EscapeMode.base); settings.charset("ASCII"); String html = doc.html(); System.out.println(html);
但是由于某种原因找不到实体类并且发出错误。 我包含的lib是
import org.jsoup.Jsoup; import org.jsoup.helper.Validate; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements;
最初的HTML是
来自JSOUP的doc.html()
给出了:
</div> </div> </body> </html>
iframe元素已经添加了一些编码的东西。
请帮忙。
谢谢Swaraj
实际上jsoup并没有添加编码的东西。 Jsoup只是添加了似乎缺少的结束标记。 让我解释。
首先,jsoup尝试格式化你的html。 在您的情况下,这意味着它将添加缺少的结束标记。 例
Document doc = Jsoup.parse("testtest"); System.out.println(doc.html());
输出:
test test
如果你检查编码的东西,你会发现它们正在关闭标签。
</div> = </div> = </body> =
如果你去网站并按Ctrl + U (使用chrome),你会看到jsoup将解析什么。 Chrome会为其识别的有效html标记添加颜色。 由于某些奇怪的原因,它无法识别底部的标签(与转义字符一起出现的标签)。 出于同样的原因,jsoup也存在关闭标签的问题。 它不会将它们视为结束标记,而是将其视为文本,因此它会将它们转义,然后通过添加这些标记来规范化html,如前所述。
编辑我设法复制行为。
Document doc = Jsoup.parse("test"); System.out.println(doc.html());
您可以看到完全相同的行为。 问题在于自关闭iframe。 这样做可以解决问题
Document doc = Jsoup.parse("test"); System.out.println(doc.html());
编辑2如果您只想在不构建文档对象的情况下接收html,则可以执行此操作
Connection.Response html = Jsoup.connect("http://iqtestsites.adtech.de/pictelatest/custombkgd/StylelistDevil.html").execute(); System.out.println(html.body());
有了上述内容,您可以找到自关闭iframe并将其替换为有效表示(或完全删除它)。 然后你可以用Jsoup.parse()
解析那个字符串。这将解决在iframe之后无法识别结束标记的问题,因为它是有效的。