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

正文內(nèi)容

基于廣度優(yōu)先算法的多線程爬蟲程序的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(專業(yè)版)

2025-08-08 20:21上一頁面

下一頁面
  

【正文】 但是在功能細(xì)節(jié)上還有很多不足,比如系統(tǒng)不夠優(yōu)化,功能不夠強(qiáng)大,沒有解析網(wǎng)頁信息。所以這種 URL 因該過濾掉。下面是 JAVA 程序連接MYSQL 數(shù)據(jù)庫的代碼。對(duì)于 MYSQL 數(shù)據(jù)庫,可以使用 LIMIT 這個(gè)關(guān)鍵字。下面是具體實(shí)現(xiàn)的 JAVA 代碼。這樣當(dāng)進(jìn)行 URL 去重處理時(shí),會(huì)認(rèn)為它們不是一個(gè) URL。它的具體構(gòu)造如下:public class LRULinkedHashMapK, V extends LinkedHashMapK, V {private static final long serialVersionUID = 1L。所以我們可以通過判斷 URLs 中是否包含站點(diǎn) host 就可以了。if (isSiteInsideUrl(url, urlQueueManager)) {if (!(url)) {(url)。之間的這段字符串即為 URL。connection = (HttpURLConnection) ()。圖 第五章 系統(tǒng)實(shí)現(xiàn) 實(shí)現(xiàn)工具操作系統(tǒng)是 winXP。比如 href=”url”這樣情況,我們就可以通過截取雙引號(hào)之間的內(nèi)容來獲取 URL;如果是 href=’url’這種情況,我們就需要截取單引號(hào)之間的內(nèi)容來獲取 URL;或者有些是 href=url,我們需要以等號(hào)為開始標(biāo)記,而這種情況通常結(jié)尾是空格或者符號(hào)。如圖 ,假如 a 代表初始 URL,bcd 為以 a 獲取的 3 個(gè) URLs,efg 為以b 獲取的 URLs,以此類推??紤]使用哪一種方式的前提是,構(gòu)造的 SPIDER 程序必須能夠訪問非常大的 Web 站點(diǎn)。 SPIDER 體系結(jié)構(gòu)此爬蟲程序主要分為三個(gè)部分:任務(wù)執(zhí)行端,任務(wù)調(diào)度端,數(shù)據(jù)服務(wù)端。如:URL url=new URL( );如果傳遞無效的 URL 給 URL 對(duì)象,該對(duì)象會(huì)拋出 MalformedURLException異常。另外,MD5 算法能夠?qū)⑷魏巫址畨嚎s為 128 位整數(shù),并映射為物理地址,而且 MD5 進(jìn)行 Hash 映射碰撞的幾率非常小,這點(diǎn)非常好。而想要控制這種重復(fù)性下載問題,就要考慮下載所依據(jù)的超鏈接,只要能夠控制待下載的 URL 不重復(fù),基本可以解決同一個(gè)網(wǎng)頁重復(fù)下載的問題。JAVA 中從 Object 對(duì)象繼承來的每個(gè)對(duì)象都有一個(gè)單獨(dú)的鎖。在使用 Runnable 接口時(shí),不能直接創(chuàng)建所需類的對(duì)象并運(yùn)行它,而是必須從 Thread 類的一個(gè)實(shí)例內(nèi)部運(yùn)行它。 創(chuàng)建線程 創(chuàng)建線程方式一在 JAVA 中創(chuàng)建線程的一種方式是通過 Thread 來實(shí)現(xiàn)的。CPU 不斷的在這些程序之間“跳躍”執(zhí)行。 采用爬行深度、頁面導(dǎo)入鏈接量分析等方法, 限制從程序下載不相關(guān)的 Web 頁的選擇性爬行程序等等。 【關(guān)鍵字】網(wǎng)絡(luò)爬蟲;JAVA;廣度優(yōu)先;多線程。 JAVA。高效,優(yōu)秀的爬蟲程序可以使人們?cè)诨ヂ?lián)網(wǎng)上尋找到更及時(shí),更準(zhǔn)確的信息。多線程(MultiThread)擴(kuò)展了多進(jìn)程(multiProcess)操作的概念,將任務(wù)的劃分下降到了程序級(jí)別,使得各個(gè)程序似乎可以在同一個(gè)時(shí)間內(nèi)執(zhí)行多個(gè)任務(wù)。Thread(Runnable target,String name)。然后,調(diào)用線程的 start()方法,來向線程調(diào)度程序(通常是 JVM 或操作系統(tǒng))注冊(cè)一個(gè)線程,這個(gè)時(shí)候,這個(gè)線程一切就緒,就等待 CPU 時(shí)間了。JAVA 使用 synchronized 關(guān)鍵字來定義程序中要求線程同步的部分。 基于磁盤的順序存儲(chǔ)這里,就是指把每個(gè)已經(jīng)下載過的 URL 進(jìn)行順序存儲(chǔ)。去重,可以考慮對(duì)某個(gè)鍵,存在一個(gè)值,這個(gè)值就是那個(gè)鍵的狀態(tài)?!∨佬胁呗詼\析 寬度或深度優(yōu)先搜索策略搜索引擎所用的第一代網(wǎng)絡(luò)爬蟲主要是基于傳統(tǒng)的圖算法, 如寬度優(yōu)先或深度優(yōu)先算法來索引整個(gè) Web, 一個(gè)核心的 U RL 集被用來作為一個(gè)種子集合, 這種算法遞歸的跟蹤超鏈接到其它頁面, 而通常不管頁面的內(nèi)容, 因?yàn)樽罱K的目標(biāo)是這種跟蹤能覆蓋整個(gè) Web. 這種策略通常用在通用搜索引擎中,因?yàn)橥ㄓ盟阉饕娅@得的網(wǎng)頁越多越好, 沒有特定的要求. 寬度優(yōu)先搜索算法寬度優(yōu)先搜索算法(又稱廣度優(yōu)先搜索) 是最簡便的圖的搜索算法之一 , 這一算法也是很多重要的圖的算法的原型. Dijkstra 單源最短路徑算法和 Prim 最的寬度遍歷樹的節(jié)點(diǎn), 如果發(fā)現(xiàn)目標(biāo) , 則算法中止 . 該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡單, 屬于盲目搜索 . 在目前為覆蓋盡可能多的網(wǎng)頁, 一般使用寬度優(yōu)先搜索方法. 也有很多研究將寬度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中. 其基本思想是認(rèn)為與初始 U RL 在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大. 另外一種方法是將寬度優(yōu)先搜索與網(wǎng)頁過濾技術(shù)結(jié)合使用, 先用廣度優(yōu)先策略抓取網(wǎng)頁, 再將其中無關(guān)的網(wǎng)頁過濾掉. 這些方法的缺點(diǎn)在于, 隨著抓取網(wǎng)頁的增多 , 大量的無關(guān)網(wǎng)頁將被下載并過濾, 算法的效率將變低. 深度優(yōu)先搜索深度優(yōu)先搜索所遵循的搜索策略是盡可能“深”地搜索圖. 在深度優(yōu)先搜索中, 對(duì)于最新發(fā)現(xiàn)的頂點(diǎn), 如果它還有以此為起點(diǎn)而未探測到的邊 , 就沿此邊繼續(xù)漢下去. 當(dāng)結(jié)點(diǎn) v 的所有邊都己被探尋過, 搜索將回溯到發(fā)現(xiàn)結(jié)點(diǎn) v 有那條邊的始結(jié)點(diǎn). 這一過程一直進(jìn)行到已發(fā)現(xiàn)從源結(jié)點(diǎn)可達(dá)的所有結(jié)點(diǎn)為止. 如果還存在未被發(fā)現(xiàn)的結(jié)點(diǎn), 則選擇其中一個(gè)作為源結(jié)點(diǎn)并重復(fù)以上過程, 整個(gè)進(jìn)程反復(fù)進(jìn)行直到所有結(jié)點(diǎn)都被發(fā)現(xiàn)為止. 深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲的陷入( trapped) 問題 , 所以它既不是完備的, 也不是最優(yōu)的. 聚焦搜索策略基于第一代網(wǎng)絡(luò)爬蟲的搜索引擎抓取的網(wǎng)頁一般少于 1 000 000 個(gè)網(wǎng)頁, 極少重新搜集網(wǎng)頁并去刷新索引. 而且其檢索速度非常慢, 一般都要等待 10 s 甚至更長的時(shí)間. 隨著網(wǎng)頁頁信息的指數(shù)級(jí)增長及動(dòng)態(tài)變化, 這些通用搜索引擎的局限性越來越大, 隨著科學(xué)技術(shù)的發(fā)展, 定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲便應(yīng), 根據(jù)“最好優(yōu)先原則”進(jìn)行訪問, 快速、有效地獲得更多的與主題相關(guān)的頁面, 主要通過內(nèi)容和Web 的鏈接結(jié)構(gòu)來指導(dǎo)進(jìn)一步的頁面抓取 [ 2 ]. 聚焦爬蟲會(huì)給它所下載下來的頁面分配一個(gè)評(píng)價(jià)分, 然后根據(jù)得分排序, 最后插入到一個(gè)隊(duì)列中. 最好的下一個(gè)搜索將通過對(duì)彈出隊(duì)列中的第一個(gè)頁面進(jìn)行分析而執(zhí)行, 這種策略保證爬蟲能優(yōu)先跟蹤那些最有可能鏈接到目標(biāo)頁面的頁面. 決定網(wǎng)絡(luò)爬蟲搜索策略的關(guān)鍵是如何評(píng)價(jià)鏈接價(jià)值, 即鏈接價(jià)值的計(jì)算方法, 不同的價(jià)值評(píng)價(jià)方法計(jì)算出的鏈接的價(jià)值不同, 表現(xiàn)出的鏈接的“重要程度”也不同, 從而決定了不同的搜索策略. 由于鏈接包含于頁面之中,而通常具有較高價(jià)值的頁面包含的鏈接也具有較高的價(jià)值, 因而對(duì)鏈接價(jià)值的評(píng)價(jià)有時(shí)也轉(zhuǎn)換為對(duì)頁面價(jià)值的評(píng)價(jià). 這種策略通常運(yùn)用在專業(yè)搜索引擎中, 因?yàn)檫@種搜索引擎只關(guān)心某一特定主題的頁面. 基于內(nèi)容評(píng)價(jià)的搜索策略基于內(nèi)容評(píng)價(jià)的搜索策略[ 3, 4 ] , 主要是根據(jù)主題(如關(guān)鍵詞、主題相關(guān)文檔) 與鏈接文本的相似度來評(píng)價(jià)鏈接價(jià)值的高低, 并以此決定其搜索策略: 鏈接文本是指鏈接周圍的說明文字和鏈接 U RL 上的文字信息 , 相似度的評(píng)價(jià)通常采用以下公式:sim (d i, d j ) =Σmk= 1w ik w jk(Σmk= 1w 2ik ) (Σmk= 1w 2jk )其中, di 為新文本的特征向量 , d j 為第 j 類的中心向量,m 為特征向量的維數(shù),wk 為向量的第 K Web 頁面不同于傳統(tǒng)的文本 , 它是一種半結(jié)構(gòu)化的文檔, 包含許多結(jié)構(gòu)信息 Web 頁面不是單獨(dú)存在的, 頁面中的鏈接指示了頁面之間的相互關(guān)系, 因而有些學(xué)者提出了基于鏈接結(jié)構(gòu)評(píng)價(jià)鏈接價(jià)值的方法. 基于鏈接結(jié)構(gòu)評(píng)價(jià)的搜索策略基于鏈接結(jié)構(gòu)評(píng)價(jià)的搜索策略, 是通過對(duì) Web 頁面之間相互引用關(guān)系的分析來確定鏈接的重要性, 進(jìn)而決定鏈接訪問順序的方法. 通常認(rèn)為有較多入鏈或出鏈的頁面具有較高的價(jià)值. PageRank 和 Hits 是其中具有代表性的算法. PageRank 算法基于鏈接評(píng)價(jià)的搜索引擎的優(yōu)秀代表是 Google ( , 它獨(dú)創(chuàng)的“鏈接評(píng)價(jià)體系”(PageRank 算法) 是基于這樣一種認(rèn)識(shí) , 一個(gè)網(wǎng)頁的重要性取決于它被其它網(wǎng)頁鏈接的數(shù)量, 特別是一些已經(jīng)被認(rèn)定是“重要”的網(wǎng)頁的鏈接數(shù)量. PageRank 算法最初用于 Google 搜索引擎信息檢索中對(duì)查詢結(jié)果的排序過程[ 5 ] , 近年來被應(yīng)用于網(wǎng)絡(luò)爬蟲對(duì)鏈接重要性的評(píng)價(jià), PageRank 算法中, 頁面的價(jià)值通常用頁面的 PageRank 值表示, 若設(shè)頁面 p 的 PageRank 值為PR (p ) , 則 PR (p ) 采用如下迭代公式計(jì)算:PR (p ) = C 1T+ (1 C) Σ C∈in (p )PR (p )SPIDERManager 類:該類用于控制 SPIDERWorker 線程。每個(gè) SPIDER 線程都會(huì)獨(dú)立的去完成獲取 URLs 的任務(wù),并將獲取到的URLs 加入一個(gè)公共的 URL 等待隊(duì)列中。圖 圖 列舉了不同時(shí)間段時(shí),URL 等待隊(duì)列的存儲(chǔ)狀態(tài)。所以需要判斷 URL 為絕對(duì)地址,還是相對(duì)地址。在這個(gè)循環(huán)里,首先會(huì)向 URL 等待隊(duì)列里請(qǐng)求一個(gè) URL。String c。我們就去檢索空格和標(biāo)簽,以下標(biāo)較小的字符作為截取 URL 的結(jié)束標(biāo)記。我們需要將其轉(zhuǎn)化為絕對(duì)地址。.39。 = maxCapacity。return b。(insert into middlequeue (url) values(39。ResultSet res = null。}return conn。第三個(gè)被檢索到的 href 標(biāo)簽為:這是一段很標(biāo)準(zhǔn)的 URL,它的 host 為 并且可以得到 HTML 代碼。希望在這一課題上達(dá)到另一個(gè)高度。第七章 結(jié)論從課題著手到現(xiàn)在論文完成,經(jīng)歷了 3 個(gè)月的時(shí)間。我分析 HTML 代碼。我建立了 2 個(gè)表,分別為 middlequeue 和databasequeue。)。當(dāng)加入 URL 緩存太長時(shí),調(diào)用下面的方法,將緩存區(qū)的內(nèi)容加入到數(shù)據(jù)庫。return (key, value)。這個(gè) hash 碼的長度相對(duì)較小,可以節(jié)省內(nèi)存開銷。下面是一段實(shí)行代碼。// 當(dāng) href= 后以 開頭的情況if (39。對(duì)于一個(gè) HTML 代碼,我尋找其中的 href=字符串,然后記錄它的下表i。具體方法是調(diào)用 getHtml(String sourse_url)這個(gè)方法:HttpURLConnection connection = null。為了把爬行限制在同一站點(diǎn)內(nèi)需要截?cái)嘀赶蛘就獾逆溄?保證 SPIDER 總在站內(nèi)執(zhí)行,即準(zhǔn)確地根據(jù)超鏈 URL RFC 對(duì) URL 的定義可知,URL 的格式為 一般情況下,同一網(wǎng)站內(nèi)所有頁面對(duì)應(yīng) URL 的 host 是相同的,所以可以使用 host 匹配作為判斷超鏈?zhǔn)欠裰赶蛘就獾臉?biāo)準(zhǔn). 進(jìn)一步研究發(fā)現(xiàn),很多大型網(wǎng)站中一個(gè)分類目錄對(duì)應(yīng)一個(gè)主機(jī), host 的組成可知, host 的格式一般為[站內(nèi)分].站點(diǎn)類型串只有[ |edu|gov|| 國家域名]幾種類型,所以我們?nèi)≌军c(diǎn)類型各異串前面的串,即站點(diǎn)標(biāo)志串作匹配,超鏈 URL的 host 中是否包含此串,為超鏈?zhǔn)欠裾緝?nèi)的判斷標(biāo)準(zhǔn). URL 保存因?yàn)榈却?URLs 的數(shù)目非常多,如果全部采用 List 來存儲(chǔ)非常的占用內(nèi)存空間。 URL 抽取,解析和保存 URL 抽取通過觀察研究 HTML 代碼,我們可以知道。 爬行策略分析圖 因?yàn)楸菊撐膶?shí)現(xiàn)的爬蟲程序的初衷是盡可能遍歷某一站點(diǎn)所有的頁面。然后根據(jù) URL 下載網(wǎng)頁,然后解析網(wǎng)頁,獲取超鏈接 URLs。為了達(dá)到上述目的,一個(gè) SPIDER 必須被設(shè)計(jì)成多線程的,A 個(gè)線程并發(fā)地在網(wǎng)絡(luò)上協(xié)同工作,才有可能在盡可能短的時(shí)間內(nèi)遍歷完網(wǎng)絡(luò)中的網(wǎng)頁。原理是:cache 的所有位置都用雙向鏈表連接起來,當(dāng)一個(gè)位置被命中后,就將通過調(diào)整鏈表的指向?qū)⒃撐恢谜{(diào)整到鏈表的頭位置,新加入的內(nèi)容直接放在鏈表的頭上。當(dāng)需要進(jìn)行檢測 URL 是否重復(fù)的時(shí)候,只需要將這個(gè) URL 進(jìn)行Hash 映射,如果得到的地址已經(jīng)存在,說明已經(jīng)被下載過,放棄下載,否則,將該 URL 及其 Hash 地址作為鍵值對(duì)存放到 Hash 表中。其關(guān)鍵在于允許一個(gè)作業(yè)只裝入部分的頁或段就可以啟動(dòng)運(yùn)行,當(dāng)作業(yè)運(yùn)行的時(shí)候在內(nèi)存中找不到所需要的頁或段的時(shí)候,就會(huì)發(fā)生請(qǐng)求調(diào)入,而從外存中找到的頁或段將會(huì)置換內(nèi)存中暫時(shí)不運(yùn)行的頁面到外存。 JAVA 線程的結(jié)束方式線程會(huì)以以下三種方式之一結(jié)束:線程到達(dá)其 run()方法的末尾;線程拋出一個(gè)未捕獲到的 Exception 或 Error;另一個(gè)線程調(diào)用一個(gè) Deprecated 的 stop()方法。通常,我們可以將一個(gè)類繼承 Thread,然后,覆蓋 Thread 中的 run()方法,這樣讓這個(gè)類本身也就成了線程。JAVA 的線程是通過 類來實(shí)現(xiàn)的,它內(nèi)部實(shí)現(xiàn)了虛擬 CPU 的功能,能夠接收和處理傳遞給它的代碼和數(shù)據(jù),并提供了獨(dú)立的運(yùn)行控制功能。所謂多進(jìn)程,就是讓系統(tǒng)(好像)同時(shí)運(yùn)行多個(gè)程序。爬蟲程序就是用來搜集網(wǎng)頁的程序。摘要網(wǎng)絡(luò)爬蟲是一種自動(dòng)搜集互聯(lián)網(wǎng)信息的程序。在建立搜索引擎的過程中,搜集網(wǎng)頁是非常重要的一個(gè)環(huán)節(jié)。一般來說,這些操作系統(tǒng)都支持多進(jìn)程操作??梢孕蜗蟮睦斫鉃?在一個(gè) JAVA 程序內(nèi)部虛擬了多臺(tái)計(jì)算機(jī),每臺(tái)計(jì)算機(jī)對(duì)應(yīng)一個(gè)線程,有自己的 CPU
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1