简体   繁体   English

使用Jsoup解析HTML时出错

[英]Error when parsing Html using Jsoup

I want parsing html site and get a string value. 我想解析HTML网站并获取字符串值。 But i receive error when parsing div class. 但是我在解析div类时收到错误。

<div class="content clear">

I wrote above code but i received error. 我写了以上代码,但收到错误。

try {
        doc = Jsoup.connect("http://tvrehberi.hurriyet.com.tr/program-detay/308271/deli-deli-olma").get();

List<String> saatItem = new ArrayList<String>();
        for (Element  iterable : doc.getElementsByClass("content&clear")) {
            saatItem.add(iterable.text());

        }
catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

This error cause class have blank character. 此错误导致类具有空白字符。 If class value hasn't blank character, code runs perfectly. 如果类值不是空白字符,则代码可以完美运行。 How can i solve this problem ? 我怎么解决这个问题 ?

Error logs : 错误日志:

02-06 00:18:53.770: E/AndroidRuntime(28775): FATAL EXCEPTION: main
02-06 00:18:53.770: E/AndroidRuntime(28775): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.htmlparsingtutorial/com.example.htmlparsingtutorial.MainActivity}: android.os.NetworkOnMainThreadException
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread.access$600(ActivityThread.java:140)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.os.Looper.loop(Looper.java:137)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread.main(ActivityThread.java:4898)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at java.lang.reflect.Method.invokeNative(Native Method)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at java.lang.reflect.Method.invoke(Method.java:511)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at dalvik.system.NativeStart.main(Native Method)
02-06 00:18:53.770: E/AndroidRuntime(28775): Caused by: android.os.NetworkOnMainThreadException
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at java.net.InetAddress.lookupHostByName(InetAddress.java:385)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:236)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at java.net.InetAddress.getAllByName(InetAddress.java:214)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:70)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpConnection.<init>(HttpConnection.java:50)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpConnection$Address.connect(HttpConnection.java:340)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpConnectionPool.get(HttpConnectionPool.java:87)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpConnection.connect(HttpConnection.java:128)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpEngine.openSocketConnection(HttpEngine.java:315)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpEngine.connect(HttpEngine.java:310)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpEngine.sendSocketRequest(HttpEngine.java:289)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpEngine.sendRequest(HttpEngine.java:239)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at libcore.net.http.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:80)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:408)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at org.jsoup.helper.HttpConnection$Response.execute(HttpConnection.java:393)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at org.jsoup.helper.HttpConnection.execute(HttpConnection.java:159)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at org.jsoup.helper.HttpConnection.get(HttpConnection.java:148)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at com.example.htmlparsingtutorial.MainActivity.onCreate(MainActivity.java:90)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.Activity.performCreate(Activity.java:5206)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1083)
02-06 00:18:53.770: E/AndroidRuntime(28775):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2064)
02-06 00:18:53.770: E/AndroidRuntime(28775):    ... 11 more

Yes, this exception is thrown if you run networkcode in the main thread. 是的,如果您在主线程中运行networkcode,则会引发此异常。 The solution is to run your task as an AsyncTask . 解决方案是将任务作为AsyncTask运行。

btw. 顺便说一句 please test this code, on PC it works: 请测试此代码,在PC上可以运行:

Document doc = Jsoup.connect("http://tvrehberi.hurriyet.com.tr/program-detay/308271/deli-deli-olma").get();

List<String> saatItem = new ArrayList<String>();

for( Element element : doc.select("div[class=content clear]"))
{
    saatItem.add(element.text());
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM