国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

智學(xué)分享資源有效性檢測工具設(shè)計(jì)與實(shí)現(xiàn)

2018-01-09 13:19:53尹子軒王影劉建賓
軟件導(dǎo)刊 2017年12期
關(guān)鍵詞:網(wǎng)絡(luò)爬蟲

尹子軒+王影+劉建賓

摘要:為提高智學(xué)分享課程網(wǎng)站中分享鏈接資源有效性檢測工作效率,針對抓取亂碼、反爬蟲等一些難點(diǎn)問題,運(yùn)用Java開發(fā)了一個基于深度優(yōu)先算法的爬蟲工具。該工具可對學(xué)生分享的鏈接資源是否真實(shí)存在進(jìn)行判斷,并輸出學(xué)生的學(xué)號信息以及所對應(yīng)的判斷結(jié)果,從而替代手工操作,減輕教師負(fù)擔(dān),應(yīng)用效果良好。

關(guān)鍵詞:Java;深度優(yōu)先遍歷;網(wǎng)絡(luò)爬蟲;反爬蟲策略

DOIDOI:10.11907/rjdk.172015

中圖分類號:TP319

文獻(xiàn)標(biāo)識碼:A 文章編號:1672-7800(2017)012-0109-03

Abstract:In order to improve the efficiency of the share-link resources effectiveness detection work on the intelligence sharing course website,aiming at grab messy code, anti-reptile and other difficult problems, using java to develop the reptile tool based on depth-first algorithm. The tool can judge whether the link resources shared by students are real to exisit, and output the Student ID information of students and corresponding judgment result, thus instead of manual operation and reduce the burden on teachers, and the application effect is good.

Key Words:Java; depth-first traversal; internet worm; anti crawling strategy

0 引言

隨著互聯(lián)網(wǎng)的發(fā)展,大量資源數(shù)據(jù)通過Web共享發(fā)布,其已成為世界上規(guī)模最大的數(shù)據(jù)源。目前,網(wǎng)絡(luò)資源種類繁多,且較為分散,用戶對資源的針對性獲取十分不便。針對該現(xiàn)象,智學(xué)分享課程網(wǎng)站通過將大學(xué)生的學(xué)習(xí)資源進(jìn)行分類整合和共享發(fā)布,讓大學(xué)生獲取學(xué)習(xí)資源更加便利,并激發(fā)學(xué)習(xí)熱情,提高學(xué)習(xí)效率。但同時,為了提高學(xué)生的資源分享質(zhì)量,教師不得不對每個學(xué)生分享的鏈接進(jìn)行手工檢測,工作量十分龐大,導(dǎo)致效率低下。

為解決該問題,本文提出一種解決方案,通過Java設(shè)計(jì)出一種檢測工具,運(yùn)用網(wǎng)絡(luò)爬蟲技術(shù),對網(wǎng)站中分享的數(shù)據(jù)進(jìn)行自動檢測,并將連接是否可用、內(nèi)容是否與主題相關(guān)等信息以表格形式反饋給教師,替代傳統(tǒng)手工操作,一定程度上減輕了教師工作壓力。

1 相關(guān)概念

網(wǎng)絡(luò)爬蟲又稱蠕蟲,是一種按照一定規(guī)則,自動抓取萬維網(wǎng)信息的程序或腳本,其目的是將互聯(lián)網(wǎng)上的網(wǎng)頁下載到本地形成互聯(lián)網(wǎng)內(nèi)容備份,是抓取網(wǎng)絡(luò)數(shù)據(jù)的重要技術(shù)。一般爬蟲會采用一定遍歷策略,由一個或多個初始頁面的URL,通過分析頁面源文件的URL,抓取新的Web鏈接,通過這些鏈接再尋找新的鏈接,如此不斷循環(huán),直至抓取和分析所有頁面[1]。

