freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于多線程的網(wǎng)絡爬蟲的設計與實現(xiàn)畢業(yè)論文(文件)

2025-07-15 20:16 上一頁面

下一頁面
 

【正文】 連接,每個連接都由獨立的線程實現(xiàn)。其實,服務器端獲得的連接和客戶端連接是一樣的,只是數(shù)據(jù)交換的步驟不同。 Java網(wǎng)絡編程技術(shù)Java語言是在網(wǎng)絡環(huán)境下誕生的,所以Java語言雖然不能說是對于網(wǎng)絡編程的支持最好的語言,但是必須說是一種對于網(wǎng)絡編程提供良好支持的語言,使用Java語言進行網(wǎng)絡編程將是一件比較輕松的工作。InetAddress類。在Java語言中,對于TCP方式的網(wǎng)絡編程提供了良好的支持,在實際實現(xiàn)時。在使用TCP方式進行網(wǎng)絡編程時,需要按照前面介紹的網(wǎng)絡編程的步驟進行,下面分別介紹一下在Java語言中客戶端和服務器端的實現(xiàn)步驟。如果建立連接時,本機網(wǎng)絡不通,或服務器端程序未開啟,則會拋出異常。 //獲得輸入流上面的代碼中,分別從socket1這個連接對象獲得了輸出流和輸入流對象,在整個網(wǎng)絡編程中,后續(xù)的數(shù)據(jù)交換就變成了IO操作,也就是遵循“請求響應”模型的規(guī)定,先向輸出流中寫入數(shù)據(jù),這些數(shù)據(jù)會被系統(tǒng)發(fā)送出去,然后在從輸入流中讀取服務器端的反饋信息,這樣就完成了一次數(shù)據(jù)交換過程,當然這個數(shù)據(jù)交換過程可以多次進行。此時,正則表達式就成為了我們最好的選擇。正則表達式由一些字符和元字符(met characters)組成。 網(wǎng)頁搜索策略 在抓取網(wǎng)頁的時候,網(wǎng)頁的抓取策略可以分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種。寬度優(yōu)先搜索算法是沿著樹的寬度遍歷樹的節(jié)點, 如果發(fā)現(xiàn)目標,則算法中止。也有很多研究將寬度優(yōu)先搜索策略應用于聚焦爬蟲中. 其基本思想是認為與初始URL在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大。圖的寬度優(yōu)先遍歷需要一個隊列作為保存當前節(jié)點的子節(jié)點的數(shù)據(jù)結(jié)構(gòu)。(4) 查找頂點V 的第一個鄰接頂點col。本課題選擇使用廣度優(yōu)先策略進行網(wǎng)頁抓取。它只訪問經(jīng)過網(wǎng)頁分析算法預測為“有用”的網(wǎng)頁。通用網(wǎng)絡爬蟲從一個或若干初始網(wǎng)頁的URL開始,獲得初始網(wǎng)頁上的URL列表;在抓取網(wǎng)頁的過程中,不斷從當前頁面上抽取新的URL放入待爬行隊列,直到滿足系統(tǒng)的停止條件。定義4:如果超鏈接l指向網(wǎng)頁t,則網(wǎng)頁t稱為子網(wǎng)頁,又稱為目標網(wǎng)頁。:很適合部署定題爬蟲,或者叫聚焦爬蟲。網(wǎng)絡蜘蛛的技術(shù)難度并不是很高,但是要開發(fā)一個速度快、穩(wěn)定性高的網(wǎng)絡蜘蛛還是要下一番功夫的。比如說在我國,有些網(wǎng)站使用UTF8編碼,有些則使用GB2312。第三,網(wǎng)絡蜘蛛只下載網(wǎng)站中的文本信息(如:HTML頁面、ASP、PHP、JSP等等),并不下載圖片、軟件、視音頻文件等等。提取網(wǎng)頁的鏈接也不只是簡單地提取HTML源碼中所有“href”后面的URL,還包括框架頁面,以及腳本中的自動轉(zhuǎn)向頁面地址。網(wǎng)絡蜘蛛把網(wǎng)頁中的相關(guān)信息抽取出以后插入到數(shù)據(jù)庫的對應字段中。如圖31所示:圖31 系統(tǒng)流程圖站點列表里面存儲著用戶指定的網(wǎng)站首頁URL,程序運行后將其插入到優(yōu)先隊列,下載模塊從優(yōu)先隊列里取出URL,把對應的網(wǎng)頁下載下來,然后將網(wǎng)頁源碼交給分析模塊,分析模塊對網(wǎng)頁進行分解,分析模塊維護著一張字典或Hash表,記錄著所有已經(jīng)訪問的URL,然后分析模塊將所有未訪問過的鏈接URL提取出來插入到優(yōu)先隊列,再把提取出的網(wǎng)頁的標題、內(nèi)容、大小等信息存入數(shù)據(jù)庫。這是一個單線程的框架,采用多線程技術(shù)是我們可看成是多個這個樣的爬蟲并發(fā)的的執(zhí)行。由James Gosling和同事們共同研發(fā),并在1995年正式推出。在硬件或操作系統(tǒng)平臺上安裝一個Java平臺之后,Java應用程序就可運行。Java平臺是基于 Java 語言的平臺。雖然大多數(shù)用戶很樂于將 Eclipse 當作 Java 集成開發(fā)環(huán)境(IDE)來使用,但 Eclipse 的目標卻不僅限于此??偟膩碚f爬蟲程序根據(jù)輸入獲得URL任務列表,即初始URL種子,把初始種子保存在臨界區(qū)中,按照廣度搜索運算法搜索抓取網(wǎng)頁并提取URL返回到臨屆區(qū)中,通過判斷主題相關(guān)度算法判斷相關(guān)度,取出不相關(guān)網(wǎng)頁,從而使整個爬蟲程序循環(huán)運行下去。lia href=XXX/XXX/XXXXX/aem531/em/lilia href=Xxxx/html/ XXXX/a/li 通過觀察得知,一般href標簽是以href=這樣的形式出現(xiàn)的。 URL解析 截取出來的字符串,可能為相對地址或者絕對地址。這些格式的URL是無法獲取HTML代碼的,也就不可能進行URL解析。大家知道,一個網(wǎng)站中的鏈接非常多,抽象出來就是一個巨大的蜘蛛網(wǎng),類似與圖論中的無向圖。Set是一種存放唯一性元素的關(guān)聯(lián)容器,它里面的每一個元素都稱為關(guān)鍵字,它由二叉搜索樹實現(xiàn)。當這個List中的數(shù)目過多時,則將List中的內(nèi)容加入到數(shù)據(jù)庫,并清空該List,以便加入新的URLs;第二段為數(shù)據(jù)庫,當?shù)谝欢螖?shù)據(jù)過多時,將第一段內(nèi)的數(shù)據(jù)存入數(shù)據(jù)庫;第三段也為一個List,從這里面分配任務URL,當該List內(nèi)URL不足時,將數(shù)據(jù)庫里的數(shù)據(jù)再轉(zhuǎn)存入。雖然在 JDK 的 包中已經(jīng)提供了訪問 HTTP 協(xié)議的基本功能,但是對于大部分應用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。 網(wǎng)頁相關(guān)度 蜘蛛將網(wǎng)頁下載到本地后,需要使用基于內(nèi)容的主題判別方法計算該網(wǎng)頁的主題相關(guān)度值,主題相關(guān)度低于某一閾值的網(wǎng)頁被丟棄。當然這種一般原則并不是固定不變的,在實際工作中可能會有一定的變化,但是無論如何變化,總體上仍然會遵照這種規(guī)律。:A=4B+C。雖然在 JDK 的 java net包中已經(jīng)提供了訪問 HTTP 協(xié)議的基本功能,但是對于大部分應用程序來說,JDK 庫本身提供的功能還不夠豐富和靈活。它也提供了一個有用的HTML表單分析器。在對臨界資源訪問的時候必須使用對象鎖的機制,避免同時有多個線程對URL集合進行操作。當然我們可以通過將訪問類成員變量的代碼放到專門的方法中,將其聲明為 synchronized ,并在主方法中調(diào)用來解決這一問題,但是 Java 為我們提供了更好的解決辦法,那就是 synchronized 塊通過 synchronized關(guān)鍵字來聲明synchronized 塊。 實現(xiàn)工具 操作系統(tǒng)是Windows8 ;;。 // 待訪問的 url 集合,按優(yōu)先級從高到底排序 private static QueueString unVisitedUrl = new PriorityQueueString()。 } // 添加到訪問過的URL隊列中 public synchronized static void addVisitedUrl(String url) { (url)。amp。amp。 } 網(wǎng)頁下載DownloadFile類主要封裝了下載網(wǎng)頁的方法,其中核心代碼 /* HttpClinet 對象并設置參數(shù) */ HttpClient Client = new DefaultHttpClient()。 // 設置請求重試處理 // ().setIntParameter(RedirectHandler, true)。 filePath = null。 (filePath)。 // 方法提取網(wǎng)頁中的URL getUrls((), links)。 url = new String(buffer); Spider類 該類封裝了網(wǎng)絡爬蟲的主要工作流程。 (100)。 // 下載網(wǎng)頁 (visitUrl)。 // 新的未訪問的 URL 入隊 if (links != null) for (String link : links) (link)。thin:localhot:1521:ora9i ora是數(shù)據(jù)庫的sidConnection conn = (url,username,pwd)。 //把查詢的結(jié)果放在一個記錄集中()。只有當兩個隊列中的元素個數(shù)達到一定數(shù)量時才進行數(shù)據(jù)庫操作。 if (unVis 500)// 待訪問的URL達到500 ()。設置工作線程數(shù)量為5(默認數(shù)為10),最大訪問量無限制,然后用爬蟲程序去運行。圖63是運行一段時間過后的情況,我們可以看到,所有工作線程都已經(jīng)開始工作圖63 程序運行截圖(二)通過截圖我們可以觀察到線程的運行順序是不可預測的,這也增大了我們編程的難度。圖62 程序運行截(一)圖62是點擊開始按鈕程序開始運行,我們可以觀察到程序剛開始運行時,待訪問的隊列只有一個網(wǎng)址,所以除一號線程意外都暫停的一段時間。 if (unVis 100) {//待訪問URL數(shù)量小于100 ()。主要代碼如下:int unVis = ()。其中的參數(shù)為要獲取字段的字段名5。sql = SELECT * FROM student。對于數(shù)據(jù)庫操作有一套相對固定的流程,一般如下:()。 // 提取出下載網(wǎng)頁中的 URL // (())。 if (visitUrl == null) { continue。 //當問訪問的URL隊列為空,或訪問的網(wǎng)站數(shù)量達到指定的數(shù)量退出線程。 StringBuffer buffer = new StringBuffer()。 提取URL該類主要封裝了分析網(wǎng)頁并提取URL的方法。// 讀取為字節(jié)數(shù)組 // 根據(jù)網(wǎng)頁 url 生成保存時的文件名 fileType = (ContentType).getValue() .toLowerCase()。 int statusCode = ().getStatusCode()。 /* GetMethod 對象并設置參數(shù) */ HttpGet Get = new HttpGet(url)。 } // 獲得已經(jīng)訪問的URL數(shù)目 public synchronized static int getVisitedUrlNum() { return ()。amp。 } // 未訪問的URL出隊列 public synchronized static Object unVisitedUrlDeQueue() { return ()。unVisitedUrl 用于存放未訪問過的URL集合。 URL隊列這個類(LinkQueue)主要封裝了URL的集合和對它的一些相關(guān)操作。由于可以針對任意代碼塊,且可任意指定上鎖的對象,故靈活性較高。它包括兩種用法:synchronized 方法和 synchronized 塊。 多線程設計 為了提高系統(tǒng)的運行效率,本系統(tǒng)采用的多線程技術(shù)。HttpClient 的范圍通常為:基于HttpCore的客戶端HTTP運輸實現(xiàn)庫;基于經(jīng)典(阻塞)I/O ;內(nèi)容無關(guān)Client 特性主要是,基于標準,;以可擴展的面向?qū)ο蟮慕Y(jié)構(gòu)實現(xiàn)了Http全部的方法 (GET, POST, PUT, DELETE, HEAD, OPTIONS, and TRACE);支持HTTPS協(xié)議;通過Http代理建立透明的連接;利用CONNECT 方法通過Http代理建立隧道的連接;Basic, Digest, NTLMv1, NTLMv2, NTLM2 Session, SNPNEGO/Kerberos 認證方案;插件式的自定義認證方案;便攜可靠的套接字工廠使它更容易的使用第三方解決方案;,。 HttpClient 類庫與Jericho HTML Parser類庫 為了簡化系統(tǒng)實現(xiàn)難度和提高系統(tǒng)穩(wěn)定性,本系統(tǒng)主要使用了這兩個第三方類庫,前文已經(jīng)多次提到這兩個類庫。在網(wǎng)頁HTML代碼中,網(wǎng)頁標題位于標簽之間。HttpClient 已經(jīng)應用在很多的項目中,比如 Apache Jakarta 上很著名的另外兩個開源項目 Cactus 和 HTMLUnit 都使用了 HttpClient。 網(wǎng)頁抓取 為了使系統(tǒng)更快速,更穩(wěn)定,對于網(wǎng)頁的抓取使用第三方類庫HttpClient實現(xiàn)。所以將等待URLs存入數(shù)據(jù)庫中,并設計2個緩存區(qū),用于向隊列中加入和取得URLs。這樣待抓取隊列里的URL越來越多,并且好多都是重復的。然后再進行URL消重處理,最后加入到URL等待隊列。相對地址需要先轉(zhuǎn)化為絕對地址,再進行過濾。比如href=”url”這樣情況,我們就可以通過截取雙引號之間的內(nèi)容來獲取URL;如果是href=’url’這種情況,我們就需要截取單引號之間的內(nèi)容來獲取URL;或者有些是href=url,我們需要以等號為開始標記,而這種情況通常結(jié)尾是空格或者符號。HTML代碼中,頁面之間的跳轉(zhuǎn),關(guān)聯(lián)是通過href標簽來實現(xiàn)的。由于 Eclipse 中的每樣東西都是插件,對于給 Eclipse 提供插件,以及給用戶提供一致和統(tǒng)的集成開發(fā)環(huán)境而言,所有工具開發(fā)人員都具有同等的發(fā)揮場所。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構(gòu)建開發(fā)環(huán)境。這樣Java程序可以只編譯一次,就可以在各種系統(tǒng)中運行。Java平臺由Java虛擬機(Java Virtual Machine,簡稱JVM)和Java 應用編程接口(Application Programming Interface,簡稱API)構(gòu)成。圖32 表示的表用于保存未訪問的URL的信息(URL表)。我們可以把網(wǎng)絡看成一個圖M(V,E),網(wǎng)絡中的網(wǎng)頁構(gòu)成節(jié)點集V,他們之間的鏈接構(gòu)成邊集E,SPIDER正是從某一節(jié)點開始,沿著邊,遍歷圖M,每訪問到圖中一個節(jié)點Vi,就進行一定的處理。由URL任務列表開始,根據(jù)預先設定的關(guān)鍵字取網(wǎng)頁,同時判斷URL是否重復,按照一定算法和排序方式搜索頁面,然后對頁面按照一定算法進行分析,并提取相關(guān)URL,最后將所得URL返回任務列表。網(wǎng)絡遍歷的算法可以是深度優(yōu)先搜索、寬度優(yōu)先搜索、啟發(fā)式搜索等算法。網(wǎng)頁的內(nèi)容并不是簡單地指網(wǎng)頁的HTML代碼,因為大部分的HTML標簽以及JavaScript代碼對我們的后期要進行的查詢工作等都是冗余的,所以應該將它們剔除。其次,網(wǎng)絡
點擊復制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1