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

正文內(nèi)容

基于廣度優(yōu)先算法的多線程爬蟲程序的設(shè)計與實現(xiàn)畢業(yè)論文-文庫吧在線文庫

2025-07-30 20:21上一頁面

下一頁面
  

【正文】 URL 消重處理 ..............................................24 URL 等待隊列維護 ..........................................26 數(shù)據(jù)庫設(shè)計 ...............................................27第六章 系統(tǒng)測試 ....................................................29第七章 結(jié)論 ........................................................32參考文獻 ...........................................................33致謝 ...............................................................34外文資料原文 .......................................................35譯文 ...............................................................51第一章 引言隨著互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)上的信息呈爆炸式增長。通過實現(xiàn)這一爬蟲程序,可以搜集某一站點的 URLs,并將搜集到的 URLs存入數(shù)據(jù)庫。本論文闡述了網(wǎng)絡(luò)爬蟲實現(xiàn)中一些主要問題:為何使用廣度優(yōu)先的爬行策略,以及如何實現(xiàn)廣度優(yōu)先爬行;為何要使用多線程,以及如何實現(xiàn)多線程;系統(tǒng)實現(xiàn)過程中的數(shù)據(jù)存儲;網(wǎng)頁信息解析等。 Breadth First Search。目前幾種比較常用的爬蟲實現(xiàn)策略:廣度優(yōu)先的爬蟲程序,Repetitive 爬蟲程序,定義爬行爬蟲程序,深層次爬行爬蟲程序。實現(xiàn)網(wǎng)絡(luò)爬蟲的重點和難點有:多線程的實現(xiàn);對臨界資源的分配;遍歷 web圖的遍歷策略選擇和實現(xiàn);存儲數(shù)據(jù)結(jié)構(gòu)的選擇和實現(xiàn)??雌饋恚鼈兌纪瑫r在我的機器上給我工作。每個任務(wù)稱為一個線程,能夠同時運行多個線程的程序稱為多線程程序。JVM 還通常會創(chuàng)建一些其他的線程,不過,這些線程對我們而言通常都是不可見的。創(chuàng)建一個名為 name 的目標(biāo)為 target 的線程。調(diào)用 start()方法并不一定馬上會執(zhí)行這個線程,正如上面所說,它只是進入Runnble 而不是 Running。線程調(diào)度程序根據(jù)調(diào)度策略來調(diào)度不同的線程,調(diào)用線程的 run 方法給已經(jīng)注冊的各個線程以執(zhí)行的機會,被調(diào)度執(zhí)行的線程進入運行(Running)狀態(tài)。JAVA 提供了多種機制以實現(xiàn)線程同步。synchronized 關(guān)鍵字實現(xiàn)的基本操作是把每個需要線程同步的部分定義為一個臨界區(qū),在臨界區(qū)中同一時刻只有一個線程被執(zhí)行。這種操作對數(shù)據(jù)庫系統(tǒng)是一個災(zāi)難,理論上任何需要產(chǎn)生磁盤 I/O 動作的存儲系統(tǒng)都無法滿足這種查詢的需求。你可以把全部已經(jīng)下載完成的 URL 存放到磁盤記事本文件中。 基于 MD5 壓縮映射的存儲MD5 算法是一種加密算法,同時它也是基于 Hash 的算法。使用了 Berkeley DB,你就不需要考慮進行磁盤 IO 操作的性能損失了,這個數(shù)據(jù)庫在設(shè)計的時候很好地考慮了這些問題,并且該數(shù)據(jù)庫支持高并發(fā),支持記錄的順序存儲和隨機存儲,是一個不錯的選擇。 URL 類訪問網(wǎng)絡(luò)JAVA 提供了許多支 Inter 連接的類,URL 類就是其中之一。ou t (C) 一個再大型的站點,其中的網(wǎng)頁數(shù)目也是有限的,因此 SPIDER 程序能在有限的時間內(nèi)結(jié)束。UrlQueueManager 類:該類用于維護 URL 等待隊列,分配任務(wù) URL,URL消重模塊。④繼續(xù)執(zhí)行步驟③,直到結(jié)束條件停止。圖 圖 表示了該系統(tǒng)爬蟲線程的實現(xiàn)策略。然后依次獲取這些 URLs 對應(yīng)的 HTML 里的 URLs,當(dāng)這一層所有的 URLs 都下載解析完后,在獲取下一層的信息。第一個方框是將初始 URL:a 加入到等待隊列。lia href=movie_2022/html/ target=_blank我猜[20220531]/aem531/em/lilia href=movie_2022/html/? target=_blank火影忍者[331 ,頁面上 303 既是]/a/li通過觀察得知,一般 href 標(biāo)簽是以 href=這樣的形式出現(xiàn)的。相對地址需要先轉(zhuǎn)化為絕對地址,再進行過濾。當(dāng)這個 List 中的數(shù)目過多時,則將 List 中的內(nèi)容加入到數(shù)據(jù)庫,并清空該 List,以便加入新的 URLs;第二段為數(shù)據(jù)庫,當(dāng)?shù)谝欢螖?shù)據(jù)過多時,將第一段內(nèi)的數(shù)據(jù)存入數(shù)據(jù)庫;第三段也為一個 List,從這里面分配任務(wù)URL,當(dāng)該 List 內(nèi) URL 不足時,將數(shù)據(jù)庫里的數(shù)據(jù)再轉(zhuǎn)存入。因為 URL 隊列會出現(xiàn)為空或者被其他線程占用的情況。URL url = null。while ((c = ()) != null) {(c)。a href= class=focu首頁/aa href=’movie_2022/mlist/’ target=_self動作片/aa href=movie_2022/mlist/ target=_self恐怖片/aa href=movie_2022/mlist/ 愛情片/a例如上面那段 HTML 代碼。下面是 href=后面接續(xù)雙引號情況的 JAVA 代碼,其他情況的代碼方式相同。url = (0, (\))。假如這個相對地址的父 URL為 地址的概念,../為返回上一層,所以可以得到這個相對地址的絕對地址為 2 種URL,它包含完整的協(xié)議信息,域名地址。}過濾完后的 URLs,再判斷它為站內(nèi) URL 或者為站外 URL。)) + .)) {return true。這個Map 非常好,它總是淘汰重復(fù)次數(shù)最少的 URL。}Overrideprotected boolean removeEldestEntry(K, V eldest) {return size() maxCapacity。因為有些網(wǎng)站的 URL寫法不固定。} URL 等待隊列維護對 URL 等待隊列的操作主要有 2 個:從里面取出 URLs。方法是取出下標(biāo)為 0 的元素,將其加入到數(shù)據(jù)庫,然后刪除下標(biāo)為 0 的元素。+ url + 39。通過調(diào)用waitQueueAdd()這個函數(shù)來實現(xiàn)。try {stmt = ().createStatement()。而 databasequeue 表記錄爬蟲程序運行得到的所有 URLs。}第六章 系統(tǒng)測試我以 URL。但分析這個 URL 可以得知。所以這個 URL 被加入 URL 隊列。網(wǎng)絡(luò)爬蟲是一個自動搜集互聯(lián)網(wǎng)信息的工具,實現(xiàn)了網(wǎng)絡(luò)爬蟲,就可以在互聯(lián)網(wǎng)這樣一個巨大的信息海洋里遨游。參考文獻,簡析搜索引擎中網(wǎng)絡(luò)爬蟲的搜索策略[N],阜陽師范學(xué)院學(xué)報(自然科學(xué)版),2022(09) : P60~63.,基于 JAVA 的多線程 SPIDER 的設(shè)計與實現(xiàn)[J] ,福建電腦,2022(06):P62~63.,基于網(wǎng)絡(luò)的信息獲取技術(shù)淺析[J],福建電腦,2022(04):P60~61.,網(wǎng)絡(luò)蜘蛛搜索策略比較研究[A],計算機工程與應(yīng)用, 2022(04):P131.,支持 Web 信息分類的高性能蜘蛛程序 [J],小型微型計算機系統(tǒng),2022(07):P1309 ~ 1312.,JAVA 線程[A],JAVASE 平臺程序設(shè)計和實戰(zhàn),2022(05):P103~135.,搜索引擎中數(shù)據(jù)獲取的設(shè)計與實現(xiàn)[J] 沈陽:小型微型計算機系統(tǒng),1999. Diligenti, Frans Coetzee, Steve Lawrence, etal. Focused Craw ling using Context Graph s[J ], Intemat ional Conference on Very Large Databases. 2022, (26) : P 527~534.. 分布式 Web Crawler 的研究: 結(jié)構(gòu)、算法和策略 [J ]. 電子學(xué)報, 2022, 30 (12A ).[致謝我要感謝畢業(yè)論文指導(dǎo)老師,朱大勇老師,感謝他在論文方向和論文實施計劃上給予我指導(dǎo)。要深刻地理解爬蟲程序,在爬蟲程序設(shè)計中有所作為,還需要長達(dá)幾年,或者更長時間的積累。根據(jù)顯示結(jié)果可以看出,不同的線程的確是在交替完成爬行任務(wù)。然后被檢索出來的 href 標(biāo)簽是:這是一段完整 URL,但是其 host 名同初始 URL 不一致,同時它的后綴為css,表明它指向的文件為 css 文件。圖 部分運行結(jié)果圖 為最先爬蟲出來的 URLs 結(jié)果。try {// 加載Connector/J驅(qū)動().newInstance()。 數(shù)據(jù)庫設(shè)計對于 MYSQL 數(shù)據(jù)庫的設(shè)計。然后刪除數(shù)據(jù)庫中這 25 條數(shù)據(jù)。+ url + 39。while (() 0) {try {stmt = ().createStatement()。所以這里就會有 2 個方法來完成數(shù)據(jù)直接的交接。public synchronized boolean isContainUrl(String url) {if ((/)) {url = (0, () 1)。}}Overridepublic V put(K key, V value) {try {()。private static final float DEFAULT_LOAD_FACTOR = 。我先通過 MD5 壓縮來得到每個URL 對于的一個 hash 碼。其他情況的代碼可以類推。像這種情況我們就直接拋棄這些 URLs。}(siteInsideUrls)。while (haveHref) {html_text = ((href=) + 5)。我們繼續(xù)檢索 href=標(biāo)簽,判斷它的第 i+1 位為一個單引號,所以我們又截取i+1 位到第 2 個單引號的位置。 URL 解析從 HTML 代碼中提取 URLs,主要是通過檢索字符串中的 href 字符串來實現(xiàn)的。// 打開的連接讀取的輸入流。當(dāng)?shù)玫饺蝿?wù) URL 以后,會通過這個 URL 得到對應(yīng)的 HTML 代碼。 爬蟲工作這個類繼承自線程類,實現(xiàn)線程在 java 中有兩種方法:一種是直接繼承Thread 類;一種是實現(xiàn) Runnable 接口。然后再進行 URL 消重處理,最后加入到 URL等待隊列。但是有些 URLs 是通過提交表單,或者通過 javascript 來跳轉(zhuǎn)的。通過這樣的存儲方法實現(xiàn)如圖 的廣度爬行算法。當(dāng)獲取到 b 的 URLs 之后,并不會馬上去解析這些 URLs,而是先解析同 b 在同一層中的 cd 對應(yīng)的 URLs。以此類推,多個線程并發(fā)地去完成爬蟲工作。這是因為,當(dāng)一個遞歸程序運行時要把每次遞歸壓入堆棧,但在本系統(tǒng)設(shè)計中使用的是多線程,它允許一次運行多個任務(wù),但是,多線程與遞歸是不兼容的。②創(chuàng)建爬蟲線程,啟動爬蟲線程③每個爬蟲線程從 URL 等待隊列中取得任務(wù) URL。 任務(wù)調(diào)度端則是站點的 URL. 在這些 URL 隊列上有大量的操作, 包括URL 查找、 URL 插入、URL 狀態(tài)更新等. 如果 SPIDER 以 300 頁 246。我們可以把網(wǎng)絡(luò)看做一個圖 M(V,E),網(wǎng)絡(luò)中的網(wǎng)頁構(gòu)成節(jié)點集 V,他們之間的鏈接構(gòu)成邊集 E,SPIDER 正是從某一節(jié)點開始,沿著邊,遍歷圖M,每訪問到圖中一個節(jié)點 Vi,就進行一定的處理。在下載網(wǎng)頁前,我們需要判斷目標(biāo)網(wǎng)頁是否存在,這時調(diào)用 URLConnection 類的 getHeaderField()方法,獲得服務(wù)器返回給 SPIDER 程序的響應(yīng)碼,如果響應(yīng)碼包含”20*”字樣,表示目標(biāo)網(wǎng)頁存在,下一步就下載網(wǎng)頁,否則就不下載??梢詤⒖?Google的 LRU 算法實現(xiàn) URL 消重用雙向鏈表來實現(xiàn)大容量 cache 的 LRU 算法。況且,在爬蟲進行檢測的過程中,可以通過記錄日志來保存在進行 MD5 時發(fā)生碰撞的 URL,通過單獨對該 URL 進行處理也是可行的。 基于 Hash 算法的存儲對每一個給定的 URL,都是用一個已經(jīng)建立好的 Hash 函數(shù),映射到某個物理地址上。接著要考慮的就是如何能夠更加高效地讓爬蟲工作,確切地說,讓去重工作更加高效。所謂的虛擬儲存器,是指具有請求調(diào)入和置換功能,能從邏輯上對內(nèi)存容量加以擴充的一種儲存器系統(tǒng)。所以 JAVA 中的每個對象都有自己的鎖。線程調(diào)度程序會根據(jù)調(diào)度情況,將正在運行中的線程設(shè)置為 Runnable 狀態(tài),例如,有一個比當(dāng)前運行狀態(tài)線程更高運行等級的線程進入 Runnable 狀態(tài),就可能將當(dāng)前運行的線程從 Running 狀態(tài)“踢出”,讓它回到 Runnable 狀態(tài)。 JAVA 中的線程的生命周期JAVA 的線程從產(chǎn)生到消失,可分為 5 種狀態(tài):新建(New),可運行(Runnable),運行( Running),阻塞(Blocked)以及死亡(Dead)。創(chuàng)建一個隸屬于 group 線程組,目標(biāo)為 target 的線程。創(chuàng)建一個線程??梢孕蜗蟮睦斫鉃?在一個 JAVA 程序內(nèi)部虛擬了多臺計算機,每臺計算機對應(yīng)一個線程,有自己的 CPU,可以獲取所需的代碼和數(shù)據(jù),因此能獨立執(zhí)行任務(wù),相互間還可以共用代碼和數(shù)據(jù)。我們?nèi)说母?
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1