反爬蟲的目的在于減少網(wǎng)站資源消耗,設(shè)計(jì)不合理的爬蟲會造成網(wǎng)站巨大的訪問壓力,導(dǎo)致網(wǎng)站訪問速度緩慢,甚至無法訪問。反爬蟲策略一般通過檢測用戶請求的Headers、用戶行為、網(wǎng)站目錄和數(shù)據(jù)加載方式限制爬蟲訪問,因此增大了數(shù)據(jù)爬取難度。

正則表達(dá)式是一種可以用于模式匹配和替換的規(guī)范,一個正則表達(dá)式是由普通字符(例如字符a到z)及特殊字符(元字符)組成的文字模式,用以描述在查找文字主體時待匹配的一個或多個字符串。正則表達(dá)式作為一個模板,將某個字符模式與所搜索的字符串進(jìn)行匹配。

字符編碼也稱字集碼,是將字符集中的字符編碼成指定集合中的某一對象,以便文本在計(jì)算機(jī)中存儲并由通信網(wǎng)絡(luò)傳遞[2]。

2 程序設(shè)計(jì)

2.1 功能分析

此程序的主要功能是對學(xué)生分享的鏈接是否真實(shí)存在進(jìn)行檢測判斷,實(shí)現(xiàn)對目標(biāo)網(wǎng)站的搜索以及關(guān)鍵數(shù)據(jù)的采集。具體操作如下:首先,從智學(xué)分享網(wǎng)站初始頁開始,按照一定策略依次搜索該網(wǎng)站所有頁面,在分享頁面中獲取學(xué)生學(xué)號信息及評論內(nèi)容,并逐一訪問當(dāng)前頁面學(xué)生分享的鏈接數(shù)據(jù);然后,根據(jù)不同的訪問結(jié)果采用數(shù)字進(jìn)行區(qū)分標(biāo)識,如果可以訪問,標(biāo)記為1,訪問被禁止,標(biāo)記為0,該鏈接不存在,標(biāo)記為-1,將標(biāo)識的結(jié)果、評論信息以及分享該鏈接的學(xué)生學(xué)號一一對應(yīng);最后,將每個學(xué)號信息以及對應(yīng)分享的鏈接訪問結(jié)果儲存至sql數(shù)據(jù)庫中,從而方便教師對學(xué)生分享的數(shù)據(jù)進(jìn)行評價。

2.2 模塊(類)設(shè)計(jì)

程序設(shè)計(jì)主要包括3個模塊,分別用于獲取網(wǎng)站源碼、獲取相關(guān)數(shù)據(jù)以及存儲有效數(shù)據(jù),模塊設(shè)計(jì)如圖1所示。

2.3 爬行算法設(shè)計(jì)

爬行算法設(shè)計(jì)依賴于網(wǎng)站結(jié)構(gòu)設(shè)計(jì),智學(xué)分享網(wǎng)站的邏輯結(jié)構(gòu)為樹形結(jié)構(gòu),鏈接深度為4,按課程和模塊進(jìn)行逐級劃分,將學(xué)生分享的鏈接分類存放,如圖2所示。

該程序設(shè)計(jì)的目標(biāo)是訪問學(xué)生分享的數(shù)據(jù)鏈接,以判斷其是否真實(shí)存在。因此,需要盡可能深入地搜索,由此采取深度優(yōu)先策略[3],即:從初始頁開始,首先應(yīng)訪問第一門課程的第一個模塊,并逐一對該模塊中學(xué)生分享的鏈接進(jìn)行判斷,當(dāng)模塊一中的鏈接訪問完畢后再訪問模塊二中的鏈接數(shù)據(jù),如此下去直至將課程一中所有模塊全部訪問完畢,之后再按上述步驟對課程二至課程N(yùn)進(jìn)行訪問,直至該網(wǎng)站內(nèi)容全部訪問完成。

2.4 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)

