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

正文內(nèi)容

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

2025-06-30 20:21本頁(yè)面
  

【正文】 感謝李廣鎮(zhèn)同學(xué),戴國(guó)強(qiáng)同學(xué),潘秀銀同學(xué)在程序具體實(shí)施過(guò)程中給我提供了寶貴的意見(jiàn)和提議。希望在這一課題上達(dá)到另一個(gè)高度。所以在以后的時(shí)間,我將繼續(xù)研究網(wǎng)絡(luò)爬蟲(chóng)技術(shù)。對(duì)于網(wǎng)絡(luò)爬蟲(chóng)這個(gè)龐大的知識(shí)體系來(lái)說(shuō),這篇論文實(shí)現(xiàn)的功能只能算一些皮毛。這篇論文實(shí)現(xiàn)了一個(gè)基于廣度優(yōu)先策略的多線程爬蟲(chóng)程序,可以搜集站內(nèi)URLs。對(duì)網(wǎng)絡(luò)爬蟲(chóng)中比較主流的技術(shù)都有了更深的理解。第七章 結(jié)論從課題著手到現(xiàn)在論文完成,經(jīng)歷了 3 個(gè)月的時(shí)間。圖 圖 為控制臺(tái)打印出來(lái)的信息。根據(jù)測(cè)試結(jié)果可以得知爬蟲(chóng)程序能夠正確解析出頁(yè)面 URLs。第三個(gè)被檢索到的 href 標(biāo)簽為:這是一段很標(biāo)準(zhǔn)的 URL,它的 host 為 并且可以得到 HTML 代碼。所以因該被過(guò)濾掉。這是程序設(shè)計(jì)上的不足。這個(gè) URL 為 ico 文件,是不可能被當(dāng)作 HTML 解析的。程序?qū)⑵滢D(zhuǎn)化為了,絕對(duì)地址。我分析 HTML 代碼。下面是從數(shù)據(jù)庫(kù)里截圖的 2 段爬行結(jié)果。然后用爬蟲(chóng)程序去運(yùn)行。}return conn。// 建立到MySQL的連接conn = (jdbc: root, root)。public static Connection conn() {Connection conn = null。JAVA 程序和數(shù)據(jù)之間的通信是通過(guò) JDBC 實(shí)現(xiàn)的。Middlequeue 用于 URL 等待隊(duì)列的主存儲(chǔ)部分。我建立了 2 個(gè)表,分別為 middlequeue 和databasequeue。}(delete from middlequeue limit 25)。res = (sql)。ResultSet res = null。下面是具體實(shí)現(xiàn)的 JAVA 代碼:public synchronized void waitQueueAdd() {String sql = SELECT * FROM middlequeue LIMIT 25。檢索存入數(shù)據(jù)庫(kù)最上端的 25 條數(shù)據(jù),然后依次將其加入到取出緩存區(qū)。具體的實(shí)現(xiàn)方法是:從數(shù)據(jù)庫(kù)里搜索前 25 條數(shù)據(jù),因?yàn)閿?shù)據(jù)庫(kù)添加數(shù)據(jù)時(shí)是順序往下壓入的。}當(dāng)取出緩存區(qū)空以后,需要將數(shù)據(jù)庫(kù)的內(nèi)容加入到緩存區(qū)。)。(insert into databasequeue (url) values(39。)。(insert into middlequeue (url) values(39。while ((0).size() 0) {String url = (String)(0).get(0)。public synchronized void waitQueueDecrease() {try {Statement stmt = null。不斷重復(fù)這個(gè)操作,直到存入緩存被清空。調(diào)用 waitQueueDecrease()這個(gè)函數(shù),將存入緩存里的數(shù)據(jù)轉(zhuǎn)移到數(shù)據(jù)庫(kù)。當(dāng)加入 URL 緩存太長(zhǎng)時(shí),調(diào)用下面的方法,將緩存區(qū)的內(nèi)容加入到數(shù)據(jù)庫(kù)。2 段基于內(nèi)存的 URL 緩存區(qū),和一個(gè)基于數(shù)據(jù)庫(kù)的儲(chǔ)存區(qū)。往里面加入U(xiǎn)RLs。return b。}boolean b = ((url))。所以我們必須先除去后面的/符號(hào),再進(jìn)行 URL 去重判斷。也許是同一個(gè) URL,但是有些在最后一位接續(xù)/符號(hào),而有些則沒(méi)有接續(xù)。}}}有了這個(gè) map 以后,我就會(huì)用 URL 到里面去碰撞。return (key, value)。} finally {()。}Overridepublic V get(Object key) {try {()。 = maxCapacity。private final Lock lock = new ReentrantLock()。private final int maxCapacity。這樣就算 URL 數(shù)過(guò)大,也可以盡量避免重復(fù)下載 URL。然后這個(gè) URL 消重隊(duì)列的維護(hù)是同時(shí) LRULinkedHashMap 來(lái)實(shí)現(xiàn)的。這個(gè) hash 碼的長(zhǎng)度相對(duì)較小,可以節(jié)省內(nèi)存開(kāi)銷(xiāo)。因?yàn)閁RLs 的數(shù)量非常巨大,為了節(jié)省內(nèi)存空間。}}如果為站內(nèi)URL則加入到緩存隊(duì)列。.39。// if ((.)) {String str = (0,(.))。下面的代碼是 host 的情況。一般情況下同一網(wǎng)站內(nèi)的 URL 的 host 名因該是一致的。// 如果 url中包含以下 字符串,則不加入隊(duì)列if (().contains(.css)|| ().contains(.rar) || ()|| (.zip) || (javascript)) {return false。下面是一段實(shí)行代碼。很多 URL 它們指向的文件不是 HTML 文件,而是一些 CSS 文件,或者 RAR 包文件,或者只是接續(xù)“”符號(hào),代表只是調(diào)用一段 javascript 代碼??梢耘袛嗨鼮榻^對(duì)地址。我們需要將其轉(zhuǎn)化為絕對(duì)地址。}在每個(gè) URL 被截取出來(lái)之后,需要判斷這些 URL 是相對(duì)地址,還是絕對(duì)地址。}}haveHref = (href)。url = addURLhost(fromURL, url)。 == (0)) {html_text = (1)。// 當(dāng) href= 后以 開(kāi)頭的情況if (39。// HTML中是否還含有href 標(biāo)簽boolean haveHref = (href)。public void getHref_UrlsList(String html_text, String fromURL,UrlQueueManager urlQueueManager, int biaoji) {// 站內(nèi) URL隊(duì)列ListString siteInsideUrls = new ArrayListString()。我們就去檢索空格和標(biāo)簽,以下標(biāo)較小的字符作為截取 URL 的結(jié)束標(biāo)記。這步以后原字符串又被截取為“ target=”開(kāi)始,我們可以繼續(xù)檢索 href=標(biāo)簽。當(dāng)完成這一步操作后,原字符串被截取從“ class=”開(kāi)始。我們先檢索 href=標(biāo)記,然后判斷出第 i+1 位為一個(gè)雙引號(hào),所以我們可以截取 i+1 位到第 2 個(gè)雙引號(hào)的位置。截取過(guò)后的 href 標(biāo)記就剔除它與它前面的部分,以便而后的操作可以繼續(xù)檢索 href 標(biāo)記,直到正個(gè) HTML 代碼中所有的 href 標(biāo)記都被解析過(guò)后,操作終止。對(duì)于一個(gè) HTML 代碼,我尋找其中的 href=字符串,然后記錄它的下表i。當(dāng)?shù)玫?HTML 代碼以后,程序就會(huì)調(diào)用 Url_Parse 這個(gè)類(lèi)里面的方法來(lái)解析HTML。}return ()。String c。in = new InputStreamReader(())。()。url = new URL(sourse_url)。BufferedReader br = null。具體方法是調(diào)用 getHtml(String sourse_url)這個(gè)方法:HttpURLConnection connection = null。}如果沒(méi)有得到 URL 就繼續(xù)向 URL 等待隊(duì)列申請(qǐng)。所以我在這里寫(xiě)了一個(gè)循環(huán):s = null。在這個(gè)循環(huán)里,首先會(huì)向 URL 等待隊(duì)列里請(qǐng)求一個(gè) URL。我采用了第二種方法:public class SpiderWorker implements Runnable {在這個(gè)類(lèi)中必須要實(shí)現(xiàn)重寫(xiě) run()這個(gè)方法。JAVA 程序的編寫(xiě)工具是 ;數(shù)據(jù)庫(kù)是 MYSQL 5 。圖 表示了 URL 等待隊(duì)列的結(jié)構(gòu)。URL 等待隊(duì)列設(shè)計(jì)成三段式:第一段為一個(gè) List,用來(lái)加入新得到的 URL。為了把爬行限制在同一站點(diǎn)內(nèi)需要截?cái)嘀赶蛘就獾逆溄?保證 SPIDER 總在站內(nèi)執(zhí)行,即準(zhǔn)確地根據(jù)超鏈 URL RFC 對(duì) URL 的定義可知,URL 的格式為 一般情況下,同一網(wǎng)站內(nèi)所有頁(yè)面對(duì)應(yīng) URL 的 host 是相同的,所以可以使用 host 匹配作為判斷超鏈?zhǔn)欠裰赶蛘就獾臉?biāo)準(zhǔn). 進(jìn)一步研究發(fā)現(xiàn),很多大型網(wǎng)站中一個(gè)分類(lèi)目錄對(duì)應(yīng)一個(gè)主機(jī), host 的組成可知, host 的格式一般為[站內(nèi)分].站點(diǎn)類(lèi)型串只有[ |edu|gov|| 國(guó)家域名]幾種類(lèi)型,所以我們?nèi)≌军c(diǎn)類(lèi)型各異串前面的串,即站點(diǎn)標(biāo)志串作匹配,超鏈 URL的 host 中是否包含此串,為超鏈?zhǔn)欠裾緝?nèi)的判斷標(biāo)準(zhǔn). URL 保存因?yàn)榈却?URLs 的數(shù)目非常多,如果全部采用 List 來(lái)存儲(chǔ)非常的占用內(nèi)存空間。所以我們需要過(guò)濾掉這些 URLs。因?yàn)榻馕龀鰜?lái)的 URL 地址可能是一些文件的地址,或者為 javascript 文件或者 css文件。所以需要判斷 URL 為絕對(duì)地址,還是相對(duì)地址。這些情況就需要更細(xì)致的考慮,才能獲取。通過(guò)這種方法,我們獲取網(wǎng)頁(yè)中大部分的 URLs。但是不同的網(wǎng)站 href=后面的內(nèi)容有所不同。我們需要獲取 HTML 代碼中的 URLs,就可以通過(guò)尋找 href 標(biāo)簽來(lái)達(dá)到目的。 URL 抽取,解析和保存 URL 抽取通過(guò)觀察研究 HTML 代碼,我們可以知道。第四個(gè)方框?yàn)?,解?e 對(duì)應(yīng) HTML 獲取URLs:nop,并刪除 e。第二個(gè)方框?yàn)?,解?a 對(duì)應(yīng) HTML 獲取URLs:bcd,同時(shí)刪除 a。圖 圖 列舉了不同時(shí)間段時(shí),URL 等待隊(duì)列的存儲(chǔ)狀態(tài)。當(dāng)這一層 URLs 全部解析完后,再開(kāi)始下一層 URLs。那么這些 URLs 獲取的順序就是 abcdefghijklmnop這樣一個(gè)順序。通過(guò)這種循環(huán)的獲取方式實(shí)現(xiàn)廣度優(yōu)先爬行。實(shí)現(xiàn)的策略是:先獲取初始 URL 對(duì)應(yīng) HTML 代碼里所有的 URLs。 爬行策略分析圖 因?yàn)楸菊撐膶?shí)現(xiàn)的爬蟲(chóng)程序的初衷是盡可能遍歷某一站點(diǎn)所有的頁(yè)面。而線程 2 同時(shí)也會(huì)下載它獲取到的 URL 2 對(duì)應(yīng)的 HTML 代碼,解析出 URLs 加入到等待隊(duì)列中。假設(shè)線程 1 從 URL 隊(duì)列中獲取一條任務(wù) URL 1,然后它會(huì)下載對(duì)應(yīng)的 HTML,解析出里面包含 URLs,然后再將這些 URLs 加入到 URL 隊(duì)列中去。每個(gè) SPIDER 線程都會(huì)獨(dú)立的去完成獲取 URLs 的任務(wù),并將獲取到的URLs 加入一個(gè)公共的 URL 等待隊(duì)列中。因?yàn)樵谶@一過(guò)程中每一個(gè)線程都有自己的堆棧,而當(dāng)一個(gè)方法調(diào)用它自身時(shí),它們需要使用同一個(gè)堆棧。本系統(tǒng)中使用了非遞歸的程序設(shè)計(jì)方法。將初始 URLs 加入到等待隊(duì)列是否為非法 URL創(chuàng)建啟動(dòng)爬蟲(chóng)線程從 URL 等待隊(duì)列獲取任務(wù)URL下載 URL 對(duì)應(yīng)的 HTML 代碼將相對(duì)地址轉(zhuǎn)換為絕對(duì)地址解析 HTML,獲取 URLs將 URLs 加入到URL 等待隊(duì)列是否為絕對(duì)地址是否為重復(fù)第四章 系統(tǒng)分析與設(shè)計(jì) SPIDER 構(gòu)造分析構(gòu)造 SPIDER 程序有兩種方式:(1)把 SPIDER 程序設(shè)計(jì)為遞歸的程序;(2)編寫(xiě)一個(gè)非遞歸的程序,它要維護(hù)一個(gè)要訪問(wèn)的網(wǎng)頁(yè)列表。再判斷這些 URL 是否已經(jīng)被下載到,如果沒(méi)有則加入到 URL 等待隊(duì)列。然后根據(jù) URL 下載網(wǎng)頁(yè),然后解析網(wǎng)頁(yè),獲取超鏈接 URLs。 SPIDER 工作過(guò)程①將給定的初始 URL 加入到 URL 等待隊(duì)列。UrlParse 類(lèi):用于解析 HTML,獲取并過(guò)濾 URL。SPIDERManager 類(lèi):該類(lèi)用于控制 SPIDERWorker 線程。 秒的速度下載 Web 頁(yè)面, 平均將會(huì)產(chǎn)生 2022 多個(gè) URL [12] , 因此簡(jiǎn)單的采用內(nèi)存數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)這些 URL 隊(duì)列有一定的問(wèn)題, 系統(tǒng)沒(méi)有足夠的內(nèi)存空間。每一個(gè) SPIDER 任務(wù)執(zhí)行端關(guān)聯(lián)一個(gè)站點(diǎn),一個(gè)線程下載一個(gè)基于 URL 鏈接的頁(yè)面, 并進(jìn)行 Web 頁(yè)面解析, 得到站內(nèi) URL 和發(fā)現(xiàn)新站點(diǎn) URL 另外,將URL 隊(duì)列持久化到數(shù)據(jù)庫(kù), 因此在 SPIDER 任務(wù)執(zhí)行端以外 Down 掉后, 能夠斷點(diǎn)續(xù)傳.SPIDER 客戶端線程間的協(xié)調(diào)通信采用 Java 的線程同步技術(shù) synchronized,在數(shù)據(jù)服務(wù)端中對(duì) URL 進(jìn)行緩存提高了系統(tǒng)處理速度. SPIDER 的任務(wù)執(zhí)行和任務(wù)調(diào)度端都需要維持一個(gè) URL 隊(duì)列: 任務(wù)執(zhí)行端的 URL 隊(duì)列中存儲(chǔ)了站內(nèi)URL。當(dāng) SPIDER 程序訪問(wèn)到一個(gè)網(wǎng)頁(yè),必須進(jìn)行以下幾項(xiàng)基本處理:抽取網(wǎng)頁(yè)中包含的文本;抽取網(wǎng)頁(yè)中包含的 URL,并將其區(qū)分為網(wǎng)站內(nèi) URL 或網(wǎng)站外URL。所以我們限制 SPIDER 每次工作只訪問(wèn)一個(gè)站點(diǎn)。為了達(dá)到上述目的,一個(gè) SPIDER 必須被設(shè)計(jì)成多線程的,A 個(gè)線程并發(fā)地在網(wǎng)絡(luò)上協(xié)同工作,才有可能在盡可能短的時(shí)間內(nèi)遍歷完網(wǎng)絡(luò)中的網(wǎng)頁(yè)。Authority 方法的搜索方法,Authority 表示一個(gè)頁(yè)面被其它頁(yè)面引用的數(shù)量, 即該頁(yè)面的入度值. Hub 表示一個(gè) Web 頁(yè)面指向其它頁(yè)面的數(shù)量, 即該頁(yè)面的出度值. 算法如下: 將查詢(xún) q 提交給傳統(tǒng)的基于關(guān)鍵字匹配的搜索引擎. 搜索引擎返回很多網(wǎng)頁(yè), 從中取前 n 個(gè)網(wǎng)頁(yè)作為根集, 用 S S 中加入被 S 引用的網(wǎng)頁(yè)和引用 S 的網(wǎng)頁(yè)將 S 擴(kuò)展成一個(gè)更大的集合 T 中的 Hub 網(wǎng)頁(yè)為頂點(diǎn)集 V l, 以權(quán)威網(wǎng)頁(yè)為頂點(diǎn)集 V 2,V1 中的網(wǎng)頁(yè)到 V 2 中的網(wǎng)頁(yè)的超鏈接為邊集 E , 形成一個(gè)二分有向圖 S G = (V 1,V 2, E ).對(duì) V 1 中的任一個(gè)頂點(diǎn) v , 用 H (v ) 表示網(wǎng)頁(yè) v 的 Hub 值, 對(duì) V 2 中的頂點(diǎn) u,
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1