Android_HTML解析器_jsoup

jsoup是一款JavaHTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOMCSS以及类似于jQuery的操作方法来取出和操作数据。

Jsoup的官方中文地址:http://www.open-open.com/jsoup/parse-document-from-string.htm

在这个网站上你可以找到一些说明,.jar文件的下载,doc文档的说明等等

jsoup的主要功能如下:

   1.从一个URL,文件或字符串中解析HTML

   2.使用DOMCSS选择器来查找、取出数据;

   3.可操作HTML元素、属性、文本;

   jsoup是基于MIT协议发布的,可放心使用于商业项目。

下面是一个纯java代码的例子,经测试可用:

public static void main(String[] args) throws IOException {  
  try { 
            Document doc = Jsoup.connect("http://passover.blog.51cto.com/").get(); 
            System.out.println(doc.title()); 
            Elements eles = doc.select("div.artHead"); 
            System.out.println(eles.first().select("h3[class=artTitle]")); 
        } catch (IOException e) { 
            e.printStackTrace(); 
        }    	  
    }  

注意:在运行的时候会出现下面这个错误:android.os.NetworkOnMainThreadException这是因为Android4.0不支持在UI线程中访问网络。怕线程阻塞假死!有两个方法可以解决,一个是在主程序中增加:

//详见StrictMode文档

StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()  
        .detectDiskReads()  
        .detectDiskWrites()  
        .detectNetwork()   // or .detectAll() for all detectable problems  
        .penaltyLog()  
        .build());  
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()  
        .detectLeakedSqlLiteObjects()  
        .detectLeakedClosableObjects()  
        .penaltyLog()  
        .penaltyDeath()  
        .build());  

另一种是启动线程执行下载任务:

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//启动线程执行下载任务

newThread(downloadRun).start();

}

/**

*下载线程

*/

RunnabledownloadRun=newRunnable(){

@Override

publicvoidrun(){

//TODOAuto-generatedmethodstub

updateListView();

}

};

出现错误二:11-0519:03:36.299:E/AndroidRuntime(20215):java.lang.RuntimeException:Can'tcreatehandlerinsidethreadthathasnotcalledLooper.prepare()

在报错的方法前加Looper.prepare();

//方法末尾加Looper.loop();

Jsoup类下面的方法都是静态可直接调用。几个方法的说明

Connect()方法,获得一个Connection,然后调用Connection对象get()方法获得Document对象。然后再解析Document对象

Connection提供了一些设置方法timeout(),url()等等

Jsoup一些类的说明:

DocumentextendsElement。一个HTML文档。即你发送请求时,Server发给你的数据。同样也可以调用Element的方法。常用方法:

body(),head(),nodeName(),title(),title(Stringtitle)

Elements:获得的HTML的各个元素的集合。通过Element.select(Stringstr)获取相应元素值

Elementfirst():返回第一个匹配的元素,如果为空,则返回null

Stringtext():返回所有匹配元素的混好text

Elementget(intindex);

Stringattr(StringattributeKey);

ElementHTMLelementtagname,attributes,childnodes(includingtextnodesandotherelements)。由Element,可以提取数据,理清节点图,操作HTML

text(); 返回String类型

getElementsByClass(Stringclass);

getAllElements(); 都返回Elements对象

getElementsByAttribute(Stringkey);

Elementsselect(Stringselector);根据匹配的selector选择相应的Elements

异常的详细信息如下:

ExceptionDetailsandroid.view.ViewRoot$CalledFromWrongThreadException:Onlytheoriginalthreadthatcreatedaviewhierarchycantouchitsviews.

进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处理,然后更新用户界面显示。但是,在主线线程之外的线程中直接更新页面显示的问题是:系统会报这个异常

也就是说必须在程序的主线程(也就是ui线程)中进行更新界面显示的工作。可以采用下面的方法之一来解决:无法在子线程中更新UI。为此,我们需要通过Handler物件,通知主线程UiThread来更新界面。

private Handler mHandler = new Handler(){  
         @Override  
         public void handleMessage(Message msg){  
             switch (msg.what){  
                case UPDATE_UI:{  
                Log.i("TTSDeamon", "UPDATE_UI");  
                showTextView.setText(editText.getText().toString());  
                ShowAnimation();  
                break;  
                }  
                 default:  
                 break;  
           }  
       }  
 }

demo地址0分下载:http://download.youkuaiyun.com/detail/zqiang_55/4764266

同时推荐一个应用:http://www.talkphone.cn/Down/Soft/Android/Detail/49172_0.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值