• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于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)功能架構

      傳統(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中架構顯示,用戶提交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é)構獲取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)絡分析的權威網(wǎng)頁挖掘研究
      主題搜索引擎中網(wǎng)絡爬蟲的實現(xiàn)研究
      網(wǎng)頁爬蟲技術的關鍵技術研究探索
      一種基于多線程的高速磁盤鏡像算法
      淺析如何應對網(wǎng)絡爬蟲流量
      中國市場(2016年23期)2016-07-05 04:35:08
      網(wǎng)絡爬蟲針對“反爬”網(wǎng)站的爬取策略研究
      iOS并發(fā)程序設計中幾種方法的特點及使用技巧研究
      芮城县| 棋牌| 凤阳县| 涿州市| 内黄县| 宁陵县| 临邑县| 合作市| 周口市| 白玉县| 石景山区| 稷山县| 萨迦县| 九台市| 融水| 东乡族自治县| 洱源县| 青冈县| 辽宁省| 上林县| 襄垣县| 霍林郭勒市| 沙雅县| 来凤县| 阿克陶县| 长泰县| 邳州市| 松滋市| 台前县| 南乐县| 濮阳市| 延寿县| 望城县| 保定市| 葵青区| 田东县| 田阳县| 扬中市| 垫江县| 呼图壁县| 革吉县|