亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于Java多線程的智能圖片爬蟲系統(tǒng)的研究與實現(xiàn)

        2022-05-30 12:16:27黃子純蔡敏
        電腦知識與技術 2022年22期
        關鍵詞:多線程網(wǎng)絡爬蟲

        黃子純 蔡敏

        摘要:針對在傳統(tǒng)的爬蟲系統(tǒng)中,按照一定規(guī)則自動抓取相關信息時,通常包含大量的無效信息這一問題,提出了一種基于Java多線程的智能圖片爬蟲系統(tǒng)。該系統(tǒng)以爬取圖片為例,利用HttpClient、JSoup、WebMagic框架以及線程池技術,實現(xiàn)了在傳統(tǒng)爬蟲系統(tǒng)基礎上增加圖片篩選模塊,可以智能爬取有效圖片,并且自動過濾重復圖片,進一步優(yōu)化了基于Java多線程的傳統(tǒng)爬蟲系統(tǒng)。

        關鍵詞:網(wǎng)絡爬蟲;多線程;HttpClient;JSoup;WebMagic

        中圖分類號:TP18? ? ? 文獻標識碼:A

        文章編號:1009-3044(2022)22-0055-03

        1 引言

        隨著人工智能領域的不斷發(fā)展,誕生了許多分支研究。不管是語音處理,圖像識別,還是自然語言處理,都面臨著需要大量數(shù)據(jù)集的問題,人工收集數(shù)據(jù)需花費大量的時間與精力。解決這一問題的技術就是爬蟲技術,因此爬蟲技術也成為獲取數(shù)據(jù)集的重要工具。

        對于傳統(tǒng)的爬蟲來說,爬取得到的數(shù)據(jù)集并不能保證正確性與完整性,以爬取圖片為例,爬取到的圖片一方面會得到重復圖片。另一方面,既不能保證得到的圖片格式是正確的(比如png或gif格式會直接轉(zhuǎn)為jpg格式) ,也不能保證爬取得到的圖片是完整的(比如下載的圖片只顯示一半) ,因此傳統(tǒng)的爬蟲系統(tǒng)在爬取數(shù)據(jù)之后,反而需要消耗大量時間篩選有效數(shù)據(jù),造成資源浪費,在大數(shù)據(jù)環(huán)境下,數(shù)據(jù)爬蟲的有效性也是非常的重要,因此本文以爬取圖片為例,利用HttpClient、JSoup、WebMagic框架以及線程池技術,實現(xiàn)了智能爬取有效圖片,在爬蟲階段,實現(xiàn)自動過濾重復圖片,有效提高了圖片的正確性。

        2 爬蟲相關技術

        2.1 爬蟲技術介紹

        爬蟲技術的出現(xiàn)有效簡化了人工收集數(shù)據(jù)的煩瑣流程,其主要作用是在互聯(lián)網(wǎng)的眾多頁面中,通過特定的程序,按照一定的規(guī)則遍歷網(wǎng)頁信息,爬取所需的信息,并將爬取得到的信息數(shù)據(jù)進行存儲,爬蟲技術具有網(wǎng)頁采集,網(wǎng)頁分析以及數(shù)據(jù)存儲三個模塊,其特點包括以下幾部分:

        分布式——可以在分布式環(huán)境中跨多臺計算機同步進行。

        高質(zhì)量——爬蟲技術獲取得到的頁面普遍質(zhì)量較高[1]。

        實時性——對于隨時更新的頁面,例如,新聞、更新小說等,能保持爬取得到的數(shù)據(jù)具有實時性[2]。

        可擴展性——爬蟲程序的可擴展性能夠適應不同數(shù)據(jù)格式以及不同協(xié)議[3]。

        在進行大數(shù)據(jù)分析或者進行數(shù)據(jù)挖掘的時候,需要有數(shù)據(jù)源進行分析。爬蟲技術的誕生,滿足了對日益增加大量數(shù)據(jù)源的需求,爬蟲技術自動抓取數(shù)據(jù)內(nèi)容,爬取得到數(shù)據(jù)集,再進行更深層次的數(shù)據(jù)分析、圖片識別、語音識別等人工智能領域方面的研究,獲取更多有價值的信息。

        2.2 HttpClient技術介紹

        HttpClient是Java網(wǎng)絡爬蟲的核心技術之一,網(wǎng)絡爬蟲是通過程序自動爬取網(wǎng)絡上的資源,而互聯(lián)網(wǎng)的訪問網(wǎng)頁協(xié)議使用的都是http協(xié)議,http協(xié)議主要規(guī)則是針對文本、聲音、圖像等之間信息交換的面向事務的應用層協(xié)議[4]。HttpClient在面向http協(xié)議編程時,極大降低了編程的復雜度,并且其支持最新的協(xié)議版本。

        2.3 JSoup技術介紹

        JSoup是一款功能較大的第三方開源HTML解析器,能夠通過對網(wǎng)頁中的文本標簽的屬性,針對不同格式的文本內(nèi)容進行解析。通過JSoup提供的一套API,能夠非常方便地對所需數(shù)據(jù)進行解析和操作[5]。JSoup一方面在瀏覽器中找到相應源碼后,能夠針對HTML中的URL,文件或字符串找到對應標簽并進行解析,另一方面能夠通過不同選擇器來抓取所需數(shù)據(jù),其功能的強大在于,只需在瀏覽器中查找源代碼,找到所需內(nèi)容對應的標簽,便能夠?qū)θ我飧袷降奈谋緢D片進行解析。

        2.4 WebMagic框架介紹

        WebMagic框架包括核心和擴展兩部分,將其代碼模塊化是WebMagic框架的主要目標。其中,核心部分(WebMagic-Core)實現(xiàn)了代碼的模塊化,擴展部分(WebMagic-Extension)則提供了注解模式、內(nèi)置常用組件等一系列功能,更便于網(wǎng)頁爬蟲實現(xiàn)。

        WebMagic包含了 Downloader、PageProcessor、Scheduler、Pipeline 四大組件[6],由Spider把這四大組件組織起來,使其可以互相交互,流程化地執(zhí)行相關操作。其中,Downloader表示爬蟲生命周期中的下載、PageProcessor表示爬蟲生命周期中的處理、Scheduler表示爬蟲生命周期中的管理和Pipeline表示爬蟲生命周期的持久化功能,而Spider是一個大的容器,也是WebMagic邏輯的核心。

        2.5 線程池技術介紹

        線程池技術廣泛應用于解決線程消耗資源問題,在執(zhí)行具體任務的過程中將其添加到線程池中,相當于對所有任務進行統(tǒng)一管理,當線程創(chuàng)建完成之后,線程池中的任務會自動啟動。多個線程能夠同時抓取數(shù)據(jù),可以實現(xiàn)程序多任務執(zhí)行。隨著多核處理器在現(xiàn)代計算機設備中的流行,在軟件中使用多線程程序的頻率也隨之增加,多線程技術可有效提高程序運行效率,但是多線程的模式需要不停地建立與摧毀線程,雖然同生成進程相比,創(chuàng)建線程的時間已經(jīng)很短了,當這個操作被大量執(zhí)行,依然會造成很多時間資源的浪費[7]。而線程池主要目標就是對線程資源進行統(tǒng)一管理,線程池的優(yōu)點是節(jié)約了線程的創(chuàng)建和銷毀所占用的時間[8]。

        3 智能圖片爬蟲系統(tǒng)介紹

        3.1 智能圖片爬蟲系統(tǒng)功能架構(gòu)

        傳統(tǒng)的爬蟲系統(tǒng)使用WebMagic框架,其主要功能模塊為網(wǎng)頁獲取模塊,該模塊主要獲取得到具體網(wǎng)頁;網(wǎng)頁分析模塊,該模塊主要功能為解析具體網(wǎng)頁內(nèi)容;數(shù)據(jù)存儲模塊,該模塊將爬取得到的數(shù)據(jù)進行存儲。其中,傳統(tǒng)爬蟲系統(tǒng)中的網(wǎng)頁獲取與網(wǎng)頁分析可以為一個模塊組,且該模塊組為實現(xiàn)功能主要模塊,該模塊組內(nèi)含網(wǎng)頁獲取、網(wǎng)頁分析、URL管理三大模塊。如圖1所示。

        圖1中架構(gòu)顯示,用戶提交http請求,在得到響應后,從Internet上獲得網(wǎng)頁上的 URL,這一過程中,獲取得到的可能是HTML、JSON或者其他文本格式的內(nèi)容。接著進行使用JSoup對page解析,并且不斷地從當前頁面上抽取新的URL放入到URL管理模塊中,其中,網(wǎng)頁分析模塊會對當前網(wǎng)頁的URL進行保存,而Request就是對URL地址的一層封裝,發(fā)出一個Request請求也就對應一個URL地址。通過網(wǎng)頁分析后得到的Resultltems相當于一個集合,爬取得到的數(shù)據(jù)放在Resultltems中,最后對其進行數(shù)據(jù)存儲。本文在傳統(tǒng)爬蟲系統(tǒng)的基礎上增加了一個篩選圖片功能模塊,如圖2所示。

        智能圖片爬蟲系統(tǒng)的功能模塊包括網(wǎng)頁獲取與分析模塊,該模塊組內(nèi)含網(wǎng)頁獲取、網(wǎng)頁分析、URL管理、圖片篩選以及數(shù)據(jù)存儲五大模塊。

        3.2 智能圖片爬蟲系統(tǒng)功能模塊介紹

        1) 網(wǎng)頁獲取。傳統(tǒng)網(wǎng)絡爬蟲的基本原理是,HttpClient創(chuàng)建對象相當于創(chuàng)建瀏覽器,傳統(tǒng)爬蟲系統(tǒng)通過http請求,發(fā)送給指定頁面,得到響應后,便可對網(wǎng)頁進行分析,并完成相應的數(shù)據(jù)爬取。

        2) 網(wǎng)頁分析。網(wǎng)頁分析模塊將存儲在HTML框架中的文本一一解析,從具體標簽中爬取有效信息,常用的方法包括通過字符串處理工具和使用正則表達式提取文本數(shù)據(jù)。但是這些方法都會帶來很大的開發(fā)成本,所以本文使用一款專門解析HTML頁面的技術JSoup實現(xiàn)網(wǎng)頁內(nèi)容提取。

        3) URL管理。在數(shù)據(jù)進行解析的過程中,會出現(xiàn)兩種情況,一種是在當前頁面已經(jīng)拿到所需數(shù)據(jù),則可直接進行圖片篩選,反之,需再次請求新的URL,本模塊將抽取得到的URL進行統(tǒng)一管理,保存完成后可直接進行解析。

        4) 圖片篩選。圖片篩選模塊的基本流程如圖3所示:

        圖片篩選模塊對兩張圖片進行像素比對,在獲取得到圖片的像素個數(shù)大小后,使用循環(huán)的方式,對兩張圖片的像素進行一一對比,在循環(huán)過程中,一旦比較確認兩個像素點不同,則退出循環(huán),計算相似度。

        5) 數(shù)據(jù)存儲。爬蟲得到數(shù)據(jù)集后需存儲數(shù)據(jù),一種方式可以將數(shù)據(jù)集存儲到本地文件,另一種方式將數(shù)據(jù)集保存到數(shù)據(jù)庫。爬取少量數(shù)據(jù)則可選擇保存到本地文件這一方式,大量數(shù)據(jù)一般選擇保存到數(shù)據(jù)庫。數(shù)據(jù)庫可以選擇使用MySQL數(shù)據(jù)庫,這是一個開源的數(shù)據(jù)庫。MYSQL數(shù)據(jù)庫體積小、靈活性強、速度快,這保證了爬蟲的效率。

        3.3 智能圖片爬蟲系統(tǒng)實現(xiàn)

        智能圖片爬蟲系統(tǒng)具體實現(xiàn)是創(chuàng)建HttpClient對象,對目標網(wǎng)頁發(fā)出請求,得到響應后則開始解析網(wǎng)頁內(nèi)容,解析過程中會將URL進行統(tǒng)一管理,抽取到URL管理模塊,當前響應內(nèi)容存在所需圖片時,便可抓取圖片對圖片進行篩選,篩選完成后存入數(shù)據(jù)庫中,當前響應內(nèi)容不存在所需圖片時,可通過URL管理模塊抓取得到所需圖片。具體實現(xiàn)如下所示:

        1) 網(wǎng)頁獲取模塊實現(xiàn)

        傳統(tǒng)的網(wǎng)絡爬蟲使用HttpClient創(chuàng)建對象,通過設置URL直接獲取訪問地址并解析,核心代碼如下:

        //使用Httpclient發(fā)起請求,獲取響應

        CloseableHttpResponse response = httpClient.execute(httpPost);

        //解析響應

        if (response.getStatusLine().getstatusCode() == 200){

        string content = EntityUtils.toString(response.getEntity(),"utf8");

        }

        HttpClient每次創(chuàng)建對象相當于創(chuàng)建一個瀏覽器,同樣銷毀對象相當于關閉瀏覽器,可以看出每次請求都要創(chuàng)建 HttpClient,會有頻繁創(chuàng)建和銷毀的問題,因此本文使用連接池來避免出現(xiàn)頻繁創(chuàng)建和銷毀問題,核心代碼如下:

        //創(chuàng)建連接池管理器

        PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();

        //使用連接池管理器發(fā)起請求

        doGet(cm);

        //從連接池中獲取Httpclient對象

        CloseableHttpClient httpClient = HttpClients.custom() . setConnectionManager(cm).build();

        2) 網(wǎng)頁分析模塊實現(xiàn)

        獲取到訪問地址之后并不是我們真正需要的數(shù)據(jù)集,還需對其進行解析,核心代碼如下:

        //解析HTML標簽

        Document doc = Jsoup.parse(new File(“訪問路徑”),“utf-8”);

        //獲取所有圖片

        Elements element = doc.body().getElementsByClass("具體元素").select("li");

        3) URL管理實現(xiàn)

        URL管理模塊保存的是頁面中抓取到的超鏈接地址,網(wǎng)頁分析模塊會自動請求該頁面并分析獲取信息。本智能圖片爬取系統(tǒng)以爬取“圖片之家”為例,按照實際頁面結(jié)構(gòu)獲取URL。核心代碼實現(xiàn)如下:

        //獲取圖片鏈接

        page.addTargetRequests(page.getHtml().css(“具體標簽”).link().all());

        4) 篩選圖片模塊實現(xiàn)

        使用注解單一屬性定義兩張圖片,預先分析得到的圖片定義為預期圖片,后分析得到的圖片定義為實際圖片,之后對這兩張圖片進行對比,核心代碼如下:

        //像素比較

        if(imageInput == imageoutput){

        for (int j = 0;j

        if (imagefileInput.getElem(j) != imagefileOutPut.getElem(j)) {

        imageG++;

        }}

        }else {

        flagF=(imageInput+imageoutput)/2;

        }

        //計算相似度

        double similarity=1-(double)( imageG *2)/( imageInput+imageoutput);

        5) 數(shù)據(jù)存儲實現(xiàn)

        目前已經(jīng)實現(xiàn)將篩選得到的圖片保存在內(nèi)存,還需將圖片保存到數(shù)據(jù)庫中。在WebMagic框架中用于抽取結(jié)果進行保存會使用pipeline 做一個輸出,但其沒有保存到數(shù)據(jù)庫的輸出,而考慮到這一問題后,設計了pipeline 的接口,接口中只有一個方法,只需要實現(xiàn)這個方法就能實現(xiàn)數(shù)據(jù)庫存儲,核心代碼如下:

        //圖片到數(shù)據(jù)庫中

        this.jobJnfoService.save(jobInfo);

        4 結(jié)束語

        本文基于Java語言開發(fā),在eclipse IDE 2021.3版本基礎上通過實現(xiàn)Java多線程智能圖片爬蟲程序,可以表明通過增加篩選圖片模塊能夠減少圖片的重復性,并且能夠提高其有效性。但本文所設計的系統(tǒng)還需進一步完善,比如在進行圖片篩選時,存在智能圖片爬蟲系統(tǒng)所消耗的時間和占用系統(tǒng)資源較大的問題。此外,目前許多網(wǎng)站都會對網(wǎng)絡爬蟲做一定的限制,請求訪問網(wǎng)頁的程序當線程和進程數(shù)量過多時會被禁止,沒有實現(xiàn)代理機制,所以智能圖片爬取系統(tǒng)效率的提升在實際環(huán)境中還有較大優(yōu)化空間。

        參考文獻:

        [1] Yu L X,Li Y L,Zeng Q T,et al.Summary of web crawler technology research[J].Journal of Physics:Conference Series,2020,1449(1):012036.

        [2] Pavai G,Geetha T V.Improving the freshness of the search engines by a probabilistic approach based incremental crawler[J].Information Systems Frontiers,2017,19(5):1013-1028.

        [3] Deka G C.NoSQL web crawler application[J]. Advances in Computers, 2018,109:77-100.

        [4] 李尚林,陳宮,雷勇.基于Java的網(wǎng)絡爬蟲系統(tǒng)研究與設計[J].新型工業(yè)化,2021,11(4):74-77,80.

        [5] 熊艷秋,嚴碧波.基于jsoup爬取圖書網(wǎng)頁信息的網(wǎng)絡爬蟲技術[J].電腦與信息技術,2019,27(4):61-63.

        [6] 孫德華.基于RPA的財務工作輔助系統(tǒng)的設計與實現(xiàn)[D].南京:南京郵電大學,2021.

        [7] 趙靜文,付巖,吳艷霞,等.多線程數(shù)據(jù)競爭檢測技術研究綜述[J].計算機科學,2022,49(6):89-98.

        [8] 王林.基于Linux的高并發(fā)網(wǎng)絡聊天系統(tǒng)設計[J].智能計算機與應用,2020,10(7):176-179.

        【通聯(lián)編輯:謝媛媛】

        猜你喜歡
        多線程網(wǎng)絡爬蟲
        煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設計與實現(xiàn)
        Java并發(fā)工具包對并發(fā)編程的優(yōu)化
        基于多線程文件傳輸關鍵技術研究與實現(xiàn)
        基于社會網(wǎng)絡分析的權(quán)威網(wǎng)頁挖掘研究
        主題搜索引擎中網(wǎng)絡爬蟲的實現(xiàn)研究
        網(wǎng)頁爬蟲技術的關鍵技術研究探索
        一種基于多線程的高速磁盤鏡像算法
        淺析如何應對網(wǎng)絡爬蟲流量
        中國市場(2016年23期)2016-07-05 04:35:08
        網(wǎng)絡爬蟲針對“反爬”網(wǎng)站的爬取策略研究
        iOS并發(fā)程序設計中幾種方法的特點及使用技巧研究
        jlzzjlzz全部女高潮| 精品香蕉一区二区三区| 色777狠狠狠综合| 成全视频高清免费| 亚洲熟妇中文字幕日产无码 | 亚洲国产av综合一区| 亚洲精品无码专区在线在线播放| 毛片内射久久久一区| 最新无码国产在线播放| 一本色道久久综合亚州精品| 国产亚洲成人精品久久| 国产男女无遮挡猛进猛出| 欧美一区波多野结衣第一页| 国产精品专区一区二区av免费看| 美女被男人插得高潮的网站| 久久精品无码一区二区三区免费| 国产成人国产在线观看入口| 亚洲乱码中文字幕综合| 国产自拍偷拍精品视频在线观看| 亚洲中文久久精品无码| 最新无码国产在线播放| 东京热东京道日韩av| 日韩性爱视频| 最新国产乱人伦偷精品免费网站| 一区二区三区福利在线视频| 一区二区三区在线观看人妖| 色五月丁香五月综合五月| 五十路熟女一区二区三区| 新久久久高清黄色国产| 亚洲一区二区三区蜜桃| 女人扒开屁股爽桶30分钟| 色窝窝无码一区二区三区2022 | 三级日韩视频在线观看| 亚洲成在人线在线播放无码| 一级做a爰片久久毛片| 日本一区二区午夜视频| 国产精品久人妻精品老妇| 夜夜揉揉日日人人| 黄色网页在线观看一区二区三区| 蜜桃视频国产一区二区| 国产真实夫妇交换视频|