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

        ?

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

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

        尹子軒+王影+劉建賓

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

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

        DOIDOI:10.11907/rjdk.172015

        中圖分類號(hào):TP319

        文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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ù)通過(guò)Web共享發(fā)布,其已成為世界上規(guī)模最大的數(shù)據(jù)源。目前,網(wǎng)絡(luò)資源種類繁多,且較為分散,用戶對(duì)資源的針對(duì)性獲取十分不便。針對(duì)該現(xiàn)象,智學(xué)分享課程網(wǎng)站通過(guò)將大學(xué)生的學(xué)習(xí)資源進(jìn)行分類整合和共享發(fā)布,讓大學(xué)生獲取學(xué)習(xí)資源更加便利,并激發(fā)學(xué)習(xí)熱情,提高學(xué)習(xí)效率。但同時(shí),為了提高學(xué)生的資源分享質(zhì)量,教師不得不對(duì)每個(gè)學(xué)生分享的鏈接進(jìn)行手工檢測(cè),工作量十分龐大,導(dǎo)致效率低下。

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

        1 相關(guān)概念

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

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

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

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

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

        2.1 功能分析

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        3.3 反爬蟲(chóng)策略解決方案

        反爬蟲(chóng)策略種類較多,不同的反爬蟲(chóng)方式需使用不同的解決方案,要保證100%不被網(wǎng)站禁止訪問(wèn)十分困難。目前,網(wǎng)站使用較多的是通過(guò)headers進(jìn)行反爬蟲(chóng),因此為了提高爬行效率,本程序主要針對(duì)該策略加以解決。很多論壇網(wǎng)站(如:CSDN、知乎等)都會(huì)對(duì)Headers的User-Agent進(jìn)行檢測(cè),還有一部分網(wǎng)站會(huì)對(duì)Referer進(jìn)行檢測(cè)[7]。如果遇到這類反爬蟲(chóng)機(jī)制,可以直接在爬蟲(chóng)中添加Headers,將瀏覽器的User-Agent復(fù)制到爬蟲(chóng)的Headers中,或者將Referer值修改為目標(biāo)網(wǎng)站域名。在代碼編寫(xiě)過(guò)程中,可以使用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)站沒(méi)有對(duì)手機(jī)頁(yè)面設(shè)置訪問(wèn)驗(yàn)證,因此若上述方式仍無(wú)法訪問(wèn),可嘗試采用修改Headers信息,通過(guò)模擬手機(jī)訪問(wèn)方式進(jìn)行訪問(wèn),以獲取到有效信息。

        訪問(wèn)流程如圖5所示。

        3.4 亂碼解決方案

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

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

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

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

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

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

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

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

        4.3 結(jié)果分析

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

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

        5 結(jié)語(yǔ)

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

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

        參考文獻(xiàn):

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

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

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

        [4] 百度文庫(kù).網(wǎng)絡(luò)爬蟲(chóng)的設(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é)報(bào),2011(6):86-89.

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

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

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

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

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

        猜你喜歡
        網(wǎng)絡(luò)爬蟲(chóng)
        煉鐵廠鐵量網(wǎng)頁(yè)數(shù)據(jù)獲取系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
        基于社會(huì)網(wǎng)絡(luò)分析的權(quán)威網(wǎng)頁(yè)挖掘研究
        主題搜索引擎中網(wǎng)絡(luò)爬蟲(chóng)的實(shí)現(xiàn)研究
        淺析如何應(yīng)對(duì)網(wǎng)絡(luò)爬蟲(chóng)流量
        網(wǎng)絡(luò)爬蟲(chóng)針對(duì)“反爬”網(wǎng)站的爬取策略研究
        av天堂午夜精品一区| 亚洲免费毛片网| av在线免费播放网站| 蜜桃在线高清视频免费观看网址| 久久九九精品国产av| 国产精品兄妹在线观看麻豆| 日本欧美视频在线观看| 久久久久久久国产精品电影| 日本最新在线一区二区| 国产一区二区三区日韩在线观看| 少妇被又大又粗又爽毛片久久黑人| 国产午夜福利100集发布| 99ri国产在线观看| 免费国精产品自偷自偷免费看| 亚洲一区二区三区在线观看播放| 国产精品99久久精品女同| 成人自拍一二在线观看| 国产av无码国产av毛片| 国产亚洲av综合人人澡精品 | 在线观看午夜视频国产| 少妇被粗大的猛进出69影院| 国产乱色精品成人免费视频| 亚洲精品国产老熟女久久| 蜜桃av一区二区三区久久| 白白在线视频免费观看嘛| 亚洲av永久无码精品三区在线 | 97色偷偷色噜噜狠狠爱网站| 韩国精品一区二区三区无码视频| 亚洲第一区无码专区| 亚洲精品成人一区二区三区| 国产精品午夜福利视频234区| 手机看片福利一区二区三区| 精品九九视频| 国产主播一区二区三区在线观看| av大全亚洲一区二区三区 | 欧美人做人爱a全程免费| 亚洲日韩精品国产一区二区三区| 国产美女三级视频网站| 日本免费一区二区在线看片| 特黄熟妇丰满人妻无码| 天堂√最新版中文在线天堂|