HttpClient+Jsoup 抓取網頁信息(網易貴金屬爲例)

廢話很少說直接講講今天要作的事。html

利用HttpClient和Jsoup技術抓取網頁信息。HttpClient是支持HTTP協議的客戶端編程工具包,而且它支持HTTP協議。java

jsoup 是一款基於 Java 平臺的 網頁html解析器,可直接解析某個 URL 地址、HTML 文本內容,提供了一套很是方便的 API接口,經過相似於 jQuery 的操做方法來操做數據。node

 

httpClient相關文檔:http://hc.apache.org/httpcomponents-client-5.0.x/index.htmlapache

jsoup相關文檔:http://jsoup.org/編程

此處以網易貴金屬資訊爲例進行案例教學 O(∩_∩)O工具

而後咱們首先要分析網頁源代碼的結構測試

以後咱們就能夠開始進行編程了,首先咱們要知道利用httpClient的流程:url

  1. 建立HttpClient的對象;spa

  2. 建立請求方法的實例,並指定訪問的URL;code

  3. 調用HttpClient對象發送請求,該方法返回一個HttpResponse,要判斷responce.getStatusLine().getStatusCode()的返回碼是否爲200;

  4. 調用HttpResponse相關方法獲取相應內容;

  5. 釋放鏈接。

固然啦 建立項目的時候要導入相關的jar包,本文會提供源碼+jar包http://pan.baidu.com/s/1sl55d85

 StockUtils.java

 1 package cn.clay.httpclient.utils;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.HttpEntity;
 6 import org.apache.http.HttpResponse;
 7 import org.apache.http.HttpStatus;
 8 import org.apache.http.client.HttpClient;
 9 import org.apache.http.client.methods.HttpGet;
10 import org.apache.http.impl.client.CloseableHttpClient;
11 
12 import org.apache.http.impl.client.HttpClients;
13 import org.apache.http.util.EntityUtils;
14 /**
15  * 傳遞網頁連接
16  * 返回網頁源碼
17  * @author ClayZhang
18  *
19  */
20 public class StockUtils {
21     //第一次獲取網頁源碼
22     public static String getHtmlByUrl(String url) throws IOException{  
23         String html = null;  
24         CloseableHttpClient httpClient = HttpClients.createDefault();//建立httpClient對象   
25         HttpGet httpget = new HttpGet(url);
26         try {  
27             HttpResponse responce = httpClient.execute(httpget);
28             int resStatu = responce.getStatusLine().getStatusCode();
29             if (resStatu == HttpStatus.SC_OK) {
30                   
31                 HttpEntity entity = responce.getEntity();  
32                 if (entity != null) {  
33                     html = EntityUtils.toString(entity);//得到html源代碼
34                 }  
35             }  
36         } catch (Exception e) {
37             System.out.println("訪問【"+url+"】出現異常!");  
38             e.printStackTrace();  
39         } finally {
40             //釋放鏈接
41             httpClient.close();  
42         }  
43         return html;  
44     }  
45 }

而後利用jsoup的方法進行測試類的編寫StockTest.java

 1 package cn.clay.httpclient.utils.test;
 2 
 3 import java.io.IOException;
 4 
 5 import org.apache.http.ParseException;
 6 import org.jsoup.Jsoup;
 7 import org.jsoup.nodes.Document;
 8 import org.jsoup.nodes.Element;
 9 import org.jsoup.select.Elements;
10 
11 import cn.clay.httpclient.utils.StockUtils;
12 
13 /**
14  * 
15  * @author ClayZhang
16  *
17  */
18 public class StockTest {
19 
20     public static void main(String[] args) throws ParseException, IOException {
21         String content = StockUtils.getHtmlByUrl(
22                 "http://fa.163.com/zx/gjs/1/");
23         parserHtml(content);
24     }
25 
26     
27     public static void parserHtml(String content) throws ParseException, IOException {
28         Document doc = Jsoup.parse(content);
29         Elements links = doc.getElementsByClass("g-news").select("dl");
30         for (Element e : links) {
31             System.out.println("新聞標題:" + e.select("a").text().toString());
32             //獲取頁面連接
33             Elements linkHref = e.select("a");
34             //截取時間字符串
35             Elements timeStr = e.select("span[class=f-fr]");
36             //簡略信息
37             Elements comment = e.select("span[class=f-fl f-ofe u-digest]");
38             System.out.println("新聞連接:" + linkHref.attr("href"));
39             System.out.println("發佈時間:" + timeStr.text());
40             System.out.println("簡要信息:" + comment.text().toString());
41             
42             System.out.println("=============================================================");
43         }
44         
45     }
46 }

運行以後的效果以下

本文版權歸做者及博客園全部,轉載請註明做者及原文出處

http://www.cnblogs.com/clayzhang

相關文章
相關標籤/搜索