标签: jsoup

Jsoup将输出从单引号更改为HTML属性的双引号

我们使用Jsoup来解析,操作和扩展html模板.到目前为止,一切正常,直到与HTML属性结合使用的单引号

<span data-attr='JSON'></span>
Run Code Online (Sandbox Code Playgroud)

该HTML代码段已转换为

<span data-attr="JSON"></span>
Run Code Online (Sandbox Code Playgroud)

这将与仅使用双引号指定为有效的内部json数据冲突

{"param" : "value"} //valid
{'param' : 'value'} //invalid
Run Code Online (Sandbox Code Playgroud)

所以我们需要强制Jsoup 不要将那些单引号改为双引号,但是如何?目前,这是我们解析和生成html内容的代码.

pageTemplate = Jsoup.parse(new File(mainTemplateFilePath), "UTF-8");
pageTemplate.outputSettings().escapeMode(Entities.EscapeMode.xhtml);
pageTemplate.outputSettings().charset("UTF-8");

... adding some html 

pageTemplate.html(); // will output the double quoted attributes :(
Run Code Online (Sandbox Code Playgroud)

html javascript java jsoup

6
推荐指数
1
解决办法
1541
查看次数

使用AsyncTask和Jsoup发布APK时出错

我收到这个错误:

03-04 09:55:55.915: W/dalvikvm(20171): Exception Ljava/lang/NullPointerException; thrown while initializing La/a/b/k;
03-04 09:55:55.915: W/dalvikvm(20171): Exception Ljava/lang/ExceptionInInitializerError; thrown while initializing La/a/b/l;
03-04 09:55:55.925: W/dalvikvm(20171): threadid=13: thread exiting with uncaught exception (group=0x40ab3300)
03-04 09:55:55.945: E/AndroidRuntime(20171): FATAL EXCEPTION: AsyncTask #1
03-04 09:55:55.945: E/AndroidRuntime(20171): java.lang.RuntimeException: An error occured while executing doInBackground()
03-04 09:55:55.945: E/AndroidRuntime(20171):    at android.os.AsyncTask$3.done(AsyncTask.java:299)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
03-04 09:55:55.945: E/AndroidRuntime(20171):    at …
Run Code Online (Sandbox Code Playgroud)

android exception apk jsoup android-asynctask

6
推荐指数
1
解决办法
1158
查看次数

Jsoup.parse()方法的替代方案

Jsoup.parse()用来解析这些数据.一切都很好,但需要很长时间.

例如,此数据需要20秒.用于解析.是否有其他解决方案满足我的需求?

码:

rezult = Jsoup.parse(res.parse().outerHtml(), "UTF-8").text();
Run Code Online (Sandbox Code Playgroud)

res它从文字链接.

===========更新=============

我将这个变量分开Jsoup.parse()并理解它是问题的根源.它需要20秒,而不是Jsoup.parse().

String tmp = res.parse().outerHtml();
Run Code Online (Sandbox Code Playgroud)

这只需要1秒:

rezult = Jsoup.parse(tmp, "UTF-8").text();
Run Code Online (Sandbox Code Playgroud)

我使用此代码从此链接获取数据.我使用Jsoup.parse()因为没有它我得到这样的东西:

