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

正文內(nèi)容

基于多線程的網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文-資料下載頁

2025-06-30 14:58本頁面

【導(dǎo)讀】導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除文中特別加以標(biāo)注和致。含我為獲得及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。明并表示了謝意。以贏利為目的前提下,學(xué)校可以公布論文的部分或全部?jī)?nèi)容。蟲關(guān)鍵技術(shù)是對(duì)URL進(jìn)行分析和去重。為使網(wǎng)絡(luò)爬蟲具備更高效的抓取能力,因而使用了多線程技。同時(shí)為了避免無限制的等待,應(yīng)該對(duì)網(wǎng)絡(luò)爬蟲連接網(wǎng)絡(luò)及讀取時(shí)間最大值進(jìn)行設(shè)定。目標(biāo)是研究并實(shí)現(xiàn)一個(gè)實(shí)現(xiàn)簡(jiǎn)單的可在后臺(tái)自動(dòng)運(yùn)行的爬蟲程序。從行為上來看,它更近似于主題網(wǎng)絡(luò)爬蟲。

  

【正文】 有問題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。?IP 是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。 TCP/IP 協(xié)議不是 TCP 和 IP 這兩個(gè)協(xié)議的合稱,而是指因特網(wǎng)整個(gè) TCP/IP 協(xié)議族。 而最主要的是 TCP 協(xié)議和 IP 協(xié)議。 (摘自百度百科 [5]) 本課題 將采用 IPv4 協(xié)議 作為 開發(fā) 基礎(chǔ)。 IPv4 網(wǎng)際協(xié)議版本 4( Inter Protocol version 4)。 IPv4( 通常稱之 IP)自 20 世紀(jì) 80 年代早期以來一直是網(wǎng)際協(xié)議族的主力協(xié)議。它使用 32 位地址。 IPv4給 TCP、 UDP、 SCTP、 ICMP 和 IGMP 提供分組遞送服務(wù)。 其中 主要 使用 的 基于 TCP 和 UDP 的 網(wǎng)絡(luò)編程。 TCP 傳輸控制協(xié)議( Transmission Control Protocol)。 TCP 是一個(gè)面向連接的協(xié)議,為用戶進(jìn)程提供可靠的全雙工字節(jié)流。 TCP 套接字是一種流套接字( stream socket)。 TCP 關(guān)心確認(rèn)、超時(shí)和重傳之類的細(xì)節(jié)。大多數(shù)因特網(wǎng)應(yīng)用程序使用 TCP。 TCP 的可靠連接得益于它的三次握手原 理。 TCP協(xié)議真 是 通過 “三次握手 ”的 方式保證了 傳輸 的可靠性。 本課題 將 會(huì) 采用該種 協(xié)議為基礎(chǔ),進(jìn)行編程。 網(wǎng)絡(luò)編程步驟 無論使用 TCP 方式還是 UDP 方式進(jìn)行網(wǎng)絡(luò)通訊,網(wǎng)絡(luò)編程都是由客戶端和服務(wù)器端組成。當(dāng)然, B/S 結(jié)構(gòu)的編程中只需要實(shí)現(xiàn)服務(wù)器端即可。所以,下面介紹網(wǎng)絡(luò)編程的步驟時(shí),均以 C/S 結(jié)構(gòu)為基礎(chǔ)進(jìn)行介紹。說明:這里的步驟實(shí)現(xiàn)和語言無關(guān),也就是說,這個(gè)步驟適用于各種語言實(shí)現(xiàn),不局限于 Java 語言。 (一) 客戶端網(wǎng)絡(luò)編程步驟 客戶端 (Client)是指網(wǎng)絡(luò)編程中首先發(fā)起連接的程序,客戶端一般實(shí)現(xiàn)程 序界面和基本邏輯實(shí)現(xiàn),成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 12 在進(jìn)行實(shí)際的客戶端編程時(shí),無論客戶端復(fù)雜還是簡(jiǎn)單,以及客戶端實(shí)現(xiàn)的方式,客戶端的編程主要由三個(gè)步驟實(shí)現(xiàn): 建立網(wǎng)絡(luò)連接 客戶端網(wǎng)絡(luò)編程的第一步都是建立網(wǎng)絡(luò)連接。在建立網(wǎng)絡(luò)連接時(shí)需要指定連接到的服務(wù)器的 IP地址和端口號(hào),建立完成以后,會(huì)形成一條虛擬的連接,后續(xù)的操作就可以通過該連接實(shí)現(xiàn)數(shù)據(jù)交換了。 交換數(shù)據(jù) 連接建立以后,就可以通過這個(gè)連接交換數(shù)據(jù)了。交換數(shù)據(jù)嚴(yán)格按照請(qǐng)求響應(yīng)模型進(jìn)行,由客戶端發(fā)送一個(gè)請(qǐng)求數(shù)據(jù)到服務(wù)器,服務(wù)器反饋一個(gè)響應(yīng)數(shù)據(jù)給客戶端,如果客戶端不發(fā)送請(qǐng)求則服務(wù)器端 就不響應(yīng)。根據(jù)邏輯需要,可以多次交換數(shù)據(jù),但是還是必須遵循請(qǐng)求響應(yīng)模型。 關(guān)閉網(wǎng)絡(luò)連接 在數(shù)據(jù)交換完成以后,關(guān)閉網(wǎng)絡(luò)連接,釋放程序占用的端口、內(nèi)存等系統(tǒng)資源,結(jié)束網(wǎng)絡(luò)編程。 最基本的步驟一般都是這三個(gè)步驟,在實(shí)際實(shí)現(xiàn)時(shí),步驟 2 會(huì)出現(xiàn)重復(fù),在進(jìn)行代碼組織時(shí),由于網(wǎng)絡(luò)編程是比較耗時(shí)的操作,所以一般開啟專門的現(xiàn)場(chǎng)進(jìn)行網(wǎng)絡(luò)通訊。 (二) 服務(wù)器端網(wǎng)絡(luò)編程步驟 服務(wù)器端 (Server)是指在網(wǎng)絡(luò)編程中被動(dòng)等待連接的程序,服務(wù)器端一般實(shí)現(xiàn)程序的核心邏輯以及數(shù)據(jù)存儲(chǔ)等核心功能。服務(wù)器端的編程步驟和客戶端不同,是由四個(gè) 步驟實(shí)現(xiàn),依次是: 監(jiān)聽端口 服務(wù)器端屬于被動(dòng)等待連接,所以服務(wù)器端啟動(dòng)以后,不需要發(fā)起連接,而只需要監(jiān)聽本地計(jì)算機(jī)的某個(gè)固定端口即可。這個(gè)端口就是服務(wù)器端開放給客戶端的端口,服務(wù)器端程序運(yùn)行的本地計(jì)算機(jī)的 IP 地址就是服務(wù)器端程序的 IP 地址。 獲得連接 當(dāng)客戶端連接到服務(wù)器端時(shí),服務(wù)器端就可以獲得一個(gè)連接,這個(gè)連接包含客戶端的信息,例如客戶端 IP 地址等等,服務(wù)器端和客戶端也通過該連接進(jìn)行數(shù)據(jù)交換。一般在服務(wù)器端編程中,當(dāng)獲得連接時(shí),需要開啟專門的線程處理該連接,每個(gè)連接都由獨(dú)立的線程實(shí)現(xiàn)。 交換數(shù)據(jù) 服務(wù)器端通過獲得的連接進(jìn)行數(shù)據(jù)交換。服務(wù)器端的數(shù)據(jù)交換步驟是首先接收客戶端發(fā)送過來的數(shù)據(jù),然后進(jìn)行邏輯處理,再把處理以后的結(jié)果數(shù)據(jù)發(fā)送給客戶端。簡(jiǎn)單來說,就是先接收再發(fā)送,這個(gè)和客戶端的數(shù)據(jù)交換數(shù)序不同。其實(shí),服務(wù)器端獲得的連接和客戶端連接是一樣的,只是數(shù)據(jù)交換的步驟不同。當(dāng)然,服務(wù)器端的數(shù)據(jù)交換也是可以多次進(jìn)行的。在數(shù)據(jù)交換完成以后,關(guān)成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 13 閉和客戶端的連接。 關(guān)閉連接 當(dāng)服務(wù)器程序關(guān)閉時(shí),需要關(guān)閉服務(wù)器端,通過關(guān)閉服務(wù)器端使得服務(wù)器監(jiān)聽的端口以及占用的內(nèi)存可以釋放出來,實(shí)現(xiàn)了連接的關(guān)閉。 Java 網(wǎng)絡(luò)編程技術(shù) Java 語言是在網(wǎng)絡(luò)環(huán)境下誕生的,所以 Java 語言雖然不能說是對(duì)于網(wǎng)絡(luò)編程的支持最好的語言,但是必須說是一種對(duì)于網(wǎng)絡(luò)編程提供良好支持的語言,使用 Java 語言進(jìn)行網(wǎng)絡(luò)編程將是一件比較輕松的工作。 和網(wǎng)絡(luò)編程有關(guān)的基本 API 位于 包中,該包中包含了基本的網(wǎng)絡(luò)編程實(shí)現(xiàn),該包是網(wǎng)絡(luò)編程的基礎(chǔ)。該包中既包含基礎(chǔ)的網(wǎng)絡(luò)編程類,也包含封裝后的專門處理 WEB 相關(guān)的處理類。在本章中,將只介紹基礎(chǔ)的網(wǎng)絡(luò)編程類。 IAddress 類。該類的功能是代表一個(gè) IP 地址,并且將 IP 地址和域 名相關(guān)的操作方法包含在該類的內(nèi)部。 按照前面的介紹,網(wǎng)絡(luò)通訊的方式有 TCP 和 UDP 兩種,其中 TCP 方式的網(wǎng)絡(luò)通訊是指在通訊的過程中保持連接,有點(diǎn)類似于打電話,只需要撥打一次號(hào)碼 (建立一次網(wǎng)絡(luò)連接 ),就可以多次通話(多次傳輸數(shù)據(jù) )。這樣方式在實(shí)際的網(wǎng)絡(luò)編程中,由于傳輸可靠,類 似于打電話,如果甲給乙打電話,乙說沒有聽清楚讓甲重復(fù)一遍,直到 聽清楚為止,實(shí)際的網(wǎng)絡(luò)傳輸也是這樣,如果發(fā)送的一方發(fā)送的數(shù)據(jù)接收方覺得有問題,則網(wǎng)絡(luò)底層會(huì)自動(dòng)要求發(fā)送方重發(fā),直到接收方收到為止。 在 Java 語言中,對(duì)于 TCP 方式的網(wǎng)絡(luò)編程提 供了良好的支持,在實(shí)際實(shí)現(xiàn)時(shí),以 類代表客戶端連接,以 類代表服務(wù)器端連接。在進(jìn)行網(wǎng)絡(luò)編程時(shí),底層網(wǎng)絡(luò)通訊的細(xì)節(jié)已經(jīng)實(shí)現(xiàn)了比較高的封裝,所以在程序員實(shí)際編程時(shí),只需要指定 IP 地址和端口號(hào)碼就可以建立連接了。正是由于這種高度的封裝,一方面簡(jiǎn)化了 Java 語言網(wǎng)絡(luò)編程的難度,另外也使得使用 Java 語言進(jìn)行網(wǎng)絡(luò)編程時(shí)無法深入到網(wǎng)絡(luò)的底層,所以使用 Java 語言進(jìn)行網(wǎng)絡(luò)底層系統(tǒng)編程很困難,具體點(diǎn)說, Java 語言無法實(shí)現(xiàn)底層的網(wǎng)絡(luò)嗅探以及獲得 IP 包結(jié)構(gòu)等 信息。但是由于 Java 語言的網(wǎng)絡(luò)編程比較簡(jiǎn)單,所以還是獲得了廣泛的使用。 在使用 TCP 方式進(jìn)行網(wǎng)絡(luò)編程時(shí),需要按照前面介紹的網(wǎng)絡(luò)編程的步驟進(jìn)行,下面分別介紹一下在 Java 語言中客戶端和服務(wù)器端的實(shí)現(xiàn)步驟。 在客戶端網(wǎng)絡(luò)編程中,首先需要建立連接,在 Java API 中以 類的對(duì)象代表網(wǎng)絡(luò)連接,所以建立客戶端網(wǎng)絡(luò)連接,也就是創(chuàng)建 Socket 類型的對(duì)象,該對(duì)象代表網(wǎng)絡(luò)連接,示例如下: Socket socket1 = new Socket(“”,10000)。 成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 14 Socket socket2 = new Socket(“”,80)。 上面的代碼中, socket1 實(shí)現(xiàn)的是連接到 IP 地址是 的計(jì)算機(jī)的 10000 號(hào)端口,而socket2 實(shí)現(xiàn)的是連接到域名是 的計(jì)算機(jī)的 80 號(hào)端口,至于底層網(wǎng)絡(luò)如何實(shí)現(xiàn)建立連接,對(duì)于程序員來說是完全透明的。如果建立連接時(shí),本機(jī)網(wǎng)絡(luò)不通,或服務(wù)器端程序未開啟,則會(huì)拋出異常。 連接一旦建立,則完成了客戶端編程的第一步,緊接著的步驟就是按照“請(qǐng) 求 響應(yīng)”模型進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換,在 Java 語言中,數(shù)據(jù)傳輸功能由 Java IO 實(shí)現(xiàn),也就是說只需要從連接中獲得輸入流和輸出流即可,然后將需要發(fā)送的數(shù)據(jù)寫入連接對(duì)象的輸出流中,在發(fā)送完成以后從輸入流中讀取數(shù)據(jù)即可。示例代碼如下: OutputStream os = ()。 //獲得輸出流 InputStream is = ()。 //獲得輸入流 上面的代碼中,分別從 socket1 這個(gè)連接對(duì)象獲得了輸出流和輸入流對(duì)象,在整個(gè)網(wǎng)絡(luò)編程中,后續(xù)的數(shù)據(jù)交換就變成了 IO 操作,也就是遵循“請(qǐng)求 響應(yīng)”模型的規(guī)定,先向輸出流中寫入數(shù)據(jù),這些數(shù)據(jù)會(huì)被系統(tǒng)發(fā)送出去,然后在從輸入流中讀取服務(wù)器端的反饋信息,這樣就完成了一次數(shù)據(jù)交換過程,當(dāng)然這個(gè)數(shù)據(jù)交換過程可以多次進(jìn)行。這里獲得的只是最基本的輸出流和輸入流對(duì)象,還可以根據(jù)前面學(xué)習(xí)到的 IO 知識(shí),使用流的嵌套將這些獲得到的基本流對(duì)象轉(zhuǎn)換成需要的裝飾流對(duì)象,從而方便數(shù)據(jù)的操作。 最后當(dāng)數(shù)據(jù)交換完成以后,關(guān)閉網(wǎng)絡(luò)連接,釋放 網(wǎng)絡(luò)連接占用的系統(tǒng)端口和內(nèi)存等資源, 完成網(wǎng)絡(luò)操作,示例代碼如 : ()。 正則表達(dá)式 由于要根據(jù) 用戶所提供的 對(duì) 爬蟲獲取到的 URL 和網(wǎng)頁內(nèi)容進(jìn)行分析 。 此時(shí), 正則表達(dá)式 就成為了我們最好的選擇。 正則表達(dá)式 特點(diǎn) 正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來表達(dá)對(duì)字符串的一種過濾邏輯。 通過 給定一個(gè)正則表達(dá)式和另一個(gè)字符串,我們可以達(dá)到如下的目的: (稱作“匹配”); ,從字符串中獲取我們想要的特定部分。 正則表達(dá)式的特點(diǎn)是: 、邏輯性和功能性非常的強(qiáng); 成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 15 。 符號(hào)功能 正則表達(dá)式由一些 字符 和 元字符 ( met characters)組成。 普通 字符 包括大小寫的字母和數(shù)字,而 元字符 則具有特殊的含義 。 通過使用元字符,我們就能夠從一串字符中篩選和提取我們先要的信息了。而 Java 中通過了 Pattern 類,對(duì)正則表達(dá)式的使用提供了支持。 網(wǎng)頁搜索策略 在抓取網(wǎng)頁的時(shí)候,網(wǎng)頁的抓取策略可以 分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種。深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲的陷入 (trapped)問題,目前常見的是廣度優(yōu)先和最佳優(yōu)先方法。 廣度優(yōu)先搜索 寬度優(yōu)先搜索算法 (又稱廣度優(yōu)先搜索 ) 是最簡(jiǎn)便的圖的搜索算法之一 ,這一算法也是很多重要的圖的算法的原型 。 Dijkstra 單源最短路徑算法和 Prim 最小生成樹算法都采用了和寬度優(yōu)先搜索類似的思想。寬度優(yōu)先搜索算法是沿著樹的寬度遍歷樹的節(jié)點(diǎn) , 如果發(fā)現(xiàn)目標(biāo) , 則算法中止。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單 , 屬于盲目搜索 。 在目前為覆蓋盡可能多的網(wǎng)頁。一般使用 寬度優(yōu)先搜索方法 。 也有很多研究將寬度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲中 . 其基本思想是認(rèn)為與初始 URL 在一定鏈接距離內(nèi)的網(wǎng)頁具有主題相關(guān)性的概率很大 。 下面先來看看圖的寬度優(yōu)先遍歷過程。圖的寬度優(yōu)先遍歷 (BFS)算法是一個(gè)分層搜索的過程,和樹的層序遍歷算法相同。在圖中選中一個(gè)節(jié)點(diǎn),作為起始節(jié)點(diǎn),然后按照層次遍歷的方式,一層一層地進(jìn)行訪問。圖的寬度優(yōu)先遍歷需要一個(gè)隊(duì)列作為保存當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。具體的算法 (1) 頂點(diǎn) V 入隊(duì)列。 (2) 當(dāng)隊(duì)列非空時(shí)繼續(xù)執(zhí)行,否則算法為空。 (3) 出隊(duì)列,獲得隊(duì)頭節(jié)點(diǎn) V,訪問頂點(diǎn) V 并標(biāo)記 V 已經(jīng)被訪問。 (4) 查找頂點(diǎn) V 的第一個(gè)鄰接頂點(diǎn) col。 (5) 若 V 的鄰接頂點(diǎn) col 未被訪問過,則 col 進(jìn)隊(duì)列。 (6) 繼續(xù)查找 V 的其他鄰接頂點(diǎn) col,轉(zhuǎn)到步驟 (5),若 V 的所有鄰接頂點(diǎn)都已經(jīng)被訪問過,則轉(zhuǎn)到步驟 (2)。 這個(gè)方法有個(gè)優(yōu)點(diǎn)是 網(wǎng)絡(luò)蜘蛛在設(shè)計(jì)的時(shí)候比較容易。本課題選擇使用廣度優(yōu)先策略進(jìn)行網(wǎng)頁抓取 。 深度 優(yōu)先搜索 深度優(yōu)先搜索所遵循的搜索策略是盡可能“深”地搜索圖 . 在深度優(yōu)先搜索中 , 對(duì)于最新發(fā)現(xiàn)的頂點(diǎn) , 如果它還有以此為起點(diǎn)而未探測(cè)到的邊 , 就 沿此邊繼續(xù) 下去 . 當(dāng)結(jié)點(diǎn) v 的所有邊都己被探尋成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 16 過 , 搜索將回溯到發(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)的 。 最佳 優(yōu)先搜索 最佳優(yōu)先搜索策略按照一定的網(wǎng)頁分析算法,預(yù)測(cè)候選 URL 與目標(biāo)網(wǎng)頁的相似度,或與主題的相關(guān)性,并選取評(píng)價(jià)最好的一個(gè)或幾個(gè) URL 進(jìn)行抓 取。它只訪問經(jīng)過網(wǎng)頁分析算法預(yù)測(cè)為“有用”的網(wǎng)頁。存在的一個(gè)問題是,在爬蟲抓取路徑上的很多相關(guān)網(wǎng)頁可能被忽略,因?yàn)樽罴褍?yōu)先策略是一種局部最優(yōu)搜索算法。因此需要將最佳優(yōu)先結(jié)合具體的應(yīng)用進(jìn)行改進(jìn),以跳出局部最優(yōu)點(diǎn)。 成都學(xué)院學(xué)士學(xué)位論文(設(shè)計(jì)) 17 3 需求分析和模型 設(shè)計(jì) 網(wǎng)絡(luò)爬蟲的定義 定義 1:網(wǎng)絡(luò)爬蟲是一個(gè)自動(dòng)提取網(wǎng)頁的程序,它為搜索引擎從 Web 上下載網(wǎng)頁,是搜索引擎的重要組成部分。通用網(wǎng)絡(luò)爬蟲從一個(gè)或若干初始網(wǎng)頁的 URL 開始,獲得初始網(wǎng)頁上的 URL 列表;在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上 抽取新的 URL 放入待爬行隊(duì)列,直到滿足系統(tǒng)的停止條件。 定義 2:主題網(wǎng)絡(luò)爬蟲就是根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留主題相關(guān)的鏈接并將其放入待抓取的 URL 隊(duì)列中;然后根據(jù)一定的搜索策略從
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1