当前位置: 首页 > 面试题库 >

JSOUP为HTML添加额外的编码内容

马博学
2023-03-14
问题内容

实际上,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> &lt;/div&gt; &lt;/div&gt; &lt;/body&gt; &lt;/html&gt;
   </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>

如果您检查已编码的内容,您将意识到它们正在关闭标签。

&lt;/div&gt;  = </div> 
&lt;/div&gt;  = </div>
&lt;/body&gt; = </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