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

正文內(nèi)容

網(wǎng)絡(luò)爬蟲論word版(編輯修改稿)

2025-02-03 18:09 本頁面
 

【文章內(nèi)容簡介】 ux 操作系統(tǒng) ‖,它可能是由一個組織,公司或者個人發(fā)布的。通常來講,一個 Linux 發(fā)布版包括 Linux 內(nèi)核,將整個軟件安裝到計算機上的一套安裝工具,各種 GNU 軟件,其他的一些自由軟件,在一些特定的 Linux 發(fā)布版中也有一些專有軟件。發(fā)布版為許多不同的目的而制作,包括對不同計算機硬件結(jié)構(gòu)的支持,對一個具體區(qū) 域或語言的本地化,實時應(yīng)用,和嵌入式系統(tǒng)。目前,超過三百個發(fā)布版被積極的開發(fā),最普遍被使用的發(fā)布版有大約十二個。較為知名的有 Fedora, Ubuntu,Mageia,紅旗 Linux, CentOS 等。本程序所使用的開發(fā)操作系統(tǒng)是 Linux 中比較知名的CentOS。 軟件配置 在 CentOS Linux 中,本文主要用的開發(fā)軟件是 Vim。一般 Linux 的發(fā)行版都自帶Vim, Vim 是個可配置性極強的文本編輯器,可以進行高效的文本編輯。 Vim 常被稱作 ―程序員的編輯器 ‖,其功能如此強大以致許多人認為它就 是個完整的IDE。當然,它并不僅僅為程序員而生。面對各種文本編輯,無論是撰寫 還是編輯配置文件, Vim 都臻于完美。但是只有你自己配置之后才能變成適合于你自己的開發(fā)工具。 所以需要修改 Vim 的配置文件,常用的有(以下為簡單配置): ―不要使用 vi 的鍵盤模式,而是 vim 自己的: set nopatible history 文件中需要記錄的行數(shù): set history=100 ―語法高亮: syntax on ―為 C 程序提供自動縮進: 第二章 相關(guān)技術(shù)和工具綜述 7 set smartindent ―使用 C 樣式的縮進: set cindent ―制表符為 4: set tabstop=4 ―統(tǒng)一縮進為 4: set softtabstop=4 set shiftwidth=4 還有一點不能忽視,那就是安裝 GCC 編譯器,因為本文寫的所有代碼都是 C/C++格式的。雖說基本上每個發(fā)行版都已經(jīng)安裝了 GCC 編譯器,但不是很全,為了以防萬一,在終端下執(zhí)行了以下命令: $ yum –y install gcc $ yum –y install gccc++ $ yum install make 或者執(zhí)行 $ yum groupinstall ―Development Tools‖ 或者執(zhí)行 $ yum install gcc gccc++ kernel devel GCC 下編譯 .c 文件: gcc –o xx ,編譯 .cpp 文件只需把 gcc 改為 g++即可。 在多文件編譯的情況下,這樣的命令會很繁瑣,通常會寫一個或多個 Makefile 文件來解決這個問題,在本文的最后會講到。 廣東石油化工學院本科畢業(yè) (設(shè)計 )論文 : Linux 平臺下 C/C++網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn) 8 第三章 網(wǎng)絡(luò)爬蟲模型的分析和概要設(shè)計 網(wǎng)絡(luò)爬蟲的模型分析 網(wǎng)絡(luò)爬蟲框架參考的是一個叫 larbin 的開源爬蟲,它是由法國 的年輕人 Sebastien Ailleret 獨立開發(fā),用 C++語言實現(xiàn),其代碼可以直接在網(wǎng)上可以下載到。以下是本程序爬蟲使用的框架,看起來更像是主題爬蟲的框架。如圖 所示。 Q U E U E _ U R LP u s hQ U E U E _ U R L 為 空 / 其它 終 止 條 件P o p退 出Y e s抓 取 指 定 網(wǎng) 頁N o網(wǎng) 頁 分 析提 取 U R LA n a l y z eY e sS t o r e初 始 U R L存 儲 H t m l符 合 條 件 ( 不 重 復/ 包 含 關(guān) 鍵 字 )丟 棄N o 圖 31 網(wǎng)絡(luò)爬蟲的基本框架圖 首先建立 URL 任務(wù)列表隊列,即開始要爬取的 URL。由 URL 任務(wù)列表開始,根據(jù)預先設(shè)定的深度爬取網(wǎng)頁,同時判斷 URL 是否重復,按照一定算法和排序方式搜索頁面,然后對頁面按照一定算法進行分析,并提取相關(guān) URL,最后將所得 URL 返回任務(wù)列表隊列。之后將任務(wù)列表中 URL 重新開始爬取,從而使網(wǎng)絡(luò)爬蟲進行 循環(huán)工作。 網(wǎng)絡(luò)爬蟲的搜索策略 第三章 網(wǎng)絡(luò)爬蟲模型的分析和概要設(shè)計 9 本文的搜索策略為廣度優(yōu)先搜索策略。如下圖 32 所示。搜索過程為abcdefghijklmnop 這樣一個順序。 圖 32 廣度優(yōu)先搜索策略示意圖 ( 1)定義一個狀態(tài)結(jié)點 采用廣度優(yōu)先搜索算法解答問題時,需要構(gòu)造一個表明狀態(tài)特征和不同狀態(tài)之間關(guān)系的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)稱為結(jié)點。不同的問題需要用不同的數(shù)據(jù)結(jié)構(gòu)描述。 ( 2)確定結(jié)點的擴展規(guī)則 根據(jù)問題所給定的條件,從一個結(jié)點出發(fā),可以生成一個或多個新的結(jié)點,這個過程通常稱為擴展。結(jié)點之間的關(guān)系一般可以表示成一棵樹, 它被稱為解答樹。搜索算法的搜索過程實際上就是根據(jù)初始條件和擴展規(guī)則構(gòu)造一棵解答樹并尋找符合目標狀態(tài)的結(jié)點的過程。 廣度優(yōu)先搜索算法中,解答樹上結(jié)點的擴展是沿結(jié)點深度的 ―斷層 ‖進行,也就是說,結(jié)點的擴展是按它們接近起始結(jié)點的程度依次進行的。首先生成第一層結(jié)點,同時檢查目標結(jié)點是否在所生成的結(jié)點中,如果不在,則將所有的第一層結(jié)點逐一擴展,得到第二層結(jié)點,并檢查第二層結(jié)點是否包含目標結(jié)點 …… 對長度為 n+1 的任一結(jié)點進行擴展之前,必須先考慮長度為 n 的結(jié)點的每種可能的狀態(tài)。因此,對于同一層結(jié)點來說,求解問題的價值是 相同的,我們可以按任意順序來擴展它們。這里采用的原則是先生成的結(jié)點先擴展。 結(jié)點的擴展規(guī)則也就是如何從現(xiàn)有的結(jié)點生成新結(jié)點。對不同的問題,結(jié)點的擴展規(guī)則也不相同,需要按照問題的要求確定。 ( 3)搜索策略 為了便于進行搜索,要設(shè)置一個表存儲所有的結(jié)點。因為在廣度優(yōu)先搜索算法中,要滿足先生成的結(jié)點先擴展的原則,所以存儲結(jié)點的表一般設(shè)計成隊列的數(shù)據(jù)結(jié)構(gòu)。 搜索的步驟一般是: ( 1)從隊列頭取出一個結(jié)點,檢查它按照擴展規(guī)則是否能夠擴展,如果能則產(chǎn)生一個新結(jié)點。 廣東石油化工學院本科畢業(yè) (設(shè)計 )論文 : Linux 平臺下 C/C++網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn) 10 ( 2)檢查新生成的結(jié)點,看它是否已在隊列中存在,如果新 結(jié)點已經(jīng)在隊列中出現(xiàn)過,就放棄這個結(jié)點,然后回到第( 1)步。否則,如果新結(jié)點未曾在隊列中出現(xiàn)過,則將它加入到隊列尾。 ( 3)檢查新結(jié)點是否目標結(jié)點。如果新結(jié)點是目標結(jié)點,則搜索成功,程序結(jié)束;若新結(jié)點不是目標結(jié)點,則回到第( 1)步,再從隊列頭取出結(jié)點進行擴展。 最終可能產(chǎn)生兩種結(jié)果:找到目標結(jié)點,或擴展完所有結(jié)點而沒有找到目標結(jié)點。 網(wǎng)絡(luò)爬蟲的概要設(shè)計 本網(wǎng)絡(luò)爬蟲的開發(fā)目的,通過網(wǎng)絡(luò)爬蟲技術(shù)一個自動提取網(wǎng)頁的程序,實現(xiàn)搜索引擎從自己想要訪問的網(wǎng)上下載網(wǎng)頁,再根據(jù)已下載的網(wǎng)頁上繼續(xù)訪問其它的網(wǎng)頁, 并將其下載直到滿足用戶的需求。 根據(jù)現(xiàn)實中不同用戶的實際上的各種需求,本項目簡單實現(xiàn)主題爬蟲,本網(wǎng)絡(luò)爬蟲需要達到如下幾個目標: ( 1)設(shè)計基于多線程的網(wǎng)絡(luò)爬蟲,客戶端向服務(wù)器發(fā)送自己設(shè)定好請求。如圖 33所示。 圖 33 多線程網(wǎng)絡(luò)爬蟲概要設(shè)計圖模型 ( 2)通過 將 Web 服務(wù)器上協(xié)議站點的網(wǎng)頁代碼提取出來。 ( 3)根據(jù)一定的正則表達式提取出客戶端所需要的信息。 ( 4)廣度優(yōu)先搜索可從網(wǎng)頁中某個鏈接出發(fā),訪問該鏈接網(wǎng)頁上的所有鏈接,訪問完成后,再通過遞歸算法實現(xiàn)下一層的訪問。 本網(wǎng)絡(luò)爬蟲最終將設(shè) 計成一個能夠自動讀寫配置文件并且在后臺自動執(zhí)行的網(wǎng)絡(luò)第三章 網(wǎng)絡(luò)爬蟲模型的分析和概要設(shè)計 爬蟲程序。網(wǎng)絡(luò)爬蟲工作流程圖如圖 34 所示。 開始從配置文件中讀取初始URL 作為源 URL獲取網(wǎng)頁以正則表達式過濾網(wǎng)頁標簽提取目標 URL滿足條件停止結(jié)束根據(jù)寬度有限算法搜索目標URL 網(wǎng)絡(luò)蜘蛛循環(huán)爬行 圖 34 網(wǎng)絡(luò)爬蟲工作流程圖 廣東石油化工學院本科畢業(yè) (設(shè)計 )論文 : Linux 平臺下 C/C++網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn) 12 第四章 網(wǎng)絡(luò)爬蟲模型的設(shè)計與實現(xiàn) 網(wǎng)絡(luò)爬蟲的總體設(shè)計 根據(jù)本網(wǎng)絡(luò)爬蟲的概要設(shè)計本網(wǎng)絡(luò)爬蟲是一個自動提取網(wǎng)頁的程序,根據(jù)設(shè)定的主題判斷是否與主題相關(guān),再根據(jù)已下載的網(wǎng)頁上繼續(xù)訪問其它的網(wǎng)頁,并將其下載直到滿足用戶的需求。 ( 1) 設(shè)計基于多線程的網(wǎng)絡(luò)爬蟲。 ( 2)通過 協(xié)議 將待爬取 URL 列表對應(yīng)的 URL 的網(wǎng)頁代碼提取出來。 ( 3)提 取出所需要的信息并且通過算法判斷網(wǎng)頁是否和設(shè)定的主題相關(guān)。 ( 4)廣度優(yōu)先搜索,從網(wǎng)頁中某個鏈接出發(fā),訪問該鏈接網(wǎng)頁上的所有鏈接,訪問完成后,再通過遞歸算法實現(xiàn)下一層的訪問,重復以上步驟。 總的來說爬蟲程序根據(jù)輸入獲得 URL 任務(wù)列表,即初始 URL 種子,把初始種子保存在臨界區(qū)中,按照廣度搜索運算法搜索抓取網(wǎng)頁并提取 URL 返回到臨界區(qū)中,通過判斷主題相關(guān)度算法判斷相關(guān)度,取出不相關(guān)網(wǎng)頁,從而使整個爬蟲程序循環(huán)運行下去。 網(wǎng)絡(luò)爬蟲的具體設(shè)計 URL 類設(shè)計及標準化 URL URL 的一般形式是 : URL 的訪問方式 ://主機 :端口 /路徑 。為了方便處理,設(shè)計了一個名叫 URL 的類,它包含 Host(主機名), Port(端口), File(文件路徑),F(xiàn)name(給這張網(wǎng)頁取的名字)。以下代碼是 class URL 的成員及其成員函數(shù)(摘自): class URL { public: URL() {} void SetHost(const stringamp。 host) { Host = host。 } string GetHost() { return Host。 } void SetPort(int port) { Port = port。 } int GetPort() { return Port。 } void SetFile(const stringamp。 file) { File = file。 } 第四章 網(wǎng)絡(luò)爬蟲模 型的設(shè)計與實現(xiàn) 13 string GetFile() { return File。 } void SetFname(const stringamp。 fname) { Fname = fname。 } string GetFname() { return Fname。 } ~URL() {} private: string Host。 int Port。 string File。 string Fname。 }。 對 URL 的處理: 此外,注意到在網(wǎng)頁源代碼中, URL 有些是絕對路徑,有些是相對路徑,還有一些 URL 中存在字符 ?‘,多個 ?///‘等等。 因此,需要對這些 URL 進行處理,分別得到每個 URL 的 Host, Port, File。以下是本文對 URL 的設(shè)定: ( 1) URL 的 File 成員不能以 ?/‘結(jié)尾,若有則以 ?\0‘填充;若該 File 成員沒有路徑,則設(shè)定其路徑 為 ?/‘。這樣做的目的是為了便于 URL 排重。 ( 2) URL 的 File 成員中若有 ?‘字符,則刪除它及它以后的字符,剩余的字符串作為 File 的值。 ( 3)若 URL 中沒有顯式表明端口,則默認 Port 成員的值為 80。 ( 4)若 URL 沒有主機屬性,則默認 Host 成員的值為初始 URL 的主機名。 爬取網(wǎng)頁 在分析網(wǎng)頁之前,首先網(wǎng)頁需要被抓取下來,分析一下數(shù)據(jù)從服務(wù)器保存到本地的過程。 第一部分:分析之前,首先要明確的是:當從 sockfd 讀取數(shù)據(jù)時,最前面一部分是和網(wǎng)頁本身無關(guān)的信息,比如有些網(wǎng)頁未找到,就會 返回 404 not found 等服務(wù)信息,類似的,每種情況會返回對應(yīng)的信息,因此,對于一些服務(wù)信息,應(yīng)該不予記錄。當讀到 ?‘字符時才開始正式記錄網(wǎng)頁內(nèi)容。 第二部分:定義一個 tmp 的字符數(shù)組,用來臨時存放抓取的的網(wǎng)頁,抓取方法與第一部分 相同 同,都是用 read 函數(shù),不同的是這里是一塊一塊抓取,效率上能比每次抓取一個字節(jié)要高。有人可能會問,為什么不直接存放到文件中,而要保存到臨時數(shù)組中呢?解釋是:因為下一步分析網(wǎng)頁時,有個 URL 重定向的過程,程序還會繼續(xù)修改 tmp數(shù)組。如果直接保存到文件,那么還得再次打開文件 分析網(wǎng)頁,這樣會降低效率,因為在磁盤執(zhí)行讀寫操作總是比在內(nèi)存讀寫慢得多。 廣東石油化工學院本科畢業(yè) (設(shè)計 )論文 : Linux 平臺下 C/C++網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn) 14 網(wǎng)頁分析 ( 1) URL 提取 考慮到網(wǎng)頁中的鏈接格式主要是: a herf=‖xxx‖title/a,因此本文通過 string 自身封裝的 find 函數(shù)來找到每一個 ‖herf‖的位置,接下來的情況稍微有些復雜,分為三種情況。第一種: URL
點擊復制文檔內(nèi)容
公司管理相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1