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

        ?

        基于Java的低代碼主題爬蟲的設計與實現(xiàn)

        2022-05-30 06:15:51張夢元劉莉
        電腦知識與技術 2022年30期
        關鍵詞:大數(shù)據(jù)

        張夢元 劉莉

        摘要:網(wǎng)頁數(shù)據(jù)提取是人工智能與大數(shù)據(jù)相關課題學習與研究的一項重要內(nèi)容。為了減輕編寫主題網(wǎng)絡爬蟲程序工作,該文在主題爬蟲的基礎原理上,設計一套通用的Java爬蟲程序。程序抽象了下載模塊、內(nèi)容處理模塊和結果操作等核心內(nèi)容,通過注解或xml配置等低代碼方式,即可實現(xiàn)不同主題內(nèi)容爬取工作。

        關鍵詞:大數(shù)據(jù);Java;主題爬蟲;低代碼

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

        文章編號:1009-3044(2022)30-0033-03

        開放科學(資源服務)標識碼(OSID):

        1 引言

        大數(shù)據(jù)與人工智能是國家高度重視的熱門研究領域[1]。中國開展教學研究的高校多,從事相關科研工作和學習的人員基數(shù)大。在從事這些工作和學習中,收集相關的領域數(shù)據(jù)是必要的環(huán)節(jié)。目前市面上有一些開源的數(shù)據(jù)可供學習使用,但大部分研究領域數(shù)據(jù)被相關行業(yè)少數(shù)公司掌握,并不對外開放,給相關研究學習造成了極大的困難。而通過人工的方式從網(wǎng)頁提取數(shù)據(jù)費時費力,極大影響研究和學習動力。因此在不進行商業(yè)盈利和違背法律與爬蟲規(guī)則的前提下,開發(fā)一些數(shù)據(jù)爬取工具成為當前數(shù)據(jù)采集的一個主要途徑[2]。然而,這類的開發(fā)工作有一定的領域門檻,而且開發(fā)程序大多都是一次性的,對于其他主題的研究無法重復利用。因此,設計一套低代碼的主題爬蟲工具,以期沒有爬蟲領域知識的需求者也能完成相關主題內(nèi)容數(shù)據(jù)的抓取。

        2 爬蟲的概率和原理

        2.1 網(wǎng)絡爬蟲的概念

        網(wǎng)絡爬蟲也叫蜘蛛程序。因為互聯(lián)網(wǎng)和蜘蛛網(wǎng)一樣,縱橫交錯。數(shù)據(jù)存儲在各個網(wǎng)絡節(jié)點的主機上。網(wǎng)絡爬蟲就如同蜘蛛一樣,在各個主機節(jié)點游走,獲取需要的數(shù)據(jù)信息。目前將其分為四類,分別是通用網(wǎng)絡爬蟲,聚焦網(wǎng)絡爬蟲,增量式網(wǎng)絡爬蟲,深層網(wǎng)絡爬蟲[3]。本文研究的主題爬蟲屬于聚焦爬蟲這一類,主要是爬取一些預定的網(wǎng)頁數(shù)據(jù)。由于只訪問一些特定的網(wǎng)頁,對網(wǎng)絡資源的影響較小。

        2.2 主題爬蟲的主要原理

        主題網(wǎng)絡爬蟲是利用程序代替瀏覽器向服務器發(fā)送一些特定的地址請求,從而獲取到目標數(shù)據(jù)。其主要流程是首先下載用戶提供起始頁面,獲取頁面數(shù)據(jù)和處理相關信息,然后將網(wǎng)頁內(nèi)鏈接進行主題相關度計算,最后根據(jù)搜索策略進行下一次鏈接請求與數(shù)據(jù)獲取[4-5]。其主要流程如圖1所示。

        2.3 低代碼開發(fā)概念

        低代碼(low code)的核心理念是用少量代碼,或者不寫代碼來進行系統(tǒng)開發(fā)。由此帶來的優(yōu)勢有:降低開發(fā)門檻;減少開發(fā)成本;快速實現(xiàn)業(yè)務功能;系統(tǒng)功能更穩(wěn)定,維護性更好。低代碼開發(fā)分為傳統(tǒng)的軟件開發(fā)、輕量級無代碼、企業(yè)級低代碼等開發(fā)形態(tài)[6],其開發(fā)模式的場景適應性從左到右依次增強。

        輕量級無代碼開發(fā)模式以表單驅(qū)動,主要是通過預先設定程序規(guī)則,由應用開發(fā)人員或者業(yè)務人員通過圖形化界面配置規(guī)則或者直接編輯配置規(guī)則方式來實現(xiàn)具體業(yè)務。

        3 爬蟲的設計與實現(xiàn)

        3.1 爬蟲設計

        根據(jù)爬蟲業(yè)務需求,給網(wǎng)絡爬蟲設計下面幾個模塊:下載器(Download)模塊,內(nèi)容解析器(ContentsResolver)模塊,控制器(SpiderController)模塊,結果處理器(Dao)模塊,整體架構如圖2所示。

        1)SpiderApplication

        SpiderApplication是爬蟲程序應用上下文的引導類,通過運行它的run方法啟動爬蟲應用。其主要流程為加載下載器、內(nèi)容解析器等實體對象;實例化爬蟲控制器,初始化下載監(jiān)聽器、內(nèi)容處理監(jiān)聽器、結果處理監(jiān)聽器;初始化下載隊列,啟動下載線程;初始化內(nèi)容解析隊列,啟動內(nèi)容解析線程;初始化結果處理隊列,啟動結果處理線程。

        2)Downloader

        數(shù)據(jù)下載模塊根據(jù)傳遞地址信息拉取網(wǎng)絡數(shù)據(jù)并轉(zhuǎn)換成page對象,并將page對象添加到待處理數(shù)據(jù)隊列。下載器是爬蟲的通用模塊,后續(xù)實現(xiàn)其他主題爬蟲可以重復利用。處理主要問題構建爬蟲與服務間的會話,如登錄問題等;確保數(shù)據(jù)可靠下載,如下載恢復與重試;正確處理文件編碼,并正確解析為html文檔對象。該模塊程序提供完整實現(xiàn),大多數(shù)情況可直接使用,特定要求也支持重載式擴展。其主要流程為首先獲取站點配置信息,包括請求頭、useragent、用戶名、密碼,接著建立與站點會話,如需登錄則根據(jù)配置信息登錄,然后下載請求數(shù)據(jù),如下載失敗重新添加請求隊列,并記錄重試次數(shù),超過重試次數(shù)則丟棄,最后解析數(shù)據(jù)編碼,根據(jù)編碼轉(zhuǎn)換成html文檔保存到page對象。

        3)ContentsResolver

        內(nèi)容解析器完成對數(shù)據(jù)的分析處理。調(diào)度器在處理數(shù)據(jù)隊列數(shù)據(jù)過程中會根據(jù)page數(shù)據(jù)或?qū)牡刂沸畔⒄埱螳@取具體解析器對象,由具體解析器實際處理數(shù)據(jù)對象。程序定義兩種類型的通用解析對象抽象,第一種是鏈接解析器,即識別并返回后續(xù)需處理地址信息,并交由控制器將地址添加到請求隊列。第二種是目標數(shù)據(jù)解析器,提取page中關鍵信息,后續(xù)交由結果處理模塊進行相應處理。處理器需在程序初始化過程中注冊到應用上下文,程序?qū)崿F(xiàn)IOC注冊框架,實現(xiàn)注冊過程可配置化;程序?qū)崿F(xiàn)解析器可配置式或注解式編寫功能,實現(xiàn)低代碼式爬蟲程序定制。主要流程為用戶編寫或配置內(nèi)容處理器,程序啟動,獲取配置信息,初始化到應用上下文,然后程序調(diào)度數(shù)據(jù)處理隊列過程中,根據(jù)page信息獲取對應處理器,處理器解析數(shù)據(jù),返回對應信息,最后控制器根據(jù)放回數(shù)據(jù)類型交由對應模塊處理。

        4)SpiderController

        任務控制器模塊實現(xiàn)爬蟲地址處理邏輯,下載數(shù)據(jù)(page)處理邏輯與結果(bean)處理邏輯。通過實現(xiàn)下載回調(diào)接口,數(shù)據(jù)處理回調(diào)接口,結果處理回調(diào)接口并向下載線程、數(shù)據(jù)處理線程、結果處理線程添加監(jiān)聽器事件實現(xiàn)信息處理邏輯。記錄處理過程中的關鍵日志。其中下載調(diào)度需實現(xiàn)對下載鏈接信息的去重與持久化工作,持久化的目的是應用程序結束后重啟能夠恢復前期下載狀態(tài)。

        5)Dao

        數(shù)據(jù)處理模塊主要是用來處理提取后的數(shù)據(jù),一般用來保存數(shù)據(jù),如保存文件和數(shù)據(jù)庫,同時支持對數(shù)據(jù)進行進一步統(tǒng)計或過濾等功能擴展需求。程序?qū)崿F(xiàn)數(shù)據(jù)庫與文件配置支持。

        3.2 功能實現(xiàn)

        3.2.1 下載器模塊的實現(xiàn)

        Java有許多成熟網(wǎng)絡請求框架,程序基于httpclient框架實現(xiàn)。下載器抽象接口定義如下:

        public interface Downloader {

        public Page download ( String url );

        }

        可通過接口擴展實現(xiàn)不同下載器,通過SpiderApplication的setDownloader進行配置,同時支持xml配置文件。

        下載器在頁面下載結束后將其轉(zhuǎn)換成Document文檔對象。頁面解析采用Jsoup框架,該框架支持DOM,CSS方式對頁面進行數(shù)據(jù)提取,后續(xù)用戶根據(jù)需求可簡單通過低代碼方式擴展相應的內(nèi)容處理器,實現(xiàn)不同主題爬蟲任務。下載器主要代碼如下:

        @com.spider.anotation.Downloader//注解下載器

        public class HttpClientDownloader implements Downloader{

        @Override

        public Page download ( String url ) {

        //1、初始化httpClient對象

        HttpClient httpClient =? getHttpClient();

        //2、構建鏈接,發(fā)送訪問請求

        httpResponse = httpClient.execute ( getHttpUriRequest(),getHttpClientContext());

        //3、獲取與解析放回數(shù)據(jù)

        //4、解析數(shù)據(jù),生成page對象

        page = handleResponse ( request ,? getCharset() , httpResponse);

        //5、回調(diào)控制器結果處理邏輯

        onSuccess ( request );

        return null;

        }

        }

        3.2.2 內(nèi)容處理器的實現(xiàn)

        內(nèi)容處理器是實現(xiàn)不同主題爬蟲的關鍵,程序?qū)ζ涑橄笕缦拢?/p>

        public interface ContentResolver {

        public List doResolve ( Page page );

        }

        接口返回泛型T,如果處理鏈接解析器,則返回鏈接字符串。如果處理內(nèi)容,則可以是用戶定義的數(shù)據(jù)實體類。

        該設計目的是實現(xiàn)具體爬蟲任務,可以方便進行擴展。同時為了降低編寫門檻,程序提供了基于注解或者xml的低代碼配置方式。爬蟲控制器依據(jù)page的url信息,查找對應的內(nèi)容處理器Resolver。Resolver在應用程序啟動時,由SpiderApplication初始化。通過Resolver注解被程序識別,通過type字段設置處理器類型,默認類型為鏈接處理器。被標識為處理器類需指定SourceUrl注解,控制器將根據(jù)value字段來匹配對應內(nèi)容處理器,value支持正則表達式匹配方式進行模糊匹配。數(shù)據(jù)解析器需定義返回數(shù)據(jù)實體方法,數(shù)據(jù)實體字段通過Select注解標識,Select為抽取規(guī)則的封裝,基于Jsoup框架實現(xiàn)文檔解析,實現(xiàn)Css、Xpath數(shù)據(jù)提取,同時支持Java正則表達式。Select通過type指定解析類型,通過value設定解析參數(shù)。

        3.2.3 控制器實現(xiàn)主要邏輯

        public class SpiderController implements DownloadListener , ResolveListener {

        @Override

        public void onDownloadSuccess(String path, Page page) {

        //1、記錄下載完成信息

        //2、獲取并設置內(nèi)容處理對象

        //3、添加內(nèi)容解析隊列

        }

        @Override

        public void onDownloadFail(String path, Result result) {

        // 1、記錄失敗信息

        // 2、根據(jù)規(guī)則丟棄或者重新排隊下載

        }

        @Override

        public void onResolveSuccess(DataInfo bean) {

        //1、記錄內(nèi)容解析完成信息

        //2、添加結果處理隊列

        }

        @Override

        public void onResolveFail(Page page, Result result) {

        //增加失敗日志

        }

        }

        3.2.4 結果處理程序?qū)崿F(xiàn)

        數(shù)據(jù)處理抽象接口如下:

        public interface Dao {

        public void process(Object obj);

        }

        由該接口派生文件保存,數(shù)據(jù)庫保存功能。文件保存將內(nèi)容處理結構對象轉(zhuǎn)換成json字符串保存指定文件夾中,文件名為時間加鏈接哈希碼。數(shù)據(jù)庫保存通過ORM方式。程序定義Table,column注解,指定結果對象存儲對應數(shù)據(jù)庫表與列。主要代碼邏輯如下:

        public class OrmDao implements Dao{

        @Override

        public void process(Object obj) {

        Class beanClass = obj.getClass();

        if(beanClass.isAnnotationPresent(Table.class)){

        //1、通過注解獲取表明,字段名

        //2、生成對應的sql語句

        //3、通過jdbc保存到數(shù)據(jù)庫

        }

        }}

        4 爬蟲應用案例

        4.1 案例分析與應用

        文化傳媒行業(yè)有大量應用研究案例,比如票房預測、電影推薦等,這些研究內(nèi)容都是基于電影平臺數(shù)據(jù)[7-8]。以獲取豆瓣網(wǎng)《獨行月球》評論信息為例,可基于前文爬蟲框架簡易實現(xiàn)爬蟲程序。

        該影片的主頁面為https://movie.douban.com/subject/35183042/,評論信息頁面地址類似如下https://movie. douban.com/subject/35183042/comments?status=P,評論信息分頁顯示,地址不變部分為https://movie.douban.com/subject/35183042/comments。對應實現(xiàn)地址處理代碼如下:

        @Resolver ( id = "douban")

        @SourceUrl ("https://movie.douban.com/subject/35183042/*")

        public class DoubanUrlResolver {

        public String getUrlPattern(){

        return "https://movie.douban.com/subject/35183042/comments*";

        }

        }

        通過指定該地址處理Resolver,提取包含地址前綴的相關地址。SourceUrl指定處理主題地址前綴,避免抓取其他影片評論。此處非標準正則式,程序?qū)rl常見符號進行轉(zhuǎn)義。

        評論具體信息截取片段如下:

        好消息是沈騰貢獻了最富層次的一次表演,壞消息是成片的質(zhì)量到底辜負了他。即便他以一己之力將小品升華成電影,但片中呈現(xiàn)的一切都是二手的,成了一件昂貴而蹩腳的A貨。

        評論內(nèi)容包含在class為comment-item的div標簽內(nèi),一個頁面具有多條該類型信息,通過鏈接翻頁。對應內(nèi)容處理代碼可設計如下:

        @Resolver ( id = "doubanBean",type = SpiderApplication.TYPE_CONTENT)

        @SourceUrl ( "https://movie.douban.com/subject/35183042/comments*")

        public class DoubanBeanResolver {

        public DoubanComment getComment(){

        return new DoubanComment();

        }

        }

        public class DoubanComment {

        @Select ( value = ".comment-item ",? type =? Select.Type.Css)

        private List comments;

        }

        通過type = SpiderApplication.TYPE_CONTENT指定為內(nèi)容處理器。SourceUrl指定該類型頁面交由該處理器分析。getComment()函數(shù)指定數(shù)據(jù)對象,返回對象定義必須指定Select注解提取方式。由頁面內(nèi)容可知,通過.comment-item即可找出評論標簽p。由于頁面存在該類型標簽有多個,因此放回類型為列表,如果選擇內(nèi)容在頁面中唯一,則應為字符串。同時程序也支持XPath與正則表達式的方式,用戶可根據(jù)實際情況靈活選擇。

        4.2 案例結果展示

        對獲取《獨行月球》的影評文本進行分詞,利用WordCloud生成詞云如圖3所示。

        5 結束語

        以獲取《獨行月球》影評數(shù)據(jù)獲取為例,用戶通過分析頁面鏈接、頁面內(nèi)容,獲取數(shù)據(jù)基本特征。然后用注解的方式表示成對應的ContentResolver,即可實現(xiàn)內(nèi)容的抓取工作,無須重復編寫具體解析、下載、保存與任務管理等業(yè)務邏輯。同時程序支持正則表達式、XPath、Css選擇等方式,基本滿足大部分頁面提取場景。應用表明能極大減少用戶編寫主題爬蟲工作。程序目前并未實現(xiàn)圖形化界面配置的簡化方式,后期考慮增加該功能,以進一步減少開發(fā)時間。

        參考文獻:

        [1] 張玉鵬.中國人工智能發(fā)展趨勢現(xiàn)狀及其促進策略[J].科技與創(chuàng)新,2022(15):67-69,72.

        [2] 劉業(yè),吳建平.動態(tài)可配置網(wǎng)絡爬蟲系統(tǒng)的形式化研究[J].福建電腦,2022,38(8):1-4.

        [3] 潘曉英,陳柳,余慧敏,等.主題爬蟲技術研究綜述[J].計算機應用研究,2020,37(4):961-965,972.

        [4] 顧勤.網(wǎng)絡爬蟲技術原理及其應用研究[J].信息與電腦(理論版),2021,33(4):174-176.

        [5] 劉景發(fā),李帆,丁若堯,等.基于本體和模擬退火算法的暴雨災害主題爬蟲策略[J].Frontiers of Information Technology & Electronic Engineering,2022,23(8):1189-1205.

        [6] 定義軟件開發(fā)新模式 中國企業(yè)級無代碼開發(fā)白皮書2021年[C]//艾瑞咨詢系列研究報告(2021年第8期),2021:439-500.

        [7] 王國華.基于python的豆瓣電影網(wǎng)絡爬蟲設計與分析[C]//第三十六屆中國(天津)2022IT、網(wǎng)絡、信息技術、電子、儀器儀表創(chuàng)新學術會議論文集, 2022:212-215.

        [8] 王恒,唐孝國,郭俊亮.基于python的電影評分網(wǎng)頁數(shù)據(jù)爬取[J].黑龍江科學,2022,13(14):48-50,54.

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

        猜你喜歡
        大數(shù)據(jù)
        基于在線教育的大數(shù)據(jù)研究
        中國市場(2016年36期)2016-10-19 04:41:16
        “互聯(lián)網(wǎng)+”農(nóng)產(chǎn)品物流業(yè)的大數(shù)據(jù)策略研究
        中國市場(2016年36期)2016-10-19 03:31:48
        基于大數(shù)據(jù)的小微電商授信評估研究
        中國市場(2016年35期)2016-10-19 01:30:59
        大數(shù)據(jù)時代新聞的新變化探究
        商(2016年27期)2016-10-17 06:26:00
        淺談大數(shù)據(jù)在出版業(yè)的應用
        今傳媒(2016年9期)2016-10-15 23:35:12
        “互聯(lián)網(wǎng)+”對傳統(tǒng)圖書出版的影響和推動作用
        今傳媒(2016年9期)2016-10-15 22:09:11
        大數(shù)據(jù)環(huán)境下基于移動客戶端的傳統(tǒng)媒體轉(zhuǎn)型思路
        新聞世界(2016年10期)2016-10-11 20:13:53
        基于大數(shù)據(jù)背景下的智慧城市建設研究
        科技視界(2016年20期)2016-09-29 10:53:22
        數(shù)據(jù)+輿情:南方報業(yè)創(chuàng)新轉(zhuǎn)型提高服務能力的探索
        中國記者(2016年6期)2016-08-26 12:36:20
        邻居少妇张开腿让我爽视频| 久久亚洲精品ab无码播放| 91亚洲国产成人aⅴ毛片大全| 女人一级特黄大片国产精品| 四虎国产精品免费久久麻豆| 成人国产一区二区三区精品不卡| 中文字幕在线乱码日本| 亚州国产av一区二区三区伊在| 四房播播在线电影| 亚洲国产福利成人一区二区 | 国产爆乳美女娇喘呻吟| 成人黄色网址| 日本精品a在线观看| 蜜桃视频在线免费观看一区二区| 亚洲精品视频1区2区| 亚洲综合激情五月丁香六月| 中文字幕免费观看视频| 在线一区二区三区免费视频观看 | 亚洲av精品一区二区三区 | 国产亚洲精品自在久久77| 国产成人av三级三级三级在线 | 亚洲一区二区三区无码久久| 91制服丝袜| 中文字幕色婷婷在线视频| 特黄 做受又硬又粗又大视频| 天天摸日日摸狠狠添| 国产粉嫩高清| 日本精品少妇一区二区| 蜜桃av精品一区二区三区| 欧美aa大片免费观看视频| 99久久精品国产片| 中文字幕亚洲视频一区| 亚洲毛片αv无线播放一区 | 国产女人的高潮国语对白| 日韩中文无线码在线视频观看| 女同中文字幕在线观看| 国产精品久久国产精品99 gif| 比比资源先锋影音网| 美女扒开内裤露黑毛无遮挡| 精品一区三区视频在线观看| 成人精品视频一区二区三区尤物|