本篇文章主要介绍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
- /**
- * 根据URL获得所有的html信息
- * @param url
- * @return html
- */
- public static String getHtmlByUrl(String url){
- String html = null;
- //创建httpClient对象
- HttpClient httpClient = new DefaultHttpClient();
- //以get方式请求该URL
- HttpGet httpget = new HttpGet(url);
- try {
- //得到responce对象
- HttpResponse responce = httpClient.execute(httpget);
- //返回码
- int resStatu = responce.getStatusLine().getStatusCode();
- //200正常 其他就不对
- if (resStatu==HttpStatus.SC_OK) {
- //获得相应实体
- HttpEntity entity = responce.getEntity();
- if (entity!=null) {
- //获得html源代码
- html = EntityUtils.toString(entity);
- }
- }
- } catch (Exception e) {
- System.out.println("访问【"+url+"】出现异常!");
- e.printStackTrace();
- } finally {
- httpClient.getConnectionManager().shutdown();
- }
- return html;
- }
三、分析html
打开要分析的网页。打开本博客(http://garth.im)首页,查看这个页面的源代码,或者,如果你是使用chrome或者firefox浏览器的,可以使用浏览器自带的开发者工具,查看网页的结构,如下图是我使用chrome浏览器的开发者工具:
可以清晰地看到文章标题的标签a的所在位置:section#main>div#content>article#post>header.entry-header>h3.entry-title>a
四、使用jsoup解析html,获取需要的内容。
- String html = getHtmlByUrl("http://garth.im");
- if (html!=null&&!"".equals(html)) {
- Document doc = Jsoup.parse(html);
- Elements linksElements = doc.select("section#main>div#content>article#post>header.entry-header>h3.entry-title>a");
- /*以上代码的意思是
- 找id为“main”的section里面
- id为“content”的div里面
- id为“post”的article里面
- class为“entry-header”的header里面
- class为“entry-title”的h3里面a标签
- */
- for (Element ele:linksElements) {
- String href = ele.attr("href");
- String title = ele.text();
- System.out.println(title + ":" + href);
- }
- }
查看效果:
以上是一个简单的结合HttpClient和jsoup来获取并解析html的例子,但是HttpClient和jsoup还有其它更强大的功能,可以到其官方参考。本篇文章仅是抛砖引玉。
转载于:https://blog.51cto.com/liuya2012/1185700