999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

智學分享資源有效性檢測工具設計與實現

2018-01-09 13:19:53尹子軒王影劉建賓
軟件導刊 2017年12期

尹子軒+王影+劉建賓

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

關鍵詞:Java;深度優先遍歷;網絡爬蟲;反爬蟲策略

DOIDOI:10.11907/rjdk.172015

中圖分類號:TP319

文獻標識碼: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 引言

隨著互聯網的發展,大量資源數據通過Web共享發布,其已成為世界上規模最大的數據源。目前,網絡資源種類繁多,且較為分散,用戶對資源的針對性獲取十分不便。針對該現象,智學分享課程網站通過將大學生的學習資源進行分類整合和共享發布,讓大學生獲取學習資源更加便利,并激發學習熱情,提高學習效率。但同時,為了提高學生的資源分享質量,教師不得不對每個學生分享的鏈接進行手工檢測,工作量十分龐大,導致效率低下。

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

1 相關概念

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

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

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

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

2 程序設計

2.1 功能分析

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

2.2 模塊(類)設計

程序設計主要包括3個模塊,分別用于獲取網站源碼、獲取相關數據以及存儲有效數據,模塊設計如圖1所示。

2.3 爬行算法設計

爬行算法設計依賴于網站結構設計,智學分享網站的邏輯結構為樹形結構,鏈接深度為4,按課程和模塊進行逐級劃分,將學生分享的鏈接分類存放,如圖2所示。

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

2.4 數據結構設計

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

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

3 實現技術

3.1 網絡訪問方式

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

3.2 目標數據獲取

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

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

3.3 反爬蟲策略解決方案

反爬蟲策略種類較多,不同的反爬蟲方式需使用不同的解決方案,要保證100%不被網站禁止訪問十分困難。目前,網站使用較多的是通過headers進行反爬蟲,因此為了提高爬行效率,本程序主要針對該策略加以解決。很多論壇網站(如:CSDN、知乎等)都會對Headers的User-Agent進行檢測,還有一部分網站會對Referer進行檢測[7]。如果遇到這類反爬蟲機制,可以直接在爬蟲中添加Headers,將瀏覽器的User-Agent復制到爬蟲的Headers中,或者將Referer值修改為目標網站域名。在代碼編寫過程中,可以使用URLConnection中的setRequestProperty方法實現[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") 。

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

訪問流程如圖5所示。

3.4 亂碼解決方案

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

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

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

4 實驗情況

4.1 實驗環境

該工具的運行環境為Win10,采用Java作為編程語言,Eclipse作為編寫工具。

4.2 運行結果

以《軟件工程》課程為例,給出程序部分運行結果如圖6所示。

4.3 結果分析

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

運行速度主要與網絡訪問速度與代碼執行速度有關,但代碼執行速度遠快于網絡訪問速度,因此可認為工具運行速度與網絡速度近似成正比關系。

5 結語

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

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

參考文獻:

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

[2] 高紅梅,陳金懸,潘佳平.藏文網頁爬蟲設計與實現[J].信息與電腦,2012(9):36-37.

[3] 孫立偉,何國輝,吳禮發.網絡爬蟲技術的研究[J].計算機工程應用技術,2010(5):4112-4115.

[4] 百度文庫.網絡爬蟲的設計與實現畢業論文[EB/OL]. https://wenku.baidu.com/view/a29d5aa4284ac850ad02425a.html.

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

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

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

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

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

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

(責任編輯:孫 娟)

主站蜘蛛池模板: 99在线观看视频免费| 久久精品国产免费观看频道| 欧美伊人色综合久久天天| 国产va在线| 亚洲国产欧美国产综合久久 | av无码久久精品| 国产成人高清精品免费5388| 大陆国产精品视频| 国产成人在线小视频| 国产96在线 | 亚洲国产黄色| 亚洲日韩第九十九页| 黄色网址免费在线| 亚洲 欧美 日韩综合一区| 日本欧美精品| 亚洲日韩久久综合中文字幕| 国产极品美女在线| 亚洲人成色在线观看| 国产精品无码制服丝袜| 国产中文一区二区苍井空| 亚洲中文无码h在线观看 | 亚洲欧洲综合| 婷婷色婷婷| 亚洲黄网在线| 高清乱码精品福利在线视频| 免费jizz在线播放| 中国国产高清免费AV片| 无码AV高清毛片中国一级毛片| 久久精品女人天堂aaa| 欧美日韩免费| 成人年鲁鲁在线观看视频| 国产成人免费手机在线观看视频| 欧美另类视频一区二区三区| 国产黄色片在线看| 欧美日韩国产在线观看一区二区三区 | 久久毛片网| 午夜不卡视频| 又黄又爽视频好爽视频| 最新精品久久精品| 日韩精品一区二区三区免费在线观看| 日韩国产综合精选| 71pao成人国产永久免费视频| 免费av一区二区三区在线| 国产在线自乱拍播放| 99热6这里只有精品| 中文字幕一区二区人妻电影| 亚洲中文在线看视频一区| 亚洲AV色香蕉一区二区| 动漫精品啪啪一区二区三区| 国产嫩草在线观看| 国产亚洲精| 丰满人妻被猛烈进入无码| 99久久99视频| 精品久久久无码专区中文字幕| 国产剧情一区二区| 欧美三级日韩三级| 国产精品视频a| 激情综合图区| 九色在线视频导航91| AV网站中文| 欧美成一级| 国产手机在线ΑⅤ片无码观看| 国产99视频精品免费视频7| 在线播放91| 亚洲福利一区二区三区| 国产一级毛片yw| 国产一区亚洲一区| 国产在线自揄拍揄视频网站| 色综合国产| 国产欧美日韩91| 国产精品19p| 亚洲三级电影在线播放| 啪啪永久免费av| 国产一级在线观看www色 | 久久精品国产电影| 欧美一区二区人人喊爽| 国产成人亚洲精品蜜芽影院| 91伊人国产| 日韩一二三区视频精品| 日韩一级毛一欧美一国产 | 亚洲婷婷六月| 婷婷在线网站|