廢話不多說直接講講今天要做的事。
利用HttpClient和Jsoup技術抓取網頁信息。HttpClient是支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議。
jsoup 是一款基於 Java 平台的 網頁html解析器,可直接解析某個 URL 地址、HTML 文本內容,提供了一套非常方便的 API接口,通過類似於 jQuery 的操作方法來操作數據。
httpClient相關文檔:http://hc.apache.org/httpcomponents-client-5.0.x/index.html
jsoup相關文檔:http://jsoup.org/
此處以網易貴金屬資訊為例進行案例教學 O(∩_∩)O

然後我們首先要分析網頁源代碼的結構

之後我們就可以開始進行編程了,首先我們要知道利用httpClient的流程:
1. 創建HttpClient的對象;
2. 創建請求方法的實例,並指定訪問的URL;
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