Java網(wǎng)絡(luò)爬蟲(chóng)實(shí)操(8)

上一篇:Java網(wǎng)絡(luò)爬蟲(chóng)實(shí)操(7)

大家好耸别,本篇文章介紹一下NetDiscovery爬蟲(chóng)框架里的downloader對(duì)象

1) 前言

面向?qū)ο笤O(shè)計(jì)仍然是目前編程的核心思想浴讯,從下面截圖可以了解爬蟲(chóng)框架的主要對(duì)象:


程序在本地組織好一個(gè)request后禽篱,交給downloader從網(wǎng)絡(luò)上抓取數(shù)據(jù)到本地,然后由parser處理本地的這些數(shù)據(jù),最終生成可用的信息爵川。

2) downloader介紹

downloader我們也稱(chēng)為下載器,主要功能就是訪(fǎng)問(wèn)網(wǎng)絡(luò)并成功抓回我們要的數(shù)據(jù):例如html網(wǎng)頁(yè)息楔、json/xml數(shù)據(jù)寝贡、二進(jìn)制流(圖片、office文檔等)
目前NetDiscovery支持的downloader實(shí)現(xiàn)有:

面向接口編程是這個(gè)框架的重要設(shè)計(jì)思想之一值依。

以下介紹部分downloader代碼圃泡,這些代碼的共同點(diǎn)是實(shí)現(xiàn)了Downloader接口。

作為程序開(kāi)發(fā)者愿险,你也可以實(shí)現(xiàn)接口com.cv4j.netdiscovery.core.downloader.Downloader颇蜡,創(chuàng)建自己的下載器類(lèi)。

  • UrlConnectionDownloader
    這個(gè)用的是jdk自帶的包拯啦,java.io澡匪、java.net
//1、構(gòu)建一個(gè)URL對(duì)象
url = new URL(request.getUrl());
//2褒链、獲取一個(gè)HttpURLConnection對(duì)象
conn = url.openConnection();
//3唁情、一堆設(shè)置
conn .setDoOutput(true);
conn .setDoInput(true);
conn .setRequestMethod("POST");
......
//4、訪(fǎng)問(wèn)網(wǎng)絡(luò)服務(wù)
conn.connect();
//5甫匹、執(zhí)行成功的話(huà)甸鸟,獲取結(jié)果
conn.getResponseCode();
conn.getInputStream();
  • HttpClientDownloader
    這個(gè)是用開(kāi)源包apache httpclient實(shí)現(xiàn)的,代碼就更加簡(jiǎn)潔優(yōu)雅了兵迅。
//1抢韭、獲取一個(gè)HttpManager對(duì)象(框架自己封裝的)
HttpManager httpManager = HttpManager.get();
//2、然后把request扔進(jìn)去恍箭,等結(jié)果就可以了.request也是框架封裝的
httpManager.getResponse(request)
//3刻恭、等來(lái)結(jié)果后,進(jìn)行處理
            @Override
            public Response apply(CloseableHttpResponse closeableHttpResponse) throws Exception {
                String charset = null;
                if (Preconditions.isNotBlank(request.getCharset())) {
                    charset = request.getCharset();  //針對(duì)一些還是GB2312編碼的網(wǎng)頁(yè)
                } 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等類(lèi)大家有需要都可以去了解一下扯夭。

3) 總結(jié)

總之鳍贾,爬蟲(chóng)程序本質(zhì)上是一個(gè)網(wǎng)絡(luò)程序,網(wǎng)絡(luò)程序的核心模塊離不開(kāi)對(duì)網(wǎng)絡(luò)數(shù)據(jù)的處理交洗。建議學(xué)習(xí)爬蟲(chóng)的伙伴們骑科,要看源代碼的話(huà),可以先從框架中的downloader相關(guān)代碼開(kāi)始了解构拳。相信一定會(huì)有收獲的咆爽。

下一篇:Java網(wǎng)絡(luò)爬蟲(chóng)實(shí)操(9)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梁棠,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子斗埂,更是在濱河造成了極大的恐慌符糊,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呛凶,死亡現(xiàn)場(chǎng)離奇詭異濒蒋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)把兔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瓮顽,“玉大人县好,你說(shuō)我怎么就攤上這事∨欤” “怎么了缕贡?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)拣播。 經(jīng)常有香客問(wèn)我晾咪,道長(zhǎng),這世上最難降的妖魔是什么贮配? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任谍倦,我火速辦了婚禮,結(jié)果婚禮上泪勒,老公的妹妹穿的比我還像新娘昼蛀。我一直安慰自己,他們只是感情好圆存,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布叼旋。 她就那樣靜靜地躺著,像睡著了一般沦辙。 火紅的嫁衣襯著肌膚如雪夫植。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天油讯,我揣著相機(jī)與錄音详民,去河邊找鬼。 笑死撞羽,一個(gè)胖子當(dāng)著我的面吹牛阐斜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诀紊,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谒出,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隅俘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起笤喳,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤为居,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后杀狡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒙畴,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年呜象,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了膳凝。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡恭陡,死狀恐怖蹬音,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情休玩,我是刑警寧澤著淆,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站拴疤,受9級(jí)特大地震影響永部,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜呐矾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一苔埋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蜒犯,春花似錦讲坎、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至毫炉,卻和暖如春瓮栗,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背瞄勾。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工费奸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人进陡。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓愿阐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親趾疚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子缨历,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,070評(píng)論 25 707
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理以蕴,服務(wù)發(fā)現(xiàn),斷路器辛孵,智...
    卡卡羅2017閱讀 134,651評(píng)論 18 139
  • 風(fēng)車(chē)村
    小周橋橋橋橋閱讀 70評(píng)論 0 0
  • 墓碑 文 /陌宇軒 從時(shí)光的角度上看 你有著為人民的一面 為思念的故人留一方靜土 你忍心聽(tīng) 世人呼喚親友的哭聲 你...
    小哲小詩(shī)閱讀 147評(píng)論 0 0