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

正文內(nèi)容

基于多線(xiàn)程的網(wǎng)絡(luò)爬蟲(chóng)的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文(編輯修改稿)

2025-07-24 20:16 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 ble接口時(shí),不能直接創(chuàng)建所需類(lèi)的對(duì)象并運(yùn)行它,而是必須從Thread類(lèi)的一個(gè)實(shí)例內(nèi)部運(yùn)行它。 從上面兩種創(chuàng)建線(xiàn)程的方法可以看出,如果繼承Thread類(lèi),則這個(gè)類(lèi)本身可以調(diào)用start方法,也就是說(shuō)將這個(gè)繼承了Thread的類(lèi)當(dāng)作目標(biāo)對(duì)象;而如果實(shí)現(xiàn)Runnable接口,則這個(gè)類(lèi)必須被當(dāng)作其他線(xiàn)程的目標(biāo)對(duì)象。 JAVA的線(xiàn)程從產(chǎn)生到消失,可分為5種狀態(tài):新建(New),可運(yùn)行(Runnable),運(yùn)行(Running),阻塞(Blocked)以及死亡(Dead)。其中,Running狀態(tài)并非屬于JAVA規(guī)范中定義的線(xiàn)程狀態(tài),也就是說(shuō),在JAVA規(guī)范中,并沒(méi)有將運(yùn)行(Running)狀態(tài)真正的設(shè)置為一個(gè)狀態(tài),它屬于可運(yùn)行狀態(tài)的一種。 當(dāng)使用new來(lái)新建一個(gè)線(xiàn)程時(shí),它處于New狀態(tài),這個(gè)時(shí)候,線(xiàn)程并未進(jìn)行任何操作。然后,調(diào)用線(xiàn)程的start()方法,來(lái)向線(xiàn)程調(diào)度程序(通常是JVM或操作系統(tǒng))注冊(cè)一個(gè)線(xiàn)程,這個(gè)時(shí)候,這個(gè)線(xiàn)程一切就緒,就等待CPU時(shí)間了。 線(xiàn)程調(diào)度程序根據(jù)調(diào)度策略來(lái)調(diào)度不同的線(xiàn)程,調(diào)用線(xiàn)程的run方法給已經(jīng)注冊(cè)的各個(gè)線(xiàn)程以執(zhí)行的機(jī)會(huì),被調(diào)度執(zhí)行的線(xiàn)程進(jìn)入運(yùn)行(Running)狀態(tài)。當(dāng)線(xiàn)程的run方法運(yùn)行完畢,線(xiàn)程將被拋棄,進(jìn)入死亡狀態(tài)。你不能調(diào)用restart方法來(lái)重新開(kāi)始一個(gè)處于死亡狀態(tài)的線(xiàn)程,但是,你可以調(diào)用處于死亡狀態(tài)的線(xiàn)程對(duì)象的各個(gè)方法。 如果線(xiàn)程在運(yùn)行(Running)狀態(tài)中因?yàn)镮/O阻塞,等待鍵盤(pán)鍵入,調(diào)用了線(xiàn)程的sleep方法,調(diào)用了對(duì)象的wait()方法等,則線(xiàn)程將進(jìn)入阻塞狀態(tài),直到這些阻塞原因被解除,如:IO完成,鍵盤(pán)輸入了數(shù)據(jù),調(diào)用sleep方法后的睡眠時(shí)間到或者其他線(xiàn)程調(diào)用了對(duì)象的notify或notifyAll方法來(lái)喚醒這個(gè)因?yàn)榈却枞木€(xiàn)程等,線(xiàn)程將返回到Runnable狀態(tài)重新等待調(diào)度程序調(diào)度,注意,被阻塞的線(xiàn)程不會(huì)直接返回到Running狀態(tài),而是重新回到Runnable狀態(tài)等待線(xiàn)程調(diào)度程序的調(diào)用。 線(xiàn)程調(diào)度程序會(huì)根據(jù)調(diào)度情況,將正在運(yùn)行中的線(xiàn)程設(shè)置為Runnable狀態(tài),例如,有一個(gè)比當(dāng)前運(yùn)行狀態(tài)線(xiàn)程更高運(yùn)行等級(jí)的線(xiàn)程進(jìn)入Runnable狀態(tài),就可能將當(dāng)前運(yùn)行的線(xiàn)程從Running狀態(tài)“踢出”,讓它回到Runnable狀態(tài)。Java線(xiàn)程會(huì)以以下三種方式之一結(jié)束: ()方法的末尾; ; ()方法。注意,因?yàn)檫@個(gè)方法會(huì)引起線(xiàn)程的安全問(wèn)題,已經(jīng)被不推薦使用了,所以,不要再程序調(diào)用這個(gè)方法。 當(dāng)同時(shí)運(yùn)行的相互獨(dú)立的線(xiàn)程需要共享數(shù)據(jù)并且需要考慮其他線(xiàn)程的狀態(tài)時(shí),就需要使用一套機(jī)制使得這些線(xiàn)程同步,避免在爭(zhēng)用資源時(shí)發(fā)生沖突,甚至發(fā)生死鎖。JAVA提供了多種機(jī)制以實(shí)現(xiàn)線(xiàn)程同步。多數(shù)JAVA同步是以對(duì)象鎖定為中心的。JAVA中從Object對(duì)象繼承來(lái)的每個(gè)對(duì)象都有一個(gè)單獨(dú)的鎖。由于JAVA中的每個(gè)對(duì)象都是從Object繼承來(lái)的。所以JAVA中的每個(gè)對(duì)象都有自己的鎖。這樣使它在共享的線(xiàn)程之間可以相互協(xié)調(diào)。在JAVA中實(shí)現(xiàn)線(xiàn)程同步的另一個(gè)方法是通過(guò)使用synchronized關(guān)鍵字。JAVA使用synchronized關(guān)鍵字來(lái)定義程序中要求線(xiàn)程同步的部分。synchronized關(guān)鍵字實(shí)現(xiàn)的基本操作是把每個(gè)需要線(xiàn)程同步的部分定義為一個(gè)臨界區(qū),在臨界區(qū)中同一時(shí)刻只有一個(gè)線(xiàn)程被執(zhí)行。 Java 網(wǎng)絡(luò)編程 網(wǎng)絡(luò)編程就是兩個(gè)或多個(gè)設(shè)備之間的數(shù)據(jù)交換,其實(shí)更具體的說(shuō),網(wǎng)絡(luò)編程就是兩個(gè)或多個(gè)程序之間的數(shù)據(jù)交換,和普通的單機(jī)程序相比,網(wǎng)絡(luò)程序最大的不同就是需要交換數(shù)據(jù)的程序運(yùn)行在不同的計(jì)算機(jī)上,這樣就造成了數(shù)據(jù)交換的復(fù)雜。雖然通過(guò)IP地址和端口可以找到網(wǎng)絡(luò)上運(yùn)行的一個(gè)程序,但是如果需要進(jìn)行網(wǎng)絡(luò)編程,則還需要了解網(wǎng)絡(luò)通訊的過(guò)程。 TCP/IPTransmission Control Protocol/Internet Protocol的簡(jiǎn)寫(xiě),中譯名為傳輸控制協(xié)議/因特網(wǎng)互聯(lián)協(xié)議,又名網(wǎng)絡(luò)通訊協(xié)議,是Internet最基本的協(xié)議、Internet國(guó)際互聯(lián)網(wǎng)絡(luò)的基礎(chǔ),由網(wǎng)絡(luò)層的IP協(xié)議和傳輸層的TCP協(xié)議組成。TCP/IP 定義了電子設(shè)備如何連入因特網(wǎng),以及數(shù)據(jù)如何在它們之間傳輸?shù)臉?biāo)準(zhǔn)。協(xié)議采用了4層的層級(jí)結(jié)構(gòu),每一層都呼叫它的下一層所提供的網(wǎng)絡(luò)來(lái)完成自己的需求。通俗而言:TCP負(fù)責(zé)發(fā)現(xiàn)傳輸?shù)膯?wèn)題,有問(wèn)題就發(fā)出信號(hào),要求重新傳輸,直到所有數(shù)據(jù)安全正確地傳輸?shù)侥康牡?。而IP是給因特網(wǎng)的每一臺(tái)電腦規(guī)定一個(gè)地址。TCP/IP協(xié)議不是TCP和IP這兩個(gè)協(xié)議的合稱(chēng),而是指因特網(wǎng)整個(gè)TCP/IP協(xié)議族。而最主要的是TCP協(xié)議和IP協(xié)議。(摘自百度百科[5])本課題將采用IPv4協(xié)議作為開(kāi)發(fā)基礎(chǔ)。IPv4網(wǎng)際協(xié)議版本4(Internet Protocol version 4)。IPv4(通常稱(chēng)之IP)自20世紀(jì)80年代早期以來(lái)一直是網(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é)議,為用戶(hù)進(jìn)程提供可靠的全雙工字節(jié)流。TCP套接字是一種流套接字(stream socket)。TCP關(guān)心確認(rèn)、超時(shí)和重傳之類(lèi)的細(xì)節(jié)。大多數(shù)因特網(wǎng)應(yīng)用程序使用TCP。TCP的可靠連接得益于它的三次握手原理。TCP協(xié)議真是通過(guò)“三次握手”的方式保證了傳輸?shù)目煽啃?。本課題將會(huì)采用該種協(xié)議為基礎(chǔ),進(jìn)行編程。 網(wǎng)絡(luò)編程步驟無(wú)論使用TCP方式還是UDP方式進(jìn)行網(wǎng)絡(luò)通訊,網(wǎng)絡(luò)編程都是由客戶(hù)端和服務(wù)器端組成。當(dāng)然,B/S結(jié)構(gòu)的編程中只需要實(shí)現(xiàn)服務(wù)器端即可。所以,下面介紹網(wǎng)絡(luò)編程的步驟時(shí),均以C/S結(jié)構(gòu)為基礎(chǔ)進(jìn)行介紹。說(shuō)明:這里的步驟實(shí)現(xiàn)和語(yǔ)言無(wú)關(guān),也就是說(shuō),這個(gè)步驟適用于各種語(yǔ)言實(shí)現(xiàn),不局限于Java語(yǔ)言。(一)客戶(hù)端網(wǎng)絡(luò)編程步驟客戶(hù)端(Client)是指網(wǎng)絡(luò)編程中首先發(fā)起連接的程序,客戶(hù)端一般實(shí)現(xiàn)程序界面和基本邏輯實(shí)現(xiàn),在進(jìn)行實(shí)際的客戶(hù)端編程時(shí),無(wú)論客戶(hù)端復(fù)雜還是簡(jiǎn)單,以及客戶(hù)端實(shí)現(xiàn)的方式,客戶(hù)端的編程主要由三個(gè)步驟實(shí)現(xiàn):建立網(wǎng)絡(luò)連接客戶(hù)端網(wǎng)絡(luò)編程的第一步都是建立網(wǎng)絡(luò)連接。在建立網(wǎng)絡(luò)連接時(shí)需要指定連接到的服務(wù)器的IP地址和端口號(hào),建立完成以后,會(huì)形成一條虛擬的連接,后續(xù)的操作就可以通過(guò)該連接實(shí)現(xiàn)數(shù)據(jù)交換了。交換數(shù)據(jù)連接建立以后,就可以通過(guò)這個(gè)連接交換數(shù)據(jù)了。交換數(shù)據(jù)嚴(yán)格按照請(qǐng)求響應(yīng)模型進(jìn)行,由客戶(hù)端發(fā)送一個(gè)請(qǐng)求數(shù)據(jù)到服務(wù)器,服務(wù)器反饋一個(gè)響應(yīng)數(shù)據(jù)給客戶(hù)端,如果客戶(hù)端不發(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í)的操作,所以一般開(kāi)啟專(zhuān)門(mén)的現(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ù)器端的編程步驟和客戶(hù)端不同,是由四個(gè)步驟實(shí)現(xiàn),依次是:監(jiān)聽(tīng)端口服務(wù)器端屬于被動(dòng)等待連接,所以服務(wù)器端啟動(dòng)以后,不需要發(fā)起連接,而只需要監(jiān)聽(tīng)本地計(jì)算機(jī)的某個(gè)固定端口即可。這個(gè)端口就是服務(wù)器端開(kāi)放給客戶(hù)端的端口,服務(wù)器端程序運(yùn)行的本地計(jì)算機(jī)的IP地址就是服務(wù)器端程序的IP地址。獲得連接當(dāng)客戶(hù)端連接到服務(wù)器端時(shí),服務(wù)器端就可以獲得一個(gè)連接,這個(gè)連接包含客戶(hù)端的信息,例如客戶(hù)端IP地址等等,服務(wù)器端和客戶(hù)端也通過(guò)該連接進(jìn)行數(shù)據(jù)交換。一般在服務(wù)器端編程中,當(dāng)獲得連接時(shí),需要開(kāi)啟專(zhuān)門(mén)的線(xiàn)程處理該連接,每個(gè)連接都由獨(dú)立的線(xiàn)程實(shí)現(xiàn)。交換數(shù)據(jù)服務(wù)器端通過(guò)獲得的連接進(jìn)行數(shù)據(jù)交換。服務(wù)器端的數(shù)據(jù)交換步驟是首先接收客戶(hù)端發(fā)送過(guò)來(lái)的數(shù)據(jù),然后進(jìn)行邏輯處理,再把處理以后的結(jié)果數(shù)據(jù)發(fā)送給客戶(hù)端。簡(jiǎn)單來(lái)說(shuō),就是先接收再發(fā)送,這個(gè)和客戶(hù)端的數(shù)據(jù)交換數(shù)序不同。其實(shí),服務(wù)器端獲得的連接和客戶(hù)端連接是一樣的,只是數(shù)據(jù)交換的步驟不同。當(dāng)然,服務(wù)器端的數(shù)據(jù)交換也是可以多次進(jìn)行的。在數(shù)據(jù)交換完成以后,關(guān)閉和客戶(hù)端的連接。關(guān)閉連接當(dāng)服務(wù)器程序關(guān)閉時(shí),需要關(guān)閉服務(wù)器端,通過(guò)關(guān)閉服務(wù)器端使得服務(wù)器監(jiān)聽(tīng)的端口以及占用的內(nèi)存可以釋放出來(lái),實(shí)現(xiàn)了連接的關(guān)閉。 Java網(wǎng)絡(luò)編程技術(shù)Java語(yǔ)言是在網(wǎng)絡(luò)環(huán)境下誕生的,所以Java語(yǔ)言雖然不能說(shuō)是對(duì)于網(wǎng)絡(luò)編程的支持最好的語(yǔ)言,但是必須說(shuō)是一種對(duì)于網(wǎng)絡(luò)編程提供良好支持的語(yǔ)言,使用Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程將是一件比較輕松的工作。,該包中包含了基本的網(wǎng)絡(luò)編程實(shí)現(xiàn),該包是網(wǎng)絡(luò)編程的基礎(chǔ)。該包中既包含基礎(chǔ)的網(wǎng)絡(luò)編程類(lèi),也包含封裝后的專(zhuān)門(mén)處理WEB相關(guān)的處理類(lèi)。在本章中,將只介紹基礎(chǔ)的網(wǎng)絡(luò)編程類(lèi)。InetAddress類(lèi)。該類(lèi)的功能是代表一個(gè)IP地址,并且將IP地址和域名相關(guān)的操作方法包含在該類(lèi)的內(nèi)部。按照前面的介紹,網(wǎng)絡(luò)通訊的方式有TCP和UDP兩種,其中TCP方式的網(wǎng)絡(luò)通訊是指在通訊的過(guò)程中保持連接,有點(diǎn)類(lèi)似于打電話(huà),只需要撥打一次號(hào)碼(建立一次網(wǎng)絡(luò)連接),就可以多次通話(huà)(多次傳輸數(shù)據(jù))。這樣方式在實(shí)際的網(wǎng)絡(luò)編程中,由于傳輸可靠,類(lèi)似于打電話(huà),如果甲給乙打電話(huà),乙說(shuō)沒(méi)有聽(tīng)清楚讓甲重復(fù)一遍,直到聽(tīng)清楚為止,實(shí)際的網(wǎng)絡(luò)傳輸也是這樣,如果發(fā)送的一方發(fā)送的數(shù)據(jù)接收方覺(jué)得有問(wèn)題,則網(wǎng)絡(luò)底層會(huì)自動(dòng)要求發(fā)送方重發(fā),直到接收方收到為止。在Java語(yǔ)言中,對(duì)于TCP方式的網(wǎng)絡(luò)編程提供了良好的支持,在實(shí)際實(shí)現(xiàn)時(shí)。在進(jìn)行網(wǎng)絡(luò)編程時(shí),底層網(wǎng)絡(luò)通訊的細(xì)節(jié)已經(jīng)實(shí)現(xiàn)了比較高的封裝,所以在程序員實(shí)際編程時(shí),只需要指定IP地址和端口號(hào)碼就可以建立連接了。正是由于這種高度的封裝,一方面簡(jiǎn)化了Java語(yǔ)言網(wǎng)絡(luò)編程的難度,另外也使得使用Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程時(shí)無(wú)法深入到網(wǎng)絡(luò)的底層,所以使用Java語(yǔ)言進(jìn)行網(wǎng)絡(luò)底層系統(tǒng)編程很困難,具體點(diǎn)說(shuō),Java語(yǔ)言無(wú)法實(shí)現(xiàn)底層的網(wǎng)絡(luò)嗅探以及獲得IP包結(jié)構(gòu)等信息。但是由于Java語(yǔ)言的網(wǎng)絡(luò)編程比較簡(jiǎn)單,所以還是獲得了廣泛的使用。在使用TCP方式進(jìn)行網(wǎng)絡(luò)編程時(shí),需要按照前面介紹的網(wǎng)絡(luò)編程的步驟進(jìn)行,下面分別介紹一下在Java語(yǔ)言中客戶(hù)端和服務(wù)器端的實(shí)現(xiàn)步驟。在客戶(hù)端網(wǎng)絡(luò)編程中,首先需要建立連接,在Java ,所以建立客戶(hù)端網(wǎng)絡(luò)連接,也就是創(chuàng)建Socket類(lèi)型的對(duì)象,該對(duì)象代表網(wǎng)絡(luò)連接,示例如下: Socket socket1 = new Socket(“”,10000)。 Socket socket2 = new Socket(“”,80)。上面的代碼中,,至于底層網(wǎng)絡(luò)如何實(shí)現(xiàn)建立連接,對(duì)于程序員來(lái)說(shuō)是完全透明的。如果建立連接時(shí),本機(jī)網(wǎng)絡(luò)不通,或服務(wù)器端程序未開(kāi)啟,則會(huì)拋出異常。連接一旦建立,則完成了客戶(hù)端編程的第一步,緊接著的步驟就是按照“請(qǐng)求響應(yīng)”模型進(jìn)行網(wǎng)絡(luò)數(shù)據(jù)交換,在Java語(yǔ)言中,數(shù)據(jù)傳輸功能由Java IO實(shí)現(xiàn),也就是說(shuō)只需要從連接中獲得輸入流和輸出流即可,然后將需要發(fā)送的數(shù)據(jù)寫(xiě)入連接對(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ī)定,先向輸出流中寫(xiě)入數(shù)據(jù),這些數(shù)據(jù)會(huì)被系統(tǒng)發(fā)送出去,然后在從輸入流中讀取服務(wù)器端的反饋信息,這樣就完成了一次數(shù)據(jù)交換過(guò)程,當(dāng)然這個(gè)數(shù)據(jù)交換過(guò)程可以多次進(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ù)用戶(hù)所提供的對(duì)爬蟲(chóng)獲取到的URL和網(wǎng)頁(yè)內(nèi)容進(jìn)行分析。此時(shí),正則表達(dá)式就成為了我們最好的選擇。 正則表達(dá)式特點(diǎn)正則表達(dá)式是對(duì)字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個(gè)“規(guī)則字符串”,這個(gè)“規(guī)則字符串”用來(lái)表達(dá)對(duì)字符串的一種過(guò)濾邏輯。通過(guò)給定一個(gè)正則表達(dá)式和另一個(gè)字符串,我們可以達(dá)到如下的目的:(稱(chēng)作“匹配”);,從字符串中獲取我們想要的特定部分。正則表達(dá)式的特點(diǎn)是:、邏輯性和功能性非常的強(qiáng);。正則表達(dá)式由一些字符和元字符(met characters)組成。普通字符包括大小寫(xiě)的字母和數(shù)字,而元字符則具有特殊的含義。通過(guò)使用元字符,我們就能夠從一串字符中篩選和提取我們先要的信息了。而Java中通過(guò)了Pattern類(lèi),對(duì)正則表達(dá)式的使用提供了支持。 網(wǎng)頁(yè)搜索策略 在抓取網(wǎng)頁(yè)的時(shí)候,網(wǎng)頁(yè)的抓取策略可以分為深度優(yōu)先、廣度優(yōu)先和最佳優(yōu)先三種。深度優(yōu)先在很多情況下會(huì)導(dǎo)致爬蟲(chóng)的陷入(trapped)問(wèn)題,目前常見(jiàn)的是廣度優(yōu)先和最佳優(yōu)先方法。 寬度優(yōu)先搜索算法(又稱(chēng)廣度優(yōu)先搜索) 是最簡(jiǎn)便的圖的搜索算法之一,這一算法也是很多重要的圖的算法的原型。Dijkstra 單源最短路徑算法和Prim 最小生成樹(shù)算法都采用了和寬度優(yōu)先搜索類(lèi)似的思想。寬度優(yōu)先搜索算法是沿著樹(shù)的寬度遍歷樹(shù)的節(jié)點(diǎn), 如果發(fā)現(xiàn)目標(biāo),則算法中止。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單, 屬于盲目搜索。在目前為覆蓋盡可能多的網(wǎng)頁(yè)。一般使用寬度優(yōu)先搜索方法。也有很多研究將寬度優(yōu)先搜索策略應(yīng)用于聚焦爬蟲(chóng)中. 其基本思想是認(rèn)為與初始URL在一定鏈接距離內(nèi)的網(wǎng)頁(yè)具有主題相關(guān)性的概率很大。 下面先來(lái)看看圖的寬度優(yōu)先遍歷過(guò)程。圖的寬度優(yōu)先遍歷(BFS)算法是一個(gè)分層搜索的過(guò)程,和樹(shù)的層序遍歷算法相同。在圖中選中一個(gè)節(jié)點(diǎn),作為起始節(jié)點(diǎn),然后按照層次遍歷的方式,一層一層地進(jìn)行訪(fǎng)問(wèn)。圖的寬度優(yōu)先遍歷需要一個(gè)隊(duì)列作為保存當(dāng)前節(jié)點(diǎn)的子節(jié)點(diǎn)的數(shù)據(jù)結(jié)構(gòu)。具體的算法(1) 頂點(diǎn)V 入
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1