廢話很少說直接講講今天要作的事。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