如何用jsoup解析简单的html代码?安卓

时间:2014-06-21 12:32:58

标签: android html html-parsing jsoup

这是我的HTML代码的一部分

                    <div class="entry themeform">
                        <h3>dr James &#8211; opiekun naukowy</h3>
    <p><a href="http://www.page.com/picture.jpg"><img class="alignnone size-medium wp-image-31" alt="grynia" src="http://www.page.com/picture.jpg" width="200" height="300" /></a></p>
    <h3>Kevin &#8211; prezes</h3>
    <p><a href="http://www.page.com/picture.jpg"><img class="alignnone size-medium wp-image-35" alt="prezes" src="http://www.page.com/picture.jpg" width="217" height="300" /></a></p>
    <h3>Lucy &#8211; wice prezes</h3>
    <p><a href="http://www.page.com/picture.jpg"><img class="alignnone size-medium wp-image-36" alt="Lucy" src="http://www.page.com/picture.jpg" width="225" height="300" /></a></p>
    <h3>Zarząd</h3>
    <p><a href="http://www.page.com/picture.jpg"><img class="alignnone  wp-image-37" alt="zarzad_KNSE" src="http://www.page.com/picture.jpg" width="489" height="256" /></a></p>
                        <div class="clear"></div

>
                </div><!--/.entry-->

首先,我想从这个div中的标签解析文本。如果你帮我解析这个div中的图像也会很好(我改变了图片网址,因为隐私)。我是jsoup的新手,所以如果你给我写一个代码,只是为了将文本解析为android活动,我将不胜感激。

修改 好的,一开始我正在尝试解析你的(SMR)教程中显示的标题。

以下是代码:

import java.io.IOException;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import com.example.uwbnewapptest.R;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class KnseActivity extends Activity {

    //TextView title;
    String url="http://www.google.com";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.knse_main);
        //title = (TextView) findViewById(R.id.textView1);

    }


    public void bt(View v){
        new Title().execute();
    }

     private class Title extends AsyncTask<Void, Void, Void> {
            String title;



            @Override
            protected Void doInBackground(Void... params) {
                try {
                    // Connect to the web site
                    Document document = Jsoup.connect(url).get();
                    // Get the html document title
                    title = document.title();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }

            @Override
            protected void onPostExecute(Void result) {
                // Set title into TextView
                TextView txttitle = (TextView) findViewById(R.id.textView1);
                txttitle.setText(title);
            }

        }

}

但是当我运行应用程序并单击按钮时,我有一个错误

编辑2:

06-21 16:18:01.808: E/AndroidRuntime(28063): FATAL EXCEPTION: AsyncTask #2
06-21 16:18:01.808: E/AndroidRuntime(28063): Process: com.example.uwbnewapptest, PID: 28063
06-21 16:18:01.808: E/AndroidRuntime(28063): java.lang.RuntimeException: An error occured while executing doInBackground()
06-21 16:18:01.808: E/AndroidRuntime(28063):    at android.os.AsyncTask$3.done(AsyncTask.java:300)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.FutureTask.run(FutureTask.java:242)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.lang.Thread.run(Thread.java:841)
06-21 16:18:01.808: E/AndroidRuntime(28063): Caused by: java.lang.NoClassDefFoundError: org.jsoup.Jsoup
06-21 16:18:01.808: E/AndroidRuntime(28063):    at com.uwbapp.KnseActivity$Title.doInBackground(KnseActivity.java:43)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at com.uwbapp.KnseActivity$Title.doInBackground(KnseActivity.java:1)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at android.os.AsyncTask$2.call(AsyncTask.java:288)
06-21 16:18:01.808: E/AndroidRuntime(28063):    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
06-21 16:18:01.808: E/AndroidRuntime(28063):    ... 4 more

2 个答案:

答案 0 :(得分:1)

使用jsoup提取数据有多种方法。检查http://jsoup.org/cookbook/extracting-data/selector-syntax

在您的情况下,您可以使用

来获取文本和图像来源
Document doc = Jsoup.connect(url).get();
for(Element div : doc.select("div")){
    System.out.println(div.text());
    for(Element img : div.select("img")){
        System.out.println(img.attr("src"));
    }
}

答案 1 :(得分:0)

这是我的html代码的一部分

<pre style="word-wrap: break-word; white-space: pre-wrap;">90</pre>

我是jsoup的新手,所以如果您为我编写代码以将文本解析为android活动,我将不胜感激。