Java網路爬蟲實操(8)

sinkinka發表於2018-03-15

上一篇:Java網路爬蟲實操(7)

大家好,本篇文章介紹一下NetDiscovery爬蟲框架裡的downloader物件

1) 前言

物件導向設計仍然是目前程式設計的核心思想,從下面截圖可以瞭解爬蟲框架的主要物件:

Java網路爬蟲實操(8)

程式在本地組織好一個request後,交給downloader從網路上抓取資料到本地,然後由parser處理本地的這些資料,最終生成可用的資訊。

2) downloader介紹

downloader我們也稱為下載器,主要功能就是訪問網路併成功抓回我們要的資料:例如html網頁、json/xml資料、二進位制流(圖片、office文件等) 目前NetDiscovery支援的downloader實現有:

Java網路爬蟲實操(8)

面向介面程式設計是這個框架的重要設計思想之一。

以下介紹部分downloader程式碼,這些程式碼的共同點是實現了Downloader介面。

作為程式開發者,你也可以實現介面com.cv4j.netdiscovery.core.downloader.Downloader,建立自己的下載器類。

  • UrlConnectionDownloader 這個用的是jdk自帶的包,java.io、java.net
//1、構建一個URL物件
url = new URL(request.getUrl());
//2、獲取一個HttpURLConnection物件
conn = url.openConnection();
//3、一堆設定
conn .setDoOutput(true);
conn .setDoInput(true);
conn .setRequestMethod("POST");
......
//4、訪問網路服務
conn.connect();
//5、執行成功的話,獲取結果
conn.getResponseCode();
conn.getInputStream();
複製程式碼
  • HttpClientDownloader 這個是用開源包apache httpclient實現的,程式碼就更加簡潔優雅了。
//1、獲取一個HttpManager物件(框架自己封裝的)
HttpManager httpManager = HttpManager.get();
//2、然後把request扔進去,等結果就可以了.request也是框架封裝的
httpManager.getResponse(request)
//3、等來結果後,進行處理
            @Override
            public Response apply(CloseableHttpResponse closeableHttpResponse) throws Exception {
                String charset = null;
                if (Preconditions.isNotBlank(request.getCharset())) {
                    charset = request.getCharset();  //針對一些還是GB2312編碼的網頁
                } else {
                    charset = "UTF-8";
                }
                String html = EntityUtils.toString(closeableHttpResponse.getEntity(), charset);
                Response response = new Response();
                response.setContent(html.getBytes());
                response.setStatusCode(closeableHttpResponse.getStatusLine().getStatusCode());
                if (closeableHttpResponse.containsHeader("Content-Type")) {
                    response.setContentType(closeableHttpResponse.getFirstHeader("Content-Type").getValue());
                }

                return response;
            }
複製程式碼
  • VertxDownloader等類大家有需要都可以去了解一下。

3) 總結

總之,爬蟲程式本質上是一個網路程式,網路程式的核心模組離不開對網路資料的處理。建議學習爬蟲的夥伴們,要看原始碼的話,可以先從框架中的downloader相關程式碼開始瞭解。相信一定會有收穫的。

下一篇:Java網路爬蟲實操(9)

相關文章