趙光亮 令狐雨薇 朱德孫 趙順艷 楊陶 陳鳳
摘要:該文主要探討B(tài)BS類論壇網(wǎng)頁(yè)的文本數(shù)據(jù)的爬取與分析。首先,對(duì)該類論壇網(wǎng)頁(yè)的HTML結(jié)構(gòu)進(jìn)行研究分析。在該類在論壇類網(wǎng)頁(yè)中,文本數(shù)據(jù)主要包含鏈接頁(yè)面中的全部主貼、全部回帖。其次,結(jié)合正則表達(dá)式、網(wǎng)絡(luò)文本挖掘、Python工具、HTML等工具構(gòu)建該類型論壇網(wǎng)頁(yè)文本數(shù)據(jù)的抓取算法。為了便于用戶閱讀文本,還需要構(gòu)建整理、清洗網(wǎng)頁(yè)文本數(shù)據(jù)的算法,將抓取的網(wǎng)頁(yè)文本數(shù)據(jù)整理為主題和回帖對(duì)應(yīng)的json終極數(shù)據(jù)格局。
關(guān)鍵詞:通用網(wǎng)絡(luò)爬蟲(chóng); BBS;正則表達(dá)式;Python語(yǔ)言
中圖分類號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)24-0259-02
1 背景及意義
當(dāng)今是大數(shù)據(jù)時(shí)代,大數(shù)據(jù)又包含無(wú)窮大的信息,而互聯(lián)網(wǎng)中的網(wǎng)頁(yè)數(shù)據(jù)是半結(jié)構(gòu)化存在的,對(duì)我們真正有用的消息被很多廣告、圖標(biāo)、鏈接等噪音元素遮蔽。怎么將有效的信息從網(wǎng)頁(yè)數(shù)據(jù)中爬取出來(lái)并整理為適合用戶閱讀的最終“產(chǎn)品”,是當(dāng)前整個(gè)大數(shù)據(jù)行業(yè)的重點(diǎn)問(wèn)題之一。由于網(wǎng)頁(yè)通常采取超等文本標(biāo)記語(yǔ)言(HTML)來(lái)表達(dá),所以提取網(wǎng)頁(yè)有關(guān)的信息,應(yīng)先獲取 BBS類型網(wǎng)址,利用 Python語(yǔ)言對(duì)于任意 BBS類型的網(wǎng)頁(yè),獲取其 HTML結(jié)構(gòu)內(nèi)容,再運(yùn)用正則表達(dá)式匹配,構(gòu)建一個(gè)算法用于提取該頁(yè)面全部主貼、所有回帖,并按Json格局開(kāi)始存儲(chǔ)。
2 分析方法
2.1 正則表達(dá)式
本文提及的網(wǎng)絡(luò)爬蟲(chóng)算法主要是利用正則表達(dá)式模糊匹配所需的網(wǎng)頁(yè)信息,正則表達(dá)式的主要是模糊匹配文字的最佳工具。它具有很強(qiáng)的靈活性、邏輯性和功能性,可以通過(guò)簡(jiǎn)單快捷的方式對(duì)字符串實(shí)行復(fù)雜的控制。正則表達(dá)式的應(yīng)用:本文對(duì)要提取出來(lái)的BBS網(wǎng)頁(yè)上的源代碼使用正則表達(dá)式來(lái)抓獲用戶所需要的有效網(wǎng)頁(yè)文本內(nèi)容。
2.2 Python語(yǔ)言
Python首先是一款免費(fèi)開(kāi)源軟件,其次它席卷了其他編程語(yǔ)言的解釋性、編譯性、互動(dòng)性和面向?qū)ο?。它自?urllib、urllib2、 re等爬蟲(chóng)最基本的爬蟲(chóng)庫(kù),網(wǎng)絡(luò)爬蟲(chóng)是基于 Python語(yǔ)言開(kāi)發(fā)的開(kāi)源爬蟲(chóng)軟件,用 Eclipse軟件中加載Pydev插件實(shí)現(xiàn)網(wǎng)絡(luò)平臺(tái)搭建,通過(guò)對(duì)正則表達(dá)式和 Python語(yǔ)言的學(xué)習(xí),在 eclipse中編寫(xiě)代碼實(shí)現(xiàn)任意類型 BBS類型網(wǎng)頁(yè)的信息提取。
3 挖掘過(guò)程
3.1 流程分析
論壇正文提取概括為以下幾個(gè)步驟:
結(jié)合已給樣本數(shù)據(jù)鎖定論文網(wǎng)頁(yè)的網(wǎng)址
對(duì)數(shù)據(jù)進(jìn)行預(yù)處理
結(jié)合正則表達(dá)式判斷現(xiàn)階段的網(wǎng)頁(yè)內(nèi)容是否為論壇所要提取的正文數(shù)據(jù)
基于正則表達(dá)式,對(duì)網(wǎng)頁(yè)信息需求進(jìn)行匹配
進(jìn)行匹配模型的確定
對(duì)預(yù)期結(jié)果進(jìn)行分析,給出最優(yōu)解決方案的模型
3.2 數(shù)據(jù)分析
1)HTML文檔結(jié)構(gòu)與解析
HTML是一種標(biāo)準(zhǔn)的標(biāo)記語(yǔ)言,是由WEB的發(fā)明者Berners-Lee創(chuàng)立的,主要用來(lái)創(chuàng)建Web頁(yè)面。瀏覽器可以通過(guò)讀取HTML文件然后將其渲染到瀏覽器界面中供用戶瀏覽使用。HTML文檔是純文本文檔的一種,它形象地描摹了對(duì)象文檔的各個(gè)細(xì)胞在瀏覽器中的顯示特性,比如顯示對(duì)象文檔某個(gè)細(xì)胞的位置、顏色、字體等信息。
2)BBS網(wǎng)頁(yè)結(jié)構(gòu)分析
對(duì) BBS的 URL進(jìn)行分析,發(fā)現(xiàn) BBS網(wǎng)頁(yè) URL中包含了重要的結(jié)構(gòu)信息,頁(yè)面上的不同元素如標(biāo)題、作者、發(fā)帖時(shí)間、發(fā)帖內(nèi)容、回帖內(nèi)容等出現(xiàn)特定的標(biāo)記符之間,借此實(shí)現(xiàn)了 Python語(yǔ)言爬取網(wǎng)頁(yè)信息挖掘的方向。
3)基于DOM樹(shù)的HTML文檔解析
HTML DOM 即HTML 的標(biāo)準(zhǔn)對(duì)象模型、HTML 的標(biāo)準(zhǔn)編程接口、W3C 標(biāo)準(zhǔn)。它界定了全數(shù) HTML 細(xì)胞的工具和屬性,以及會(huì)見(jiàn)它們的方式??偟膩?lái)說(shuō),HTML DOM 是獲取、修改、添加或刪除 HTML 元素的一個(gè)標(biāo)準(zhǔn)。做出有價(jià)值的信息,能幫助并指導(dǎo)企業(yè)決策、政府決策等工作。
3.3 數(shù)據(jù)預(yù)處理
BBS類網(wǎng)頁(yè)文本榨取主要從網(wǎng)頁(yè)自身的標(biāo)簽語(yǔ)言結(jié)構(gòu),以及網(wǎng)頁(yè)中的分塊視覺(jué)特征的角度出發(fā)。一般情況下,文本數(shù)據(jù)都位于標(biāo)簽的[ table]節(jié)點(diǎn)內(nèi),因此去除頁(yè)面“噪聲”,對(duì)每一個(gè)[ table]節(jié)點(diǎn)進(jìn)行處理后,就可以得到不含任何標(biāo)簽內(nèi)容的純文本字符串。
通過(guò)對(duì) BBS類網(wǎng)頁(yè)的 HTML文檔結(jié)構(gòu)進(jìn)行研究,構(gòu)建了從網(wǎng)頁(yè)源代碼中抽取所有主貼、所有回帖相關(guān)的信息的算法,最后能有效地抓獲我們的目標(biāo)信息。用正則達(dá)式的匹配功能,我們能夠快速地實(shí)現(xiàn)URL 的抽取。網(wǎng)絡(luò)爬蟲(chóng)以種子網(wǎng)頁(yè)為“源”,提取種子網(wǎng)頁(yè)中的有用鏈接并將其放入一個(gè)有序的候補(bǔ)爬行隊(duì)列中,按照用戶希望的規(guī)則從隊(duì)列中提取URL。為了避免重復(fù)訪問(wèn)同一個(gè)鏈接,我們將以訪問(wèn)過(guò)的URL備份到已訪問(wèn)URL隊(duì)列。
為了使得抓取的數(shù)據(jù)有效,將對(duì)整體數(shù)據(jù)進(jìn)行非正常剔除。(例如:Web網(wǎng)頁(yè)打不開(kāi),指定的主題不存在等。整體數(shù)據(jù)進(jìn)行非正常剔除。(例如:網(wǎng)頁(yè)打不開(kāi),指定的主題不存在或已被刪除或正在被審核,請(qǐng)返回)。
3.4 挖掘建模
聯(lián)網(wǎng)比喻為一張蜘蛛網(wǎng), Crawler就像敏捷的蜘蛛一樣在這張網(wǎng)上掃蕩,不斷地偵探互聯(lián)網(wǎng)上對(duì)用戶有用的文本信息。為了快速準(zhǔn)確獲取,聯(lián)網(wǎng)比喻為一張蜘蛛網(wǎng), Crawler就像蜘蛛一樣在這張網(wǎng)上游走,不斷地搜索互聯(lián)網(wǎng)上的有用信息。為了快速準(zhǔn)確獲取輿情信息,提出以下提取方式,方案如下:
(1)獲取任意BBS類型的URL
(2)針對(duì)任意BBS類型網(wǎng)頁(yè),正文提取需要的數(shù)據(jù)項(xiàng)主要有主貼(正文、時(shí)間及作者)、回帖(正文、時(shí)間及作者)。本文在通過(guò)網(wǎng)頁(yè)正文提取技術(shù)的基礎(chǔ)上,實(shí)現(xiàn)了對(duì)網(wǎng)頁(yè)正文更好的提取,利用html標(biāo)簽對(duì)正文、時(shí)間及作者進(jìn)行分析。
(3)如果要對(duì)BBS類論壇網(wǎng)頁(yè)進(jìn)行抓取,那么需要先對(duì)該類網(wǎng)頁(yè)進(jìn)行聚類處理。
(4)然后對(duì)用戶需要的取數(shù)據(jù)項(xiàng)信息進(jìn)行爬取,對(duì)于有發(fā)表作者、主題、發(fā)表內(nèi)容和發(fā)表時(shí)間的網(wǎng)頁(yè),本文采用正則表BBS類論壇網(wǎng)絡(luò)爬蟲(chóng)實(shí)現(xiàn)循環(huán)獲取網(wǎng)頁(yè)的原理是通過(guò)不斷地沖擊網(wǎng)頁(yè)內(nèi)文本包含的超鏈接地址來(lái)獲取更多的網(wǎng)頁(yè),算法模型如下:
獲取任意BBS類型的URL
針對(duì)任意類型BBS網(wǎng)頁(yè),利用HTML標(biāo)簽樹(shù)對(duì)正文、時(shí)間及作者進(jìn)行分析
在BBS論壇類網(wǎng)頁(yè)進(jìn)行抽取之前,需要先對(duì)爬行的網(wǎng)頁(yè)進(jìn)行聚類
用正則表達(dá)式對(duì)網(wǎng)頁(yè)的抽取數(shù)據(jù)項(xiàng)有發(fā)表作者、內(nèi)容、主題和發(fā)表時(shí)間
3.5 分析結(jié)果
針對(duì)挖掘模型,經(jīng)過(guò)數(shù)據(jù)處理后結(jié)果如下:
標(biāo)題信息
{標(biāo)題信息:"從這條新聞中你得到了什么教訓(xùn)? - 笑話大全 - 搞笑村"}
題主信息
{題主信息: "臨風(fēng)有點(diǎn)冷"}
題主發(fā)帖內(nèi)容
{“題主發(fā)帖內(nèi)容”:[{“在網(wǎng)上看個(gè)新聞,大概內(nèi)容是”:”老公買了一只藏獒幼仔,沒(méi)時(shí)間養(yǎng),一直是老婆在養(yǎng)”},{“一次老公老婆吵架,老公把老婆打了,結(jié)果藏獒沖出來(lái)果斷把老公手咬斷了!”},{“打老婆時(shí)要把狗栓好!” }]}
回帖信息
{“回帖信息”:"分?jǐn)?shù)高如果認(rèn)購(gòu)二哥讓他退給我"}
回帖作者
{“回帖作者”:"豪杰先鋒濤濤"}
回帖時(shí)間:
{“回帖時(shí)間”:"2016-9-4 09:57:16"}
3.6 算法評(píng)價(jià)
本文的算法是固定的對(duì)于某類的 BBS類類型的BBS類論壇網(wǎng)頁(yè),對(duì)于任意類型的BBS類論壇網(wǎng)頁(yè)的信息提取還沒(méi)有達(dá)到。算法使用的匹配原則不能實(shí)時(shí)更新,對(duì)于不斷更新的網(wǎng)頁(yè)源代碼,本文所使用的算法可能會(huì)不適用。
4 結(jié)語(yǔ)
針對(duì) BBS論壇網(wǎng)頁(yè)的主貼與回帖的提取,本文使用的是正則表達(dá)式來(lái)對(duì)網(wǎng)頁(yè)源代碼進(jìn)行所需信息的匹配與提取,為了更準(zhǔn)確地使用正則表達(dá)式,在之前了解了網(wǎng)頁(yè)源代碼的結(jié)構(gòu),根據(jù)所需要的內(nèi)容所在的標(biāo)簽進(jìn)行了多網(wǎng)頁(yè)的分析。使用相似度最大的一種正則表達(dá)式的表示方法對(duì)網(wǎng)頁(yè)源代碼進(jìn)行匹配標(biāo)記。本文對(duì)網(wǎng)頁(yè)文本數(shù)據(jù)的提取是具有一定的局限性,主要針對(duì) BBS論壇中的信息正則表達(dá)式,協(xié)同網(wǎng)絡(luò)爬蟲(chóng)技術(shù),使得數(shù)據(jù)分析員能夠快速?gòu)幕ヂ?lián)網(wǎng)中獲取海量的網(wǎng)頁(yè)數(shù)據(jù),對(duì)抓獲的數(shù)據(jù)進(jìn)行系統(tǒng)的整理和分析,從中提取出對(duì)互聯(lián)網(wǎng)數(shù)據(jù)用戶有價(jià)值的信息,并指導(dǎo)該用戶做出決策等。
參考文獻(xiàn):
[1] 李媛.輿情系統(tǒng)中web信息抽取子系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].電子科技大學(xué),2013.
[2] 余浩.基于網(wǎng)絡(luò)信息檢索的網(wǎng)頁(yè)文本抽取和處理的研究[D].南京郵電大學(xué),2014.
[3] 劉佐達(dá),張久嶺,陳茂科,等.一種面向BBS信息檢索的主題網(wǎng)絡(luò)爬蟲(chóng)算法[J].鄭州大學(xué)學(xué)報(bào)(理學(xué)版),2010(6).
【通聯(lián)編輯:代影】