Java.util包中的Vector類提供類似于數(shù)組的能力,但相對于無法修改元素個數(shù)的數(shù)組而言,它在使用時無須聲明上限,隨著元素的增加,Vector的長度會自動增加;而且在增加、刪除元素方面也比數(shù)組操作更高效。由于網(wǎng)站中的學(xué)生個數(shù)和分享的數(shù)據(jù)鏈接個數(shù)不固定,若無法動態(tài)修改元素個數(shù),會造成很多麻煩,因此采用Vector類存放數(shù)據(jù)。

為了保證數(shù)據(jù)的完整性,將結(jié)構(gòu)體中的數(shù)據(jù)以必填與非必填進(jìn)行劃分,其中學(xué)號信息、課程、模塊、鏈接是否存在為必填內(nèi)容,用于標(biāo)識分享的學(xué)生、分享的位置以及對鏈接質(zhì)量的判斷;若分享的內(nèi)容符合要求,則將分享的鏈接、評論內(nèi)容以及鏈接標(biāo)題進(jìn)行存儲。因此,在結(jié)構(gòu)體設(shè)計(jì)時需針對兩種情況分別考慮,如圖3、圖4所示。

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

3.1 網(wǎng)絡(luò)訪問方式

URL是統(tǒng)一資源定位符(Uniform Resource Locator)的簡稱,它表示互聯(lián)網(wǎng)上某一資源的地址,瀏覽器通過給定的URL可以找到相應(yīng)的文件或其它資源。在Java中提供了許多Internet連接的類,URL類就是其中之一。在使用URL類之前,必須創(chuàng)建一個URL對象,創(chuàng)建方法是使用其構(gòu)造函數(shù),通過向其指定一個URL地址,就能實(shí)例化該類。如URL url=new URL(http://www.baidu.com);當(dāng)成功創(chuàng)建一個URL對象后,調(diào)用openConnection函數(shù)建立與URL的通信,此時就獲得了一個URLConnection對象引用;最后,調(diào)用URLConnection類getInputStream()函數(shù)打開URL鏈接,獲取輸入流,再用Java.io包中的InputStreamReader類讀取該輸入流,下載網(wǎng)頁,并存儲到String類型變量中,即完成源碼獲取工作[4]。

3.2 目標(biāo)數(shù)據(jù)獲取

在文本中獲取有效信息通常采用正則表達(dá)式進(jìn)行匹配,Java中可以采用其自帶的Matcher類和Pattern類實(shí)現(xiàn),其中Pattern 對象表示一個已編譯的正則表達(dá)式,Matcher 是一個依靠輸入的字符串解析該模式和完成匹配操作的對象[5]。

為了在網(wǎng)頁源碼中獲取到關(guān)鍵信息,需分別對學(xué)生的學(xué)號信息、評價內(nèi)容、分享的URL以及網(wǎng)站Title信息的獲取進(jìn)行表達(dá)式設(shè)計(jì)。以URL的獲取方法為例,為了能夠精確獲取到學(xué)生分享的鏈接數(shù)據(jù),首先需要對URL信息進(jìn)行定位,通過查看網(wǎng)站的源代碼發(fā)現(xiàn),只要抓住了target="_blank" href="XXXXX"\>這個字符串,就能抓出學(xué)生分享的鏈接。因此最終確定正則表達(dá)式為:target=\'_blank\' href=\"(.+?)[\\>|\\s|\"],匹配到的第一分組即為學(xué)生分享的URL[6]。

3.3 反爬蟲策略解決方案

反爬蟲策略種類較多,不同的反爬蟲方式需使用不同的解決方案,要保證100%不被網(wǎng)站禁止訪問十分困難。目前,網(wǎng)站使用較多的是通過headers進(jìn)行反爬蟲,因此為了提高爬行效率,本程序主要針對該策略加以解決。很多論壇網(wǎng)站(如:CSDN、知乎等)都會對Headers的User-Agent進(jìn)行檢測,還有一部分網(wǎng)站會對Referer進(jìn)行檢測[7]。如果遇到這類反爬蟲機(jī)制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復(fù)制到爬蟲的Headers中,或者將Referer值修改為目標(biāo)網(wǎng)站域名。在代碼編寫過程中,可以使用URLConnection中的setRequestProperty方法實(shí)現(xiàn)[8],如:connection.setRequestProperty("User-Agent","Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11") 。

由于手機(jī)瀏覽器性能的局限,部分網(wǎng)站沒有對手機(jī)頁面設(shè)置訪問驗(yàn)證,因此若上述方式仍無法訪問,可嘗試采用修改Headers信息,通過模擬手機(jī)訪問方式進(jìn)行訪問,以獲取到有效信息。

訪問流程如圖5所示。

3.4 亂碼解決方案

抓取的數(shù)據(jù)出現(xiàn)亂碼的原因在于源網(wǎng)頁編碼和爬取下來的編碼轉(zhuǎn)換不一致。例如源網(wǎng)頁為gbk編碼的字節(jié)流,抓取后程序直接使用utf-8進(jìn)行編碼并輸出到存儲文件中,這必然會引起亂碼[9]。一般解析字節(jié)流的編碼主要有兩種方式:一是通過網(wǎng)頁源代碼中編碼信息的獲取判斷網(wǎng)頁的編碼格式;二是通過智能探測,如cpdetector,對文本中的編碼格式進(jìn)行探測,但由于該方式是基于統(tǒng)計(jì)實(shí)現(xiàn)的,因而必然會有一定的錯誤率。

為了更準(zhǔn)確地獲取到編碼格式,主要對第一種方式進(jìn)行研究。一般情況下,編碼在網(wǎng)頁中以下3個位置:Http Header的content、網(wǎng)頁的Meta Charset、網(wǎng)頁頭中Document定義中[10]。在獲取源網(wǎng)頁編碼時,依次判斷這3部分?jǐn)?shù)據(jù)即可,從前往后,優(yōu)先級亦是如此。

