zoukankan      html  css  js  c++  java
  • Android_HTML解析器_jsoup

    jsoup 是一款Java HTML解析器,可直接解析某个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代码的例子,经测试可用:

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

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

    // 详见StrictMode文档  

    1. StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()    
    2.         .detectDiskReads()    
    3.         .detectDiskWrites()    
    4.         .detectNetwork()   // or .detectAll() for all detectable problems    
    5.         .penaltyLog()    
    6.         .build());    
    7. StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()    
    8.         .detectLeakedSqlLiteObjects()    
    9.         .detectLeakedClosableObjects()    
    10.         .penaltyLog()    
    11.         .penaltyDeath()    
    12.         .build());    

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

       public void onCreate(Bundle savedInstanceState) {

          super.onCreate(savedInstanceState);  

          setContentView(R.layout.main);  

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

          new Thread(downloadRun).start();  

      }  

      /** 

       * 下载线程 

       */  

      Runnable downloadRun = new Runnable(){  

    @Override  

    public void run() {  

        // TODO Auto-generated method stub  

        updateListView();  

    }  

      };

    出现错误二:11-05 19:03:36.299: E/AndroidRuntime(20215): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

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

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

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

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

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

    Jsoup一些类的说明:

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

    body(),head(),nodeName(),title(),title(String title)

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

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

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

    Element get(int index);

    String  attr(String attributeKey);

    ElementHTML elementtag name, attributes, child nodes(including text nodes and other elements)。由Element,可以提取数据,理清节点图,操作HTML

    text(); 返回String类型

    getElementsByClass(String class);

    getAllElements(); 都返回Elements对象

    getElementsByAttribute(String key);

    Elements select(String selector); 根据匹配的selector选择相应的Elements

    异常的详细信息如下:

    Exception Detailsandroid.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

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

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

    1. private Handler mHandler = new Handler(){    
    2.          @Override    
    3.          public void handleMessage(Message msg){    
    4.              switch (msg.what){    
    5.                 case UPDATE_UI:{    
    6.                 Log.i("TTSDeamon""UPDATE_UI");    
    7.                 showTextView.setText(editText.getText().toString());    
    8.                 ShowAnimation();    
    9.                 break;    
    10.                 }    
    11.                  default:    
    12.                  break;    
    13.            }    
    14.        }    
    15.  }  

    demo地址0分下载:http://download.csdn.net/detail/zqiang_55/4764266

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

  • 相关阅读:
    霍夫直线检测进行复杂环境的树干提取
    matlab工具箱之人眼检测+meanshift跟踪算法--人眼跟踪
    deep learning 练习 牛顿法完成逻辑回归
    deep learning 练习 多变量线性回归
    deep learning 练习1 线性回归练习
    关于移动端键盘弹出
    关于Redux
    docker registry的CI规划
    建立自己的私有docker(ssl&login auth)
    逻辑编程
  • 原文地址:https://www.cnblogs.com/zhwl/p/3178283.html
Copyright © 2011-2022 走看看