HTTPClient与jsoup爬起网页

时间:2022-10-31 09:33:38

鸣谢:http://www.blogjava.net/czihong/articles/385690.html

中文乱码处理:http://blog.sina.com.cn/s/blog_6e47de3e01017ole.html

   http://hi.baidu.com/beyond456/item/97d31d9f31ea23dc1f42714a

   http://www.oschina.net/question/564772_124359

因项目需要从某个网站爬取一点数据,故我将爬取记录如下,以后说不定还能用得到呢,废话少说,进入正题:

HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。本文首先介绍 HTTPClient,然后根据作者实际工作经验给出了一些常见问题的解决方法。

HttpClient 主页:http://hc.apache.org/httpcomponents-client-dev/index.html

jsoup是一个Java HTML Parser。能够从URL、文件或字符串解析HTML。利用DOM遍历或CSS选择器查找和抽取数据。能够操作HTML元素,属性和文本。能够依据一个白名单过滤用户提交的内容。

 

jsoup主页:http://jsoup.org/

具体的我就不解释了 自己度娘、谷哥去

 

要不找个例子先?!

 

比如就拿www.iteye.com首页来说吧,我想定时抓取iteye首页“精华文章”里面的数据

思路,用代码请求www.iteye.com首页,拿到首页的html代码,解析html代码,获取“精华文章”里面文章的连接地址在此请求该地址,拿下该文章,是吧?!ok,来看处理过程:

 

 先用浏览器打开www.iteye.com,可以用调试工具 firefox装上firebug chrome右击审核元素

以firefox为例:


HTTPClient与jsoup爬起网页

可以发现“精华文章” 里面文章的全结构是

在id=“page”的div下面的 

   id=“content”的div下面的 

   id=“main”的div下面的

   class=“left”的div下面的

   id=“recommend”的div下面的

   ul下面的li下面的a标签

 

 

首先用httpClient获取首页html代码 我用的是httpClient4.1.2  jar包见附件 jsoup用的是jsoup-1.6.1.jar

 

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

上面是用httpClient获取html源文件的代码

下面就是对该html页面进行解析 得到我们想要的连接

 下面是jsoup处理得到的html源码

 

Java代码   HTTPClient与jsoup爬起网页
  1. import org.jsoup.Jsoup;  
  2. import org.jsoup.nodes.Document;  
  3. import org.jsoup.nodes.Element;  
  4. import org.jsoup.select.Elements;  
  5.   
  6. public class JustTest {  
  7.     public static void main(String[] args) {  
  8.         String html = getHtmlByUrl("http://www.iteye.com/");  
  9.         if (html!=null&&!"".equals(html)) {  
  10.             Document doc = Jsoup.parse(html);  
  11.             Elements linksElements = doc.select("div#page>div#content>div#main>div.left>div#recommend>ul>li>a");  
  12.             //以上代码的意思是 找id为“page”的div里面   id为“content”的div里面   id为“main”的div里面   class为“left”的div里面   id为“recommend”的div里面ul里面li里面a标签  
  13.             for (Element ele:linksElements) {  
  14.                 String href = ele.attr("href");  
  15.                 String title = ele.text();  
  16.                 System.out.println(href+","+title);  
  17.             }  
  18.         }  
  19.     }  
  20. }  
 

 

其实jsoup的语法很简单,就是跟jquery一样用“#”取id,用“.”取样式位之后的数据 

 

其实都很简单的,当然,越规范的网页分析起来越容易,要是网页不规范就只好大家多写点代码咯



-----------------------------------------------------
Silence, the way to avoid many problems;
Smile, the way to solve many problems;