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

廢話不多說直接講講今天要做的事。

利用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

package cn.clay.httpclient.utils;

import java.io.IOException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;

import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
/**
 * 傳遞網頁鏈接
 * 返回網頁源碼
 * @author ClayZhang
 *
 */
public class StockUtils {
    //第一次獲取網頁源碼
    public static String getHtmlByUrl(String url) throws IOException{  
        String html = null;  
        CloseableHttpClient httpClient = HttpClients.createDefault();//創建httpClient對象   
        HttpGet httpget = new HttpGet(url);//以get方式請求該URL
        try {  
            HttpResponse responce = httpClient.execute(httpget);//得到responce對象       
            int resStatu = responce.getStatusLine().getStatusCode();//返回碼
            if (resStatu == HttpStatus.SC_OK) {//200正常  其他就不對
                //獲得相應實體  
                HttpEntity entity = responce.getEntity();  
                if (entity != null) {  
                    html = EntityUtils.toString(entity);//獲得html源代碼
                }  
            }  
        } catch (Exception e) {
            System.out.println("訪問【"+url+"】出現異常!");  
            e.printStackTrace();  
        } finally {
            //關閉連接
            httpClient.close();  
        }  
        return html;  
    }  
}

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

package cn.clay.httpclient.utils.test;

import java.io.IOException;

import org.apache.http.ParseException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import cn.clay.httpclient.utils.StockUtils;

/**
 * 
 * @author ClayZhang
 *
 */
public class StockTest {

    public static void main(String[] args) throws ParseException, IOException {
        String content = StockUtils.getHtmlByUrl(
                "http://fa.163.com/zx/gjs/1/");
        parserHtml(content);
    }


    public static void parserHtml(String content) throws ParseException, IOException {
        Document doc = Jsoup.parse(content);
        Elements links = doc.getElementsByClass("g-news").select("dl");
        for (Element e : links) {
            System.out.println("新聞標題:" + e.select("a").text().toString());
            //獲取頁面鏈接
            Elements linkHref = e.select("a");
            //截取時間字符串
            Elements timeStr = e.select("span[class=f-fr]");
            //簡略信息
            Elements comment = e.select("span[class=f-fl f-ofe u-digest]");
            System.out.println("新聞鏈接:" + linkHref.attr("href"));
            System.out.println("發佈時間:" + timeStr.text());
            System.out.println("簡要信息:" + comment.text().toString());

            System.out.println("=============================================================");
        }

    }
}

運行之後的效果如下
這裏寫圖片描述

本文版權歸作者及CSDN所有,轉載請註明作者及原文出處
也可關注
http://www.cnblogs.com/clayzhang

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章