<html>
    <head></head>
    <body>
    {&quot;success&quot;:true,&quot;currentUser&quot;:43743,&quot;careTypes&quot;:[{&quot;id&quot;:1,&quot;name&quot;:&quot;\u0421\u0442\u0438\u0440\u043a\u0430&quot;,&quot;description&quot;:&quot;\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u0436\u0438\u043c.&quot;},{&quot;id&quot;:2,&quot;name&quot;:&quot;\u041e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435&quot;,&quot;description&quot;:&quot;\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 
Run Code Online (Sandbox Code Playgroud)

相反:

{"success":true,"currentUser":43743,"careTypes":[{"id":1,"name":"\u0421\u0442\u0438\u0440\u043a\u0430","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0438\u0440\u043a\u0438 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0440\u0435\u0436\u0438\u043c."},{"id":2,"name":"\u041e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u0435","description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043e\u0442\u0431\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c, \u043a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u044b \u0432\u044b\u0431\u0435\u0440\u0435\u0442\u0435 
Run Code Online (Sandbox Code Playgroud)

但现在主要的问题是将res.parse()方法更改为其他更少的执行时间.

===========更新2 =============

 long t2 = …
Run Code Online (Sandbox Code Playgroud)

html parsing android json jsoup

6
推荐指数
1
解决办法
1095
查看次数

Jsoup WhiteList允许评论

我正在使用jsoup 1.7.3 Whitelist自定义配置.

显然它会清理<!-- ... -->文档中的所有HTML注释().

它还消毒<!DOCTYPE ...>元素.

  1. 如何让jsoup Whitelist允许注释?
  2. 如何将!DOCTYPE元素定义为具有任何属性的allowed元素?

java jsoup

6
推荐指数
1
解决办法
1658
查看次数

JSoup - 输出为 utf-8 时保留 html 实体?

我想在使用 JSoup 时保留 html 实体。这是来自网站的 utf-8 测试字符串:

String html = "<html><body>hello &#151; world</body></html>";

String parsed = Jsoup.parse(html).toString();
Run Code Online (Sandbox Code Playgroud)

如果以 utf-8 格式打印解析后的输出,则序列 — 看起来会转换为代码点值为 151 的字符。

有没有办法让 JSoup 在输出为 utf-8 时保留原始实体?如果我以ascii编码输出:

Document.OutputSettings settings = new Document.OutputSettings();
settings.charset(Charset.forName("ascii"));
Jsoup.parse(html).outputSettings(settings).toString();
Run Code Online (Sandbox Code Playgroud)

我去拿:

hello &#x97; world
Run Code Online (Sandbox Code Playgroud)

这就是我正在寻找的。

jsoup

6
推荐指数
1
解决办法
1131
查看次数

Jsoup 将 &amp; 转换为 &amp; 当我需要该信息时

在少数情况下,我传递具有用户执行某些操作的页面 url 的 JSON。该页面 url 将包含我需要的那些查询字符串部分,以便用户在我的应用程序需要时重定向到同一页面。我的 JSON 会像

{
"userId":"123456789",
"pageUrl":"http://exampl.com/designs.jsp?templateId=f348aaf2-45e4-4836-9be4-9a7e63105932&kind=123",
"action":"favourite"
}
Run Code Online (Sandbox Code Playgroud)

但是当我运行这个 json 时,Jsoup.clean(json, Whitelist.basic())我看到它&被替换为&amp;. 我可以配置Jsoup为不单独转义此字符吗?

java jsoup

6
推荐指数
2
解决办法
2091
查看次数

获取javax.net.ssl.SSLException:收到致命警报:使用Jsoup抓取数据时的protocol_version

我正在尝试使用Jsoup从站点获取数据.链接到该网站是点击这里!

这是我获取数据的代码.`

    // WARNING: do it only if security isn't important, otherwise you have 
    // to follow this advices: http://stackoverflow.com/a/7745706/1363265
    // Create a trust manager that does not validate certificate chains
    TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager(){
        public X509Certificate[] getAcceptedIssuers(){return null;}
        public void checkClientTrusted(X509Certificate[] certs, String authType){}
        public void checkServerTrusted(X509Certificate[] certs, String authType){}
    }};

    // Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
    } catch (Exception e) {
        ;
    }` …
Run Code Online (Sandbox Code Playgroud)

java ssl web-scraping jsoup

6
推荐指数
1
解决办法
2万
查看次数

如何让 jsoup 等待完整页面(跳过进度页面)加载?

我正在尝试使用 Jsoup 解析网页并提取数据。但是链接是动态的,在显示详细信息之前会抛出一个等待加载的页面。所以 Jsoup 似乎处理的是等待页面而不是详细信息页面。有没有办法让这个等到页面完全加载?

java web-scraping jsoup

6
推荐指数
1
解决办法
1万
查看次数

通过jsoup访问网页时获取404

我通过jsoup访问网页时获得404.但是通过浏览器访问时页面加载正常.

几天前我能通过jsoup访问该页面.但现在它抛出404.试图添加用户代理,超时等但没有运气.

在Firebug中,我收到404请求,但页面在浏览器中加载正常.

不确定页面如何在浏览器中呈现,而不是通过Java程序呈现.

Document doc = Jsoup.connect("http://example.com/stock.php?"+quote).userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36")
             .timeout(1000*7).get();
Run Code Online (Sandbox Code Playgroud)

在执行Java程序时,获得以下错误:

org.jsoup.HttpStatusException:HTTP错误提取URL.状态= 404,URL = http://example.com/stock.php?AAA
at org.jsoup.helper.HttpConnection $ Response.execute(HttpConnection.java:537)

如果需要更多信息,请告诉我.

jsoup

6
推荐指数
1
解决办法
485
查看次数

如何正确编码此URL

我试图使用JSoup获取此URL

http://betatruebaonline.com/img/parte/330/CIGUEÑAL.JPG

即使使用编码,我也有例外.我不明白为什么编码错了.它回来了

http://betatruebaonline.com/img/parte/330/CIGUEN%C3%91AL.JPG

而是正确的

http://betatruebaonline.com/img/parte/330/CIGUEN%CC%83AL.JPG

我怎么解决这个问题?谢谢.

private static void GetUrl()
{
    try
    {
        String url = "http://betatruebaonline.com/img/parte/330/";
        String encoded = URLEncoder.encode("CIGUEÑAL.JPG","UTF-8");
        Response img = Jsoup
                            .connect(url + encoded)
                            .ignoreContentType(true)
                            .execute();

        System.out.println(url);
        System.out.println("PASSED");
    }
    catch(Exception e)
    {
        System.out.println("Error getting url");
        System.out.println(e.getMessage());
    }
}
Run Code Online (Sandbox Code Playgroud)

java jsoup

6
推荐指数
1
解决办法
673
查看次数