本篇文章主要介绍2个工具包:HttpClient、jsoup。

来自官方的简介

HttpClient:HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

官网:http://hc.apache.org/httpcomponents-client-dev/index.html

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

官网:http://jsoup.org/

Demo

以一个简单的Demo说明HttpClient和jsoup的简单用法:使用HttpClient获取html,然后使用jsoup解析由HttpClient获取到的html。这个Demo的功能是获取本博客(http://garth.im)首页的文章标题和链接。

一、分别从官网下载HttpClient和jsoup这两个jar工具包,添加到工程里。jar包添加到工程的方法(以Eclipse为例):右击工程 -> Build Path -> Add External Archives… ,选择jar包即可。

如果是Android工程,还需要把jar包复制到libs文件夹里。

二、使用HttpClient获取html

  1. /**
  2.  * 根据URL获得所有的html信息
  3.  * @param url
  4.  * @return html
  5.  */  
  6. public static String getHtmlByUrl(String url){  
  7.     String html = null;  
  8.     //创建httpClient对象
  9.     HttpClient httpClient = new DefaultHttpClient();  
  10.     //以get方式请求该URL
  11.     HttpGet httpget = new HttpGet(url);  
  12.     try {  
  13.         //得到responce对象
  14.         HttpResponse responce = httpClient.execute(httpget);
  15.         //返回码
  16.         int resStatu = responce.getStatusLine().getStatusCode();  
  17.         //200正常  其他就不对  
  18.         if (resStatu==HttpStatus.SC_OK) {
  19.             //获得相应实体  
  20.             HttpEntity entity = responce.getEntity();  
  21.             if (entity!=null) {  
  22.                 //获得html源代码
  23.                 html = EntityUtils.toString(entity);  
  24.             }  
  25.         }  
  26.     } catch (Exception e) {  
  27.         System.out.println("访问【"+url+"】出现异常!");  
  28.         e.printStackTrace();  
  29.     } finally {  
  30.         httpClient.getConnectionManager().shutdown();  
  31.     }  
  32.     return html;  
  33. }

三、分析html

打开要分析的网页。打开本博客(http://garth.im)首页,查看这个页面的源代码,或者,如果你是使用chrome或者firefox浏览器的,可以使用浏览器自带的开发者工具,查看网页的结构,如下图是我使用chrome浏览器的开发者工具:

可以清晰地看到文章标题的标签a的所在位置:section#main>div#content>article#post>header.entry-header>h3.entry-title>a

四、使用jsoup解析html,获取需要的内容。

  1. String html = getHtmlByUrl("http://garth.im");  
  2. if (html!=null&&!"".equals(html)) {  
  3.     Document doc = Jsoup.parse(html);  
  4.     Elements linksElements = doc.select("section#main>div#content>article#post>header.entry-header>h3.entry-title>a");  
  5.     /*以上代码的意思是
  6.     找id为“main”的section里面  
  7.     id为“content”的div里面  
  8.     id为“post”的article里面  
  9.     class为“entry-header”的header里面  
  10.     class为“entry-title”的h3里面a标签  
  11.     */
  12.     for (Element ele:linksElements) {  
  13.         String href = ele.attr("href");  
  14.         String title = ele.text();  
  15.         System.out.println(title + ":" + href);  
  16.     }  
  17. }

查看效果:

以上是一个简单的结合HttpClient和jsoup来获取并解析html的例子,但是HttpClient和jsoup还有其它更强大的功能,可以到其官方参考。本篇文章仅是抛砖引玉。