实际上,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);
但是由于某种原因找不到Entities类,并给出了错误。我包含的库是
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是
<!DOCTYPE html>
<html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="SAF" id="global-header-light">
<head>
</head>
<body>
<div style="background-image: url(http://aka-cdn-ns.adtech.de/rm/ads/23274/HPWomenLOFT_1381687318.jpg);background-repeat: no-repeat;-webkit-background-size: 1001px 2059px; height: 2059px; width: 1001px; text-align: center; margin: 0 auto;">
<div style="height:2058px; padding-left:0px; padding-top:36px;">
<iframe style="height:90px; width:728px;" />
</div>
</div>
</body>
</html>
在doc.html()
从JSOUP给出了这样的:
<!DOCTYPE html>
<html xmlns:og="http://opengraphprotocol.org/schema/" xmlns:fb="http://www.facebook.com/2008/fbml" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en" class="SAF" id="global-header-light">
<head>
<style>
</style>
</head>
<body>
<div style="background-image: url(aol.jpeg); background-repeat: no-repeat;-webkit-background-size:90720;height:720; width:90; text-align: center; margin: 0 auto;">
<div style="height:450; width:100; padding-left:681px; padding-top:200px;">
<iframe style="height:1050px; width:300px;"></iframe> </div> </div> </body> </html>
</div>
</div>
</body>
</html>
iframe元素已添加一些已编码的内容。
请帮忙。
感谢Swaraj
实际上,jsoup不会添加编码的东西。Jsoup只是添加了 似乎 缺少的结束标记。让我解释。
首先,jsoup尝试格式化html。在您的情况下,这意味着它将添加缺少的结束标记。 例
Document doc = Jsoup.parse("<div>test<span>test");
System.out.println(doc.html());
输出:
<html>
<head></head>
<body>
<div>
test
<span>test</span>
</div>
</body>
</html>
如果您检查已编码的内容,您将意识到它们正在关闭标签。
</div> = </div>
</div> = </div>
</body> = </body>
如果您转到该站点并按Ctrl
+
U
(使用chrome),则将看到jsoup将解析的内容。Chrome会将颜色赋予其可以识别的有效html标签。由于某种奇怪的原因,它无法识别底部的标签(与转义字符显示的标签相同)。出于同样的原因,jsoup的那些结束标记也存在问题。它不会将它们视为结束标签,而是将其视为文本,因此它会将它们转义,然后通过添加这些标签来规范化html,如我之前所述。
编辑 我设法复制行为。
Document doc = Jsoup.parse("<iframe /><span>test</span>");
System.out.println(doc.html());
您可以看到完全相同的行为。问题在于自动关闭iframe。像这样解决问题
Document doc = Jsoup.parse("<iframe></iframe><span>test</span>");
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之后无法识别结束标记的问题,因为它将是有效的。
嗨,我正在尝试重新创建一个足球锦标赛,已经能够创建一个地图的集团,但现在想要添加到每个国家的点数。有人有什么好主意吗?请看看我已经做了什么。
这是网站中的一个常见功能,用户可以自定义其报告(他们可以选择数据库表中要在其报告中显示的列名,如https://i.stack.imgur.com/GxOGz.jpg). 我知道如何在SQL server中使用Select语句来查找列的系统属性(如column\u name、data\u type、length等),但是,如何为数据库列添加额外的自定义属性(如is\u visible、owner、
问题内容: 我正在使用一个Android应用程序,该应用程序加载HTML页面并在Web视图中显示它。问题是我想添加我的自定义CSS(加载的HTML没有任何CSS或指向CSS的链接)。如何使用jsoup将自定义css添加到HTML代码中?我无法修改html。Webview之后如何打开它?谢谢 问题答案: 几种方法。您可以用来将HTML附加到元素上。 或者,用于向现有元素添加属性。这是一个添加到所有链
问题内容: 我使用jsoup从不同页面的html源代码中提取了一些信息。它们大多数是UTF-8编码的。其中之一是使用ISO-8859-1编码的,这会导致一个奇怪的错误(在我看来)。 包含错误的页面是:http : //www.gudi.ch/armbanduhr- metall- wasserdicht-1280x960-megapixels-p-560.html 我用以下代码阅读了所需的Stri
我有一个,作为布局管理器,我正在尝试获得这种安排: 忽略边框的额外深蓝色空间。 我总共有5列和3行,所有组件都将设置PreferredSize()设置为精确值,以完全适合同样具有首选大小(170 x 115)的JPanel。 问题是似乎在最后一列宽度上添加了30 pxls,因为仅在的宽度上添加了30 pxls(总共200个)组件显示正确,如下所示: 但由于额外的空间,最后一列被分隔开了。 它添加了
问题内容: 我有这两个课(表) 还有这个: 运行此代码后,在数据库(student_course)中创建了一个额外的表,现在我想知道如何在该表中添加额外的字段,例如(Grade,Date和…(我的意思是student_course表)),我看到了一些解决方案,但我不喜欢它们,而且我对它们有一些问题: 第一个样品 问题答案: 如果在链接表(STUDENT_COURSE)上添加额外的字段,则必须根据s