上一篇:Java網絡爬蟲實操(7)
大家好,本篇文章介紹一下NetDiscovery爬蟲框架里的downloader對象
1) 前言
面向對象設計仍然是目前編程的核心思想,從下面截圖可以了解爬蟲框架的主要對象:
程序在本地組織好一個request后,交給downloader從網絡上抓取數據到本地,然后由parser處理本地的這些數據,最終生成可用的信息。
2) downloader介紹
downloader我們也稱為下載器,主要功能就是訪問網絡并成功抓回我們要的數據:例如html網頁、json/xml數據、二進制流(圖片、office文檔等) 目前NetDiscovery支持的downloader實現有:
面向接口編程是這個框架的重要設計思想之一。
以下介紹部分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、等來結果后,進行處理@Overridepublic 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)