以網(wǎng)頁中Meta Charset為例,首先通過URLConnection類中的getContentType()方法獲取發(fā)送的數(shù)據(jù)格式,所需編碼信息即包含在其中,之后再通過正則表達(dá)式對已獲取字符串中的編碼信息進(jìn)行匹配,將匹配結(jié)果賦值給一個新定義的String類型變量,完成網(wǎng)頁編碼獲取。之后通過動態(tài)改變輸入流的編碼方式,從而保證訪問的編碼方式與目標(biāo)網(wǎng)站一致,以確保不會出現(xiàn)亂碼情況。

4 實(shí)驗(yàn)情況

4.1 實(shí)驗(yàn)環(huán)境

該工具的運(yùn)行環(huán)境為Win10,采用Java作為編程語言,Eclipse作為編寫工具。

4.2 運(yùn)行結(jié)果

以《軟件工程》課程為例,給出程序部分運(yùn)行結(jié)果如圖6所示。

4.3 結(jié)果分析

運(yùn)行結(jié)果以列表形式呈現(xiàn),結(jié)構(gòu)較為清晰,利于后續(xù)學(xué)生評價及資源分類,具有一定的實(shí)用性。本次運(yùn)行時間為181s,共訪問分享鏈接143個,其中禁止訪問11個,占7.7%,由此推算可減少約90%的手工操作。

運(yùn)行速度主要與網(wǎng)絡(luò)訪問速度與代碼執(zhí)行速度有關(guān),但代碼執(zhí)行速度遠(yuǎn)快于網(wǎng)絡(luò)訪問速度,因此可認(rèn)為工具運(yùn)行速度與網(wǎng)絡(luò)速度近似成正比關(guān)系。

5 結(jié)語

