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

        ?

        基于WebMagic 爬蟲框架的網(wǎng)頁信息系統(tǒng)設(shè)計(jì)

        2023-08-22 10:30:34朱延剛
        無線互聯(lián)科技 2023年11期
        關(guān)鍵詞:頁面系統(tǒng)設(shè)計(jì)

        朱延剛

        (南京信息工程大學(xué),江蘇 南京 210044))

        0 引言

        隨著互聯(lián)網(wǎng)技術(shù)的迅速發(fā)展,各類互聯(lián)網(wǎng)平臺(tái)大量涌現(xiàn)。 但這些平臺(tái)在為網(wǎng)絡(luò)用戶提供豐富的媒體資源的同時(shí),也增加了用戶直接高效獲取有用信息的難度,特別是具有行業(yè)性、專業(yè)性的信息,很容易淹沒在信息的海洋中。 僅僅通過傳統(tǒng)的搜索引擎獲取的檢索信息,已經(jīng)無法滿足更為專業(yè)的信息需求。 因此,如何對(duì)海量的信息進(jìn)行歸納和提取變得十分重要。 目前,有很多針對(duì)特定場(chǎng)景設(shè)計(jì)的Java 爬蟲系統(tǒng),可以滿足如圖片下載[1]、特定技術(shù)主題或新聞媒體咨詢整合等多種特定需求[2-4]。 這些爬蟲系統(tǒng)的提出,都能針對(duì)特定的業(yè)務(wù)場(chǎng)景設(shè)計(jì)出針對(duì)性比較強(qiáng)的解決方案。 設(shè)計(jì)一種適用性和可擴(kuò)展性更好的爬蟲信息采集系統(tǒng),不僅可以降低用戶構(gòu)建特定場(chǎng)景的爬蟲系統(tǒng)設(shè)計(jì)難度,還能提高設(shè)計(jì)者的開發(fā)效率。 本文基于WebMagic 框架,提出了一種適用性和可擴(kuò)展性更好的開發(fā)框架。

        1 技術(shù)介紹

        1.1 HttpClient 和Jsoup

        HttpClient 是Apache HttpComponentsTM項(xiàng)目負(fù)責(zé)創(chuàng)建和維護(hù)的一個(gè)基于HTTP 協(xié)議的Java 組件開發(fā)包。 HttpClient 與一般的瀏覽器不同,它不提供UI 界面,但是可以完成和瀏覽器相同的功能。 此外,還可以用來發(fā)送請(qǐng)求,接收服務(wù)器響應(yīng)數(shù)據(jù)。 因此,HttpClient 通常被開發(fā)人員作為API 來調(diào)用。 Jsoup是一個(gè)用于處理HTML 的Java 庫,可以提供一個(gè)非常便捷的API。 在網(wǎng)頁爬蟲中,Jsoup 主要用來從URL、文件或字符串中抓取和解析HTML,使用DOM 遍歷或CSS 選擇器查找和提取數(shù)據(jù),操作 HTML 元素、屬性和文本。 除此之外,它還能根據(jù)安全列表清理用戶提交的內(nèi)容,以防止 XSS 攻擊。

        1.2 SpringData

        SpringData 是被廣泛使用的Web 開發(fā)框架Spring的重要組成部分,用于簡化數(shù)據(jù)庫的訪問。 本文之所以介紹SpringData,是因?yàn)樗哂袕?qiáng)大的數(shù)據(jù)持久層的支持開發(fā)能力。 不僅支持關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)存儲(chǔ),比如JDBC,JPA 等,也支持非關(guān)系型的數(shù)據(jù)存儲(chǔ),比如Redis[5],ElasticSearch[6],Neo4j[7]等。 SpringData框架很好地提升了數(shù)據(jù)存儲(chǔ)層面的適用性和可擴(kuò)展性。

        1.3 WebMagic

        目前,主流的Java 爬蟲框架主要有Nutch,Crawler4j,WebMagic,WebCollector 等。 這些爬蟲框架都有各自的優(yōu)缺點(diǎn)。 本文選擇WebMagic 作為基本的爬蟲框架,主要基于以下3 點(diǎn):(1)WebMagic 的設(shè)計(jì)參考了業(yè)界比較成熟的爬蟲框架 Scrapy;(2)WebMagic 支持多線程任務(wù),能充分利用硬件資源,提高數(shù)據(jù)的處理速率;(3)WebMagic 的4 大組件Downloader,PageProcessor,Scheduler,Pipeline 對(duì)應(yīng)了爬蟲生命周期中的下載、處理、管理和持久化4 個(gè)過程。 對(duì)系統(tǒng)開發(fā)者來說,主要的業(yè)務(wù)代碼通常在PageProcessor 完 成 即 可。 其 他 的3 大 組 件, 即Downloader,Scheduler,Pipeline,也具有定制性。 系統(tǒng)設(shè)計(jì)者可以根據(jù)自己的需求,來修改完善組件的代碼。 因此,選擇WebMagic 框架作為基礎(chǔ)架構(gòu)能夠使整個(gè)系統(tǒng)具有更好的適應(yīng)性和可用性。

        2 框架結(jié)構(gòu)設(shè)計(jì)

        本文提出的基于WebMagic 的爬蟲框架,主要包含了3 個(gè)業(yè)務(wù)處理流程:頁面數(shù)據(jù)獲取、數(shù)據(jù)分析處理和數(shù)據(jù)存儲(chǔ)持久化。 每個(gè)業(yè)務(wù)流程也會(huì)提交或者產(chǎn)生不同階段的數(shù)據(jù)。 通過分析這些數(shù)據(jù)流,能促進(jìn)系統(tǒng)設(shè)計(jì)者更好地理解系統(tǒng)結(jié)構(gòu),了解需要參與的實(shí)體,以及每個(gè)業(yè)務(wù)流程在每個(gè)階段需要完成的明確任務(wù)和目標(biāo)。 具體的結(jié)構(gòu)如圖1 所示。 本文將具體闡述每個(gè)框架結(jié)構(gòu)部分,具體的設(shè)計(jì)思路。

        2.1 頁面數(shù)據(jù)獲取

        對(duì)于頁面數(shù)據(jù)獲取而言,系統(tǒng)設(shè)計(jì)者在設(shè)計(jì)任何場(chǎng)景的網(wǎng)頁爬蟲系統(tǒng)時(shí),都需要確定目標(biāo)信息定位,明確將哪些站點(diǎn)平臺(tái)作為信息來源,其選取的信息源的質(zhì)量越高,得到的信息就越有價(jià)值。 因此系統(tǒng)設(shè)計(jì)者是否能選取合適的站點(diǎn),對(duì)于獲取數(shù)據(jù)頁面信息是至關(guān)重要的。 一般網(wǎng)頁獲取分為開放式和注冊(cè)登錄式。 前者的瀏覽權(quán)限比較低,使用者通過訪客模式就可以正常瀏覽站點(diǎn)信息,這種類型的頁面數(shù)據(jù)獲取比較容易。 相比之下,登錄注冊(cè)式的站點(diǎn)更加復(fù)雜,信息獲取的流程更為煩瑣。 本文針對(duì)登錄注冊(cè)式站點(diǎn)的頁面數(shù)據(jù)獲取流程做了簡要闡述。

        對(duì)于登錄注冊(cè)式的頁面,用戶可以進(jìn)行常規(guī)的注冊(cè),然后獲取用戶名和密碼,再通過框架的API 接口,模擬瀏覽器登錄。 對(duì)于帶有圖片驗(yàn)證的模擬登錄,其登錄過程也是目前的一個(gè)難點(diǎn)。 對(duì)于站點(diǎn)的分類分頁頁面數(shù)據(jù),系統(tǒng)設(shè)計(jì)者還要通過瀏覽器的開發(fā)者工具,分析HTTP 報(bào)文的請(qǐng)求頭和響應(yīng)頭以及響應(yīng)參數(shù)的特點(diǎn)。 設(shè)計(jì)者對(duì)請(qǐng)求頭的請(qǐng)求參數(shù)進(jìn)行分析可以幫助其確定需要提交哪些請(qǐng)求參數(shù)。 設(shè)計(jì)者通過點(diǎn)擊分頁發(fā)起請(qǐng)求時(shí),對(duì)應(yīng)的請(qǐng)求參數(shù)需要攜帶Cookie中的JSESSIONID,而當(dāng)設(shè)計(jì)者對(duì)這一請(qǐng)求所產(chǎn)生的響應(yīng)數(shù)據(jù)進(jìn)行分析時(shí),有時(shí)候可以得到一些JSON 字符串,也就是設(shè)計(jì)者需要提取的信息文本。

        2.2 數(shù)據(jù)分析處理

        系統(tǒng)設(shè)計(jì)者獲取了頁面的數(shù)據(jù)之后,需要進(jìn)一步地對(duì)頁面數(shù)據(jù)進(jìn)行分析處理。 這里的頁面數(shù)據(jù)的主要形式就是服務(wù)器響應(yīng)給請(qǐng)求端的HTML 標(biāo)簽,CSS樣式表等字符源碼。 為了更好地定位到需要的頁面標(biāo)簽數(shù)據(jù),系統(tǒng)設(shè)計(jì)者同樣可以借助瀏覽器的開發(fā)者工具,通過點(diǎn)擊元素檢查按鈕,迅速定位標(biāo)簽,提升數(shù)據(jù)分析效率。 在確定了具體的元素標(biāo)簽之后,系統(tǒng)設(shè)計(jì)者就可以借助WebMagic 3 種數(shù)據(jù)抽取技術(shù)(即XPath、CSS 選擇器和正則表達(dá)式)對(duì)需要的頁面數(shù)據(jù)進(jìn)行分割提取,或者選擇相對(duì)獨(dú)立的Jsoup 開發(fā)庫作為數(shù)據(jù)抽取工具。

        基于WebMagic 的爬蟲框架有一個(gè)比較大的優(yōu)點(diǎn),就是支持多線程任務(wù)。 系統(tǒng)設(shè)計(jì)者可以充分利用開發(fā)平臺(tái)的硬件性能,減少數(shù)據(jù)抓取處理的時(shí)間,但是需要注意線程的安全性問題。 WebMagic 會(huì)自動(dòng)提取頁面出現(xiàn)的HTTP 的請(qǐng)求連接,然后把它們放到請(qǐng)求的隊(duì)列中去。 如果有多個(gè)分類,每個(gè)分類還有多個(gè)頁面,而且每個(gè)分類頁面數(shù)據(jù)返回的時(shí)間也具有不確定性。 如果系統(tǒng)設(shè)計(jì)者在同一個(gè)PageProcessor 里處理業(yè)務(wù)邏輯,就要考慮多線程條件下的線程安全問題,否則將無法保證結(jié)果數(shù)據(jù)的準(zhǔn)確可靠。

        2.3 數(shù)據(jù)持久化

        系統(tǒng)設(shè)計(jì)者在獲得了目標(biāo)數(shù)據(jù)之后,為了便于后期進(jìn)一步對(duì)數(shù)據(jù)進(jìn)行分析提取,就要解決數(shù)據(jù)的存儲(chǔ)問題。 目前,數(shù)據(jù)存儲(chǔ)主要有兩種方案:關(guān)系型數(shù)據(jù)持久方案和非關(guān)系型數(shù)據(jù)持久方案。 系統(tǒng)設(shè)計(jì)者最終選取何種數(shù)據(jù)存儲(chǔ)方案更合適,需要根據(jù)自身的業(yè)務(wù)需求和特點(diǎn)并結(jié)合下一步對(duì)數(shù)據(jù)處理需要采取的具體策略來確定。 關(guān)系型數(shù)據(jù)持久方案的優(yōu)點(diǎn)是易于維護(hù),支持通用的SQL 查詢語句,且支持事務(wù)處理。但它也有缺點(diǎn),即讀寫較慢,不適合對(duì)I/O 要求高的操作。 非關(guān)系型數(shù)據(jù)持久方案存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)靈活,還支持內(nèi)存存儲(chǔ),所以讀寫性能較好,查詢速度快,但它的缺點(diǎn)是不支持通用的SQL 查詢,基本也不支持事務(wù)處理,且對(duì)于初學(xué)者來說,其學(xué)習(xí)成本也更高。

        基于WebMagic 的爬蟲框架使用了Pipeline 數(shù)據(jù)持久化組件,并提供了3 個(gè)實(shí)現(xiàn)類:用于向控制臺(tái)輸出的ConsolePipeline 類,用于向磁盤輸出文件的FilePipeline 類,還有用于保存Json 格式文件的JsonFilePipeline 類。 系統(tǒng)設(shè)計(jì)者可以根據(jù)需要定制合適的Pipeline,以實(shí)現(xiàn)對(duì)數(shù)據(jù)的持久化存儲(chǔ)。 系統(tǒng)設(shè)計(jì)者可以把Pipeline 作為一個(gè)可選的組件,因?yàn)閃ebMagic 作為一種Java 開發(fā)平臺(tái)本身就擁有很好的靈活性,設(shè)計(jì)者可以使用個(gè)性化的數(shù)據(jù)持久化組件,例如,設(shè)計(jì)者可以把本文技術(shù)介紹部分提到的SpringData 框架作為組件,從而發(fā)揮該框架支持的多種數(shù)據(jù)類型的持久化功能。 系統(tǒng)設(shè)計(jì)者可以進(jìn)一步提升系統(tǒng)的適用性和可擴(kuò)展性以及對(duì)抓取數(shù)據(jù)后期的可用性。 這些系統(tǒng)提升有利于對(duì)數(shù)據(jù)進(jìn)行更深層次的處理。

        3 技術(shù)實(shí)現(xiàn)

        3.1 創(chuàng)建頁面數(shù)據(jù)爬取業(yè)務(wù)實(shí)現(xiàn)類

        基于WebMagic 爬蟲框架的系統(tǒng)設(shè)計(jì)中,一般不可缺少的組件是PageProcessor。 通過這個(gè)組件,系統(tǒng)設(shè)計(jì)者可以對(duì)頁面數(shù)據(jù)分析處理邏輯進(jìn)行設(shè)計(jì),而具體的邏輯設(shè)計(jì)需要根據(jù)具體的業(yè)務(wù)需求來確定。PageProcessor 組件也定義實(shí)現(xiàn)了一些具有HttpClient功能的對(duì)象,比如Site 對(duì)象。 站點(diǎn)本身的一些配置信息,例如編碼、HTTP 頭、超時(shí)時(shí)間、重試策略和代理等,都可以通過設(shè)置Site 對(duì)象來進(jìn)行配置,增強(qiáng)框架的功能。 下面展示了一個(gè)帶分頁的爬蟲數(shù)據(jù)分析提取的例子,部分核心代碼如下:

        class DemoProcessor implements PageProcessor {

        / /站點(diǎn)對(duì)象參數(shù)設(shè)置

        private Site site = Site.me()

        .setCharset("UTF-8")/ /設(shè)置編碼

        .setTimeOut(10000)/ /超時(shí)時(shí)間

        .setRetrySleepTime(3000)/ /重試時(shí)間

        .setSleepTime(10);/ /重試次數(shù)

        public Site getSite() {return site;}

        public void process(Page page) {

        / /編寫頁面數(shù)據(jù)分析處理代碼

        / /獲取頁面上的HTTP 鏈接

        String pageUrl = page.getUrl().toString();

        / /將頁面的HTML 標(biāo)簽通過Jsoup 生成一個(gè)可解析的文檔

        Document doc = Jsoup. parse(page. getHtml().toString());

        / /借助開發(fā)者工具定位標(biāo)簽元素解析數(shù)據(jù)

        String div = doc.select("div[module-name=icbupc-productListPc]").attr("module-data");

        / /對(duì)數(shù)據(jù)進(jìn)行URLDecode 解碼

        String decode = URLDecoder.decode(div);

        / /將字符串轉(zhuǎn)化成JSON 對(duì)象進(jìn)行解析

        JSONObject jsonObject =JSON. parseObject(decode);

        / /獲得當(dāng)前分類是數(shù)據(jù)總數(shù)目

        Integer totalLines = jsonObject. getJSONObject("mds")

        . getJSONObject(" pageNavView"). getInteger("totalLines");

        / /獲取當(dāng)前分頁的頁碼

        Integer pageLines = jsonObject. getJSONObject("mds")

        . getJSONObject(" pageNavView"). getInteger("pageLines");

        / /獲取當(dāng)前分類的總頁數(shù)

        int totalPage = (totalLines + pageLines - 1) /pageLines;

        }}

        3.2 創(chuàng)建爬蟲業(yè)務(wù)的啟動(dòng)入口

        Spider 對(duì)象是爬蟲啟動(dòng)的入口對(duì)象。 在這個(gè)入口對(duì)象create 方法的內(nèi)部,系統(tǒng)設(shè)計(jì)者可以傳入完成的頁面數(shù)據(jù)爬取業(yè)務(wù)實(shí)現(xiàn)類DemoProcessor,然后再調(diào)用run 方法進(jìn)行啟動(dòng)。 此外,另一個(gè)在Spider 對(duì)象上比較常用的方法是addUrl,系統(tǒng)設(shè)計(jì)者可以用這個(gè)方法來添加初始的URL 地址參數(shù)。 該地址參數(shù)一般就是站點(diǎn)的入口地址。 Spider 對(duì)象的部分核心代碼如下:

        Spider. create (newDemoProcessor ( ))/ /傳入PageProcessor 參數(shù)

        .addUrl(URL)/ /初始的URL

        .thread(10)/ /開啟的線程數(shù)

        .run();

        Spider 對(duì)象還提供一個(gè)addPipeline 方法,顧名思義,這個(gè)方法主要是用于傳入設(shè)計(jì)人員自定義的Pipeline 組件對(duì)象的。

        3.3 創(chuàng)建數(shù)據(jù)持久化邏輯接口

        關(guān)于如何把獲取的提取數(shù)據(jù)進(jìn)行持久化的問題,本文在框架結(jié)構(gòu)設(shè)計(jì)部分已經(jīng)做了闡述。 如果系統(tǒng)設(shè)計(jì)者將得到的目標(biāo)數(shù)據(jù)保存成文件的形式,則不利于大數(shù)據(jù)量的管理和查詢。 對(duì)此,本文認(rèn)為,系統(tǒng)設(shè)計(jì)者需要對(duì)數(shù)據(jù)進(jìn)行數(shù)據(jù)庫的持久化設(shè)計(jì)。

        3.3.1 通過定制Pipeline 的方式

        通過Pipeline 有兩種導(dǎo)入數(shù)據(jù)庫的方式:注解方式和常規(guī)的代碼方式。 系統(tǒng)設(shè)計(jì)者可以定義一個(gè)名為AnnotationObjectDaoPipeline 的注解類,具體代碼如下:

        @Component("AnnotationObjectDaoPipeline")

        public class AnnotationObjectDaoPipeline implements PageModelPipeline {}

        注 解 的 方 式 需 要 實(shí) 現(xiàn) WebMagic 的PageModelPipeline 接口。 系統(tǒng)設(shè)計(jì)者通過泛型傳入定義好的數(shù)據(jù)模型,最后在內(nèi)部實(shí)現(xiàn)process 方法即可。

        另一種是常規(guī)代碼的實(shí)現(xiàn)方式。 系統(tǒng)設(shè)計(jì)者需要定義一個(gè)實(shí)現(xiàn)類CommonCodePipeline,具體代碼如下:

        public class CommonCodePipelineimplements Pipeline {}

        這種方式也需要系統(tǒng)設(shè)計(jì)者重寫內(nèi)部的process方法。 兩種方式可以根據(jù)設(shè)計(jì)者自身的需求,靈活應(yīng)用。 Pipeline 其實(shí)就是將PageProcessor 的抽取結(jié)果,進(jìn)行獨(dú)立的處理。 之所以設(shè)計(jì)者可以考慮使用Pipeline 組件,主要是因?yàn)槠渚哂袃纱髢?yōu)點(diǎn):(1)這種方式實(shí)現(xiàn)了模塊分離,代碼結(jié)構(gòu)比較清晰,而且解析抽取和數(shù)據(jù)保存各自占用獨(dú)立的線程,互不干擾;(2)Pipeline 的功能比較固定,更容易做成通用組件。

        3.3.2 自定義數(shù)據(jù)持久化接口

        如果系統(tǒng)設(shè)計(jì)者認(rèn)為使用Pipeline 組件比較煩瑣,學(xué)習(xí)成本較高,也可以設(shè)計(jì)定義常規(guī)的數(shù)據(jù)接口層。 具體而言,設(shè)計(jì)者可以根據(jù)業(yè)務(wù)需求設(shè)計(jì)Service層和Dao 層,然后直接在PageProcessor 組件內(nèi)部使用process 方法,增加數(shù)據(jù)保存的業(yè)務(wù)代碼。 這種方式的優(yōu)勢(shì)是降低了學(xué)習(xí)成本,提高了系統(tǒng)設(shè)計(jì)開發(fā)的效率,但其缺點(diǎn)是增加了系統(tǒng)模塊的耦合性,不利于后期的代碼維護(hù)。

        4 結(jié)語

        針對(duì)一般網(wǎng)頁爬蟲系統(tǒng)設(shè)計(jì)具有的特殊性和場(chǎng)景單一性,本文提出了一種基于WebMagic 框架的具有可適用性和可擴(kuò)展性的系統(tǒng)設(shè)計(jì)。 系統(tǒng)設(shè)計(jì)人員若采用這一系統(tǒng)的設(shè)計(jì)方案,可以更好地搭建自己的爬蟲項(xiàng)目,構(gòu)建可用性和健壯性更好的數(shù)據(jù)系統(tǒng)。 本文提出的系統(tǒng)仍存在較大的可完善空間,比如設(shè)計(jì)者可以繼續(xù)優(yōu)化增量爬蟲數(shù)據(jù)的備份以及解決去重問題等,以進(jìn)一步提升系統(tǒng)功能的完善性。

        猜你喜歡
        頁面系統(tǒng)設(shè)計(jì)
        大狗熊在睡覺
        Smartflower POP 一體式光伏系統(tǒng)
        刷新生活的頁面
        WJ-700無人機(jī)系統(tǒng)
        ZC系列無人機(jī)遙感系統(tǒng)
        瞞天過?!律O(shè)計(jì)萌到家
        連通與提升系統(tǒng)的最后一塊拼圖 Audiolab 傲立 M-DAC mini
        設(shè)計(jì)秀
        海峽姐妹(2017年7期)2017-07-31 19:08:17
        有種設(shè)計(jì)叫而專
        Coco薇(2017年5期)2017-06-05 08:53:16
        同一Word文檔 縱橫頁面并存
        久久免费网国产AⅤ| 青青草免费在线爽视频| 影音先锋久久久久av综合网成人| 五月综合激情婷婷六月色窝| 久久免费网国产AⅤ| 亚洲嫩模一区二区三区视频| 亚洲熟女乱一区二区三区| 亚洲人成电影网站色| 蜜臀aⅴ国产精品久久久国产老师 国产精品久久婷婷六月丁香 | 少妇太爽了在线观看免费视频| 亚洲AV小说在线观看| 可以直接在线看国产在线片网址 | 国产精品丝袜美女久久| 后入内射国产一区二区| 中国丰满熟妇av| 日本女优中文字幕看片| 人妻少妇中文字幕久久hd高清| 狠狠色噜噜狠狠狠777米奇| 国产成人无码免费网站| 91福利精品老师国产自产在线| 国产韩国一区二区三区| 日本一二三区视频在线| 成人免费视频在线观看| 日本一区二区三区小视频| 在线视频色系中文字幕| 欧美性受xxxx狂喷水| 亚洲国产精品国自产电影| 成人短篇在线视频夫妻刺激自拍 | 扒开非洲女人大荫蒂视频 | 无码视频一区二区三区在线观看| 男人的天堂av一二三区| 蜜桃a人妻精品一区二区三区| 2018国产精华国产精品| 国产精品流白浆喷水| 亚洲国产女同在线观看| 在教室伦流澡到高潮hgl动漫| 在教室伦流澡到高潮hnp视频| 国产美女三级视频网站| 丁香婷婷激情视频在线播放| 尤物视频在线观看| 国产精品一区二区三级|