本文針對智學(xué)分享課程網(wǎng)站分享鏈接地址有效性檢測任務(wù),采用深度優(yōu)先算法和Java語言設(shè)計(jì)實(shí)現(xiàn)了一個判斷分享鏈接資源是否可用的爬蟲工具。該工具目前已在智學(xué)分享平臺(http://ishare.serc.bistu.edu.cn)的“軟件工程”、“UML及其應(yīng)用”等課程分享鏈接資源的有效性分析中得到初步應(yīng)用,取得了良好效果。

同時,該工具目前仍存在一些不足,比如對部分網(wǎng)站設(shè)置的反爬蟲策略造成的禁止訪問以及使用不符合規(guī)范的編碼方式導(dǎo)致的中文亂碼問題等,都有待進(jìn)一步研究解決。此外,受限訪問資源的智能抓取功能擴(kuò)充和性能優(yōu)化等實(shí)際需求也有待后續(xù)不斷探索改進(jìn)。

參考文獻(xiàn):

[1] 陳琳,任芳.基于python的新浪微博數(shù)據(jù)爬蟲程序設(shè)計(jì)[J].信息系統(tǒng)工程,2016(9):97-99.

[2] 高紅梅,陳金懸,潘佳平.藏文網(wǎng)頁爬蟲設(shè)計(jì)與實(shí)現(xiàn)[J].信息與電腦,2012(9):36-37.

[3] 孫立偉,何國輝,吳禮發(fā).網(wǎng)絡(luò)爬蟲技術(shù)的研究[J].計(jì)算機(jī)工程應(yīng)用技術(shù),2010(5):4112-4115.

[4] 百度文庫.網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文[EB/OL]. https://wenku.baidu.com/view/a29d5aa4284ac850ad02425a.html.

[5] 武興睿.Java中的正則表達(dá)式與模式匹配研究[J].科技傳播,2011(8):180-186.

[6] 胡軍偉,秦奕青,張偉.正則表達(dá)式在Web信息抽取中的應(yīng)用[J].北京信息科技大學(xué)學(xué)報,2011(6):86-89.

[7] 知乎.常見的反爬蟲和應(yīng)對方法[EB/OL]. https://zhuanlan.zhihu.com/p/20520370?columnSlug=python-hacker.

[8] 鄒科文,李達(dá),鄧婷敏,等.網(wǎng)絡(luò)爬蟲針對“反爬”網(wǎng)站的爬取策略研究[J].網(wǎng)絡(luò)通訊及安全,2016(3):61-63.

[9] 鐘小莉,謝旻旻,李永寧.文字編碼與Unicode編碼研究[J].經(jīng)營管理者,2010(20):364.

[10] 錢程.淺析JSP網(wǎng)站開發(fā)中中文亂碼問題[J].科技信息,2009(33):65.

(責(zé)任編輯:孫 娟)

猜你喜歡
網(wǎng)絡(luò)爬蟲
煉鐵廠鐵量網(wǎng)頁數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
基于社會網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁挖掘研究
主題搜索引擎中網(wǎng)絡(luò)爬蟲的實(shí)現(xiàn)研究
淺析如何應(yīng)對網(wǎng)絡(luò)爬蟲流量
中國市場(2016年23期)2016-07-05 04:35:08
網(wǎng)絡(luò)爬蟲針對“反爬”網(wǎng)站的爬取策略研究
湾仔区| 拉萨市| 鞍山市| 西安市| 六盘水市| 赫章县| 丰顺县| 柳州市| 淮阳县| 香港 | 克拉玛依市| 保德县| 襄樊市| 梁河县| 安岳县| 丁青县| 威信县| 洛扎县| 汉源县| 旬阳县| 临漳县| 麦盖提县| 罗平县| 株洲县| 抚州市| 顺义区| 内丘县| 镇安县| 大悟县| 玉田县| 商水县| 山丹县| 金坛市| 德保县| 策勒县| 江源县| 仪陇县| 易门县| 东乡族自治县| 陈巴尔虎旗| 赤壁市|