




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、搜索引擎網(wǎng)絡(luò)爬蟲設(shè)計與實現(xiàn)摘要網(wǎng)絡(luò)中的資源非常豐富,但是如何有效的搜索信息卻是一件困難的事 情。建立搜索引擎就是解決這個問題的最好方法。本文首先詳細(xì)介紹了基于英特網(wǎng)的搜索引擎的系統(tǒng)結(jié)構(gòu),然后具體闡 述了如何設(shè)計并實現(xiàn)搜索引擎的搜索器網(wǎng)絡(luò)爬蟲。多線程網(wǎng)絡(luò)爬蟲程序是從指定的 Web 頁面中按照寬度優(yōu)先算法進(jìn)行解 析、搜索,并把搜索到的每條 URL 進(jìn)行抓取、保存并且以 URL 為新的入 口在互聯(lián)網(wǎng)上進(jìn)行不斷的爬行的自動執(zhí)行后臺程序。網(wǎng)絡(luò)爬蟲主要應(yīng)用 socket 套接字技術(shù)、正則表達(dá)式、 HTTP 協(xié)議、 windows 網(wǎng)絡(luò)編程技術(shù)等相關(guān)技術(shù),以 C+ 語言作為實現(xiàn)語言,并在 VC6.0 下調(diào)試
2、通過。在網(wǎng)絡(luò)爬蟲的設(shè)計與實現(xiàn)的章節(jié)中除了詳細(xì)的闡述技術(shù)核心外還結(jié)合 了多線程網(wǎng)絡(luò)爬蟲的實現(xiàn)代碼來說明,易于理解。本網(wǎng)絡(luò)爬蟲是一個能夠 在后臺運行的以配置文件來作為初始 URL ,以寬度優(yōu)先算法向下爬行,保 存目標(biāo) URL 的網(wǎng)絡(luò)程序,能夠執(zhí)行普通用戶網(wǎng)絡(luò)搜索任務(wù)。關(guān)鍵詞 搜索引擎;網(wǎng)絡(luò)爬蟲; URL 搜索器;多線程- I -Design and Realization of Search Engine NetworkSpiderAbstractThe resource of network is very rich, but how to search the effective inform
3、ation is a difficult task. The establishment of a search engine is the best way to solve this problem.This paper first introduces the internet-based search enginestructure, and then illustrates how to implement search engine network spiders.The multi-thread network spider procedure is from the Web p
4、age which assigns according to the width priority algorithm connection for analysis and search, and each URL is snatched and preserved, and make the result URL as the new source entrance unceasing crawling on internet to carry out the backgoud automatically.My paper of network spider mainly applies
5、to the socket technology, the regular expression, the HTTP agreement, the windows network programming technology and other correlation technique, and taking C+ language as implemented language, and passes under VC6.0 debugging.In the chapter of the spider design and implementation, besides a detaile
6、d exposition of the core technology in conjunction with the multi-threaded network spider to illustrate the realization of the code, it is easy to understand. This network spiders is initial URL based on configuration files which can operate on background , using width priority algorithm to crawl do
7、wn, preserving network programme of target URL.Keywords Internet search engine; Network spider; URL search programme; Multithreaded畢業(yè)設(shè)計(論文)原創(chuàng)性聲明和使用授權(quán)說明原創(chuàng)性聲明本人鄭重承諾:所呈交的畢業(yè)設(shè)計(論文),是我個人在指 導(dǎo)教師的指導(dǎo)下進(jìn)行的研究工作及取得的成果。盡我所知,除 文中特別加以標(biāo)注和致謝的地方外,不包含其他人或組織已經(jīng) 發(fā)表或公布過的研究成果,也不包含我為獲得 及其它教育機(jī)構(gòu)的學(xué)位或?qū)W歷而使用過的材料。對本研究提供過幫 助和做出過貢獻(xiàn)的個人
8、或集體,均已在文中作了明確的說明并表示了謝意。作者簽名:日期:指導(dǎo)教師簽名:日期:使用授權(quán)說明本人完全了解大學(xué)關(guān)于收集、保存、使用畢業(yè)設(shè)計(論文)的規(guī)定,即:按照學(xué)校要求提交畢業(yè)設(shè)計(論文)的 印刷本和電子版本;學(xué)校有權(quán)保存畢業(yè)設(shè)計(論文)的印刷本 和電子版,并提供目錄檢索與閱覽服務(wù);學(xué)??梢圆捎糜坝 ?縮印、數(shù)字化或其它復(fù)制手段保存論文;在不以贏利為目的前 提下,學(xué)??梢怨颊撐牡牟糠只蛉績?nèi)容。作者簽名: 日 期:目錄摘要 IAbstract II第 1 章 緒論 1.1.1 課題背景 1.1.2 搜索引擎的歷史和分類 搜索引擎的歷史 搜索引擎的分類 2.1
9、.3 搜索引擎的發(fā)展趨勢 3.1.4 搜索引擎的組成部分 4.1.5 課題研究的主要內(nèi)容 4.第 2 章 網(wǎng)絡(luò)爬蟲的技術(shù)要點分析 6.2.1 網(wǎng)絡(luò)爬蟲 Spider 工作原理 Spider 的概念 網(wǎng)絡(luò)爬蟲抓取內(nèi)容分析 6.22 HTTP 協(xié)議 HTTP協(xié)議的請求 72.2.2 HTTP協(xié)議的響應(yīng)82.2.3 HTTP的消息報頭 82.3 SOCKET 套接字102.3.1 什么是 SOCKET 套接字 1.02.3.2 SOCKET各函數(shù)分析102.4 正則表達(dá)式 .1 正則表達(dá)式應(yīng)用分析 正則表達(dá)式的元字符分析
10、1.52.5 本章總結(jié) 1.5.第3章 網(wǎng)絡(luò)爬蟲系統(tǒng)模型的分析和概要設(shè)計 1.63.1 網(wǎng)絡(luò)爬蟲模型分析 單線程爬蟲模型分析 多線程爬蟲模型分析 爬蟲集群模型分析 1.73.2 網(wǎng)絡(luò)爬蟲的搜索策略的分析與設(shè)計 1. 73.3 網(wǎng)絡(luò)爬蟲主要性能評價指標(biāo)分析 2.03.4 本論文中網(wǎng)絡(luò)爬蟲的概要設(shè)計 2.0-V -第 4 章 網(wǎng)絡(luò)爬蟲的詳細(xì)設(shè)計與實現(xiàn) 2.44.1 網(wǎng)絡(luò)爬蟲總體設(shè)計 2.44.2 Socket功能模塊的設(shè)計與實現(xiàn)254.2.1 Socket功能模塊的設(shè)計254.2.2 Socket功能模塊的具體實現(xiàn) 254.2.3 Socket
11、模塊中各功能函數(shù)模塊中的調(diào)用關(guān)系設(shè)計 334.3 HTTP 功能模塊的設(shè)計與實現(xiàn) HTTP 協(xié)議與 URL344.3.2依照HTTP協(xié)議設(shè)計send()函數(shù)發(fā)送信息 354.4 正則表達(dá)式過濾模塊的設(shè)計與實現(xiàn) 3. 74.4.1 URL 正則表達(dá)式的定義與實現(xiàn) 3. 74.4.2 開源正則表達(dá)式引擎 DEELX 的應(yīng)用 MatchResult 類的調(diào)用和設(shè)計 3. 94.5 URL保存模塊的設(shè)計與實現(xiàn)414.6 寬度搜索模塊的設(shè)計與實現(xiàn) 4.14.7 文件存儲模塊的設(shè)計與實現(xiàn) 4.34.8 多線程的設(shè)計與實現(xiàn) 4.34.9 運行顯示結(jié)果 輸
12、入 .2 顯示 .3 結(jié)果 0 本章總結(jié) 4.5.結(jié)論 4.7.致謝 4.8.參考文獻(xiàn) 4.9.附錄 5.0.- # -第1章 緒論1.1 課題背景面對浩瀚的網(wǎng)絡(luò)資源,搜索引擎為所有網(wǎng)上沖浪的用戶提供了一個入 口,毫不夸張的說,所有的用戶都可以從搜索出發(fā)到達(dá)自己想去的網(wǎng)上任 何一個地方。因此它也成為除了電子郵件以外最多人使用的網(wǎng)上服務(wù)。什么是搜索引擎?它是如何工作的?搜索引擎一詞在國內(nèi)外因特網(wǎng)領(lǐng) 域被廣泛使用,然而他的含義卻不盡相同。在美國搜索引擎通常指的是基 于因特網(wǎng)的搜索引擎,他們通過網(wǎng)絡(luò)機(jī)器人程序收集上千萬到幾億個網(wǎng) 頁,并且每一個詞都被搜索引擎
13、索引,也就是我們說的全文檢索。著名的 因特網(wǎng)搜索引擎包括 First Search、Google、HotBot 等。在中國,搜索引擎 通常指基于網(wǎng)站目錄的搜索服務(wù)或是特定網(wǎng)站的搜索服務(wù),本人這里研究 的是基于因特網(wǎng)的搜索技術(shù)。廣義的搜索引擎泛指網(wǎng)絡(luò) (尤其是萬維網(wǎng) ) 上提供信息檢索服務(wù)的工具 或系統(tǒng) ,即在因特網(wǎng)上或通過因特網(wǎng)響應(yīng)用戶的搜索請求 ,返回相應(yīng)查詢結(jié) 果的信息技術(shù)和系統(tǒng) .狹義的搜索引擎主要指利用網(wǎng)絡(luò)自動搜索軟件或人工方式 ,對萬維網(wǎng)信 息資源進(jìn)行采集 ,分析與標(biāo)引 ,并將索引信息組織成數(shù)據(jù)庫 ,以網(wǎng)站形式為網(wǎng) 絡(luò)用戶提供檢索服務(wù)的一類信息服務(wù)系統(tǒng) .概括的說:搜索引擎就是 WW
14、W 網(wǎng)絡(luò)環(huán)境中的一套信息檢索系統(tǒng)。它 通常有兩種不同的工作方式:一種是分類目錄型的檢索,把因特網(wǎng)中的資 源收集起來,由其提供的資源的類型不同而分成不同的目錄,再一層層地 進(jìn)行分類,人們要找自己想要的信息可按他們的分類一層層進(jìn)入,就能最 后到達(dá)目的地,找到自己想要的信息;另一種是基于關(guān)鍵詞( Keyword ) 的檢索,這種方式用戶可以用邏輯組合方式輸入各種關(guān)鍵詞,搜索引擎計 算機(jī)根據(jù)這些關(guān)鍵詞尋找用戶所需資源的地址,然后根據(jù)一定的規(guī)則反饋 給用戶包含此關(guān)鍵字詞信息的所有網(wǎng)址和指向這些網(wǎng)址的鏈接。搜索引擎其實也就是一個網(wǎng)站,只不過該網(wǎng)站專門為你提供信息 “檢 索 ”服務(wù),它使用特有的程序把 IN
15、TERNET 上的所有信息歸類以幫助人們 在浩如煙海的信息海洋中搜尋到自己所需要的信息。隨著因特網(wǎng)信息按幾 何級數(shù)增長,這些搜索引擎利用其內(nèi)部的一個 spider 程序,自動搜索網(wǎng)站 每一頁的開始,并把每一頁上代表超級鏈接的所有詞匯放入一個數(shù)據(jù)庫, 供用戶來查詢。1.2 搜索引擎的歷史和分類搜索引擎的歷史。 1990 年以前,沒有任何人能搜索互聯(lián)網(wǎng)。所有搜索 引擎的祖先,是 1990 年由 Montreal 的 McGill University 學(xué)生 Alan Emtage Peter Deutsch Bill Wheelan 發(fā)明的 Archie。后來,程序員們開發(fā) 出了一個名叫“spid
16、er ('爬蟲)的“Robot”機(jī)器人)程序,它能自動以人 類無法達(dá)到的速度不斷重復(fù)地在網(wǎng)絡(luò)上檢索信息。這種行為很像一只爬蟲 在 INTERNET 這張巨大的信息網(wǎng)上爬來爬去,因此, spider 程序便由此而 來。世界上第一個 Spider 程序,是 MIT Matthew Gray 的 World wide Web Wanderer,用于追蹤互聯(lián)網(wǎng)發(fā)展規(guī)模。剛開始它只用來統(tǒng)計互聯(lián)網(wǎng)上的服 務(wù)器數(shù)量,后來發(fā)展為也能夠捕獲網(wǎng)址” URL) 1。1.2.1 搜索引擎的歷史搜索引擎技術(shù)伴隨著 WWW 的發(fā)展是引人注目的。搜索引擎大約經(jīng)歷 了三代的更新發(fā)展:第一代搜索引擎出現(xiàn)于 1994 年
17、。這類搜索引擎一般都索引少于 1, 000, 000 個網(wǎng)頁,極少重新搜集網(wǎng)頁并去刷新索引。而且其檢索速度非常 慢,一般都要等 待 10 秒甚至更長的時間。在實現(xiàn)技術(shù)上也基本沿用較為 成熟的IR( In formation Retrieval)網(wǎng)絡(luò)、數(shù)據(jù)庫等技術(shù),相當(dāng)于利用一 些已有技術(shù)實現(xiàn)的一個 WWW 上的應(yīng)用。在 1994年 3月到 4月,網(wǎng)絡(luò)爬 蟲” Spider)World Web Worm (WWW)平均每天承受大約1500次查詢。大約在 1996 年出現(xiàn)的第二代搜索引擎系統(tǒng)大多采用分布式方案”多 個微型計算機(jī)協(xié)同工作)來提高數(shù)據(jù)規(guī)模、響應(yīng)速度和用戶數(shù)量,它們一 般都保持一個大約
18、5 千萬網(wǎng)頁個的索引數(shù)據(jù)庫,每天能夠響應(yīng) 1 千萬次 用戶檢索請求。 1997年 11 月,當(dāng)時最先進(jìn)的幾個搜索引擎號稱能建立從 2 百萬到 1 億的網(wǎng)頁索引。 Altavista 搜索引擎聲稱他們每天大概要承受 2 千萬次查詢。2000年搜索引擎2000年大會上,按照 Google公司總裁Larry Page的 演講, Google 正在用 3 千臺運行 Linux 系統(tǒng)的個人電腦在搜集 Web 上的 網(wǎng)頁,而且以每天 30 臺的速度向這個微機(jī)集群里添加電腦,以保持與網(wǎng) 絡(luò)的發(fā)展相同步。每臺微機(jī)運行多個爬蟲程序搜集網(wǎng)頁的峰值速度是每秒 100 個網(wǎng)頁,平均速度是每秒 48.5 個網(wǎng)頁,一天可
19、以搜集超過 4 百萬個網(wǎng) 頁。1.2.2 搜索引擎的分類搜索引擎按其工作方式主要可分為三種,分別是全文搜索引擎” FullText Search Engine)、目錄索引類搜索引擎” Search Index/Directory)和元 搜索引擎” Meta Search Engine)。全文搜索引擎是名副其實的搜索引擎,國外具代表性的有Google、Fast/AllTheWeb、 AltaVista 、 Inktomi 、 Teoma、 WiseNut 等,國內(nèi)著名的 有百度(Baidu)。它們都是通過從互聯(lián)網(wǎng)上提取的各個網(wǎng)站的信息(以網(wǎng) 頁文字為主)而建立的數(shù)據(jù)庫中,檢索 與用戶查詢條件匹配
20、的相關(guān)記 錄,然后按一定的排列順序?qū)⒔Y(jié)果返回給用戶,因此他們是真正的搜索引 擎。目錄索引雖然有搜索功能,但在嚴(yán)格意義上算不上是真正的搜索引 擎,僅僅是按目錄分類的網(wǎng)站鏈接列表而已。用戶完全可以不用進(jìn)行關(guān)鍵 詞( Keywords) 查詢,僅靠分類目錄也可找到需要的信息。目錄索引中 最具代表性的莫過于大名鼎鼎的 Yahoo 雅虎。其他著名的還有 Open Directory Project(DMOZ)、LookSmart、About 等。國內(nèi)的搜狐、新浪、 網(wǎng)易搜索也都屬于這一類 2。元搜索引擎在接受用戶查詢請求時,同時在其他多個引擎上進(jìn)行搜 索,并將結(jié)果返回給用戶。著名的元搜索引擎有InfoS
21、pace、Dogpile、Vivisimo 等(元搜索引擎列表) ,中文元搜索引擎中具代表性的有搜星搜 索引擎。在搜索結(jié)果排列方面,有的直接按來源引擎排列搜索結(jié)果,如 Dogpile,有的則按自定的規(guī)則將結(jié)果重新排列組合,女口 Vivisimo。1.3 搜索引擎的發(fā)展趨勢搜索引擎經(jīng)過幾年的發(fā)展和摸索,越來越貼近人們的需求,搜索引擎 的技術(shù)也得到了很大的發(fā)展。搜索引擎的最新技術(shù)發(fā)展包括以下幾個方 面:為了提高搜索引擎對用戶檢索提問的理解,就必須有一個好的檢索提 問語言,為了克服關(guān)鍵詞檢索和目錄查詢的缺點,現(xiàn)在已經(jīng)出現(xiàn)了自然語 言智能答詢。用戶可以輸入簡單的疑問句,比如“howcan kill v
22、irus ofcomputer? 。”搜索引擎在對提問進(jìn)行結(jié)構(gòu)和內(nèi)容的分析之后,或直接給出 提問的答案,或引導(dǎo)用戶從幾個可選擇的問題中進(jìn)行再選擇。自然語言的 優(yōu)勢在于,一是使網(wǎng)絡(luò)交流更加人性化,二是使查詢變得更加方便、直 接、有效。1. 基于鏈接評價的搜索引擎基于鏈接評價的搜索引擎的優(yōu)秀代表是Googel,它獨創(chuàng)的鏈接評價體系 ”是基于這樣一種認(rèn)識,一個網(wǎng)頁的重要性取決于它被其它網(wǎng)頁鏈接 的數(shù)量,特別是一些已經(jīng)被認(rèn)定是 “重要”的網(wǎng)頁的鏈接數(shù)量。2. 基于訪問大眾性的搜索引擎基于訪問大眾性的搜索引擎的代表是 direct hit,它的基本理念是多數(shù) 人選擇訪問的網(wǎng)站就是最重要的網(wǎng)站。根據(jù)以前成
23、千上萬的網(wǎng)絡(luò)用戶在檢 索結(jié)果中實際所挑選并訪問的網(wǎng)站和他們在這些網(wǎng)站上花費的時間來統(tǒng)計 確定有關(guān)網(wǎng)站的重要性排名,并以此來確定哪些網(wǎng)站最符合用戶的檢索要 求。因此具有典型的趨眾性特點。這種評價體制與基于鏈接評價的搜索引 擎有著同樣的缺點。3. 去掉檢索結(jié)果中附加的多余信息 有調(diào)查指出,過多的附加信息加重了用戶的信息負(fù)擔(dān),為了去掉這些 過多的附加信息,可以采用用戶定制、內(nèi)容過濾等檢索技術(shù)。確定搜索引擎信息搜集范圍,提高搜索引擎的針對性1.4 搜索引擎的組成部分一個搜索引擎大致由三部分組成。第一部分是搜索器,也就是上面提 到的 Spider 程序。它定期的自動爬到各個網(wǎng)站上,把網(wǎng)頁抓下來,并順著
24、上面的鏈接,象爬蟲一樣爬開去,持續(xù)不斷的抓取網(wǎng)頁。第二部分是索引 器,它把爬蟲程序抓來網(wǎng)頁進(jìn)行分析,按照關(guān)鍵詞句進(jìn)行索引,并存入服 務(wù)器的數(shù)據(jù)庫中。第三部分是面向用戶的檢索器,它接收用戶提交的查詢字串,在索引 數(shù)據(jù)庫中查詢,并將結(jié)果反饋給用戶。因此,準(zhǔn)確的說,當(dāng)我們利用搜索引擎搜索信息時,并不是真正在網(wǎng) 上進(jìn)行搜索,而是在檢索那個由爬蟲程序自動建立起來的龐大的數(shù)據(jù)庫。 由于各大搜索引擎的數(shù)據(jù)庫的自動更新周期是不同的,從幾天到幾周甚至 一個月都有可能,因此,選擇合適的搜索引擎顯得尤為重要。同時,有時 也可能遇到用搜索引擎搜索到的網(wǎng)頁無法打開的情況,了解了它的工作原 理,這一點也就不會大驚小怪了
25、3 。1.5 課題研究的主要內(nèi)容本論文主要研究搜索引擎的搜索器( Spider 程序)的設(shè)計與實現(xiàn),詳 細(xì)介紹Spider程序的概念及技術(shù)要點,算法介紹,并用C+語言實現(xiàn)簡單的可在后臺自動運行的爬蟲程序網(wǎng)絡(luò)爬蟲程序,是一種專業(yè)的 Bot 程序。用于查找大量的 Web 頁面。 它從一個簡單 Web 頁面上開始執(zhí)行,然后通過其超鏈接在訪問其他頁面, 如此反復(fù)理論上可以掃描互聯(lián)網(wǎng)上的所有頁面。基于因特網(wǎng)的搜索引擎是 Spider的最早應(yīng)用。例如搜索巨頭 Google公司,就利用網(wǎng)絡(luò)機(jī)器人程序來 遍歷 Web 站點,以創(chuàng)建并維護(hù)這些大型數(shù)據(jù)庫。網(wǎng)絡(luò)機(jī)器人還可以通過掃 描 Web 站點的主頁來得到這個站
26、點的文件清單和層次機(jī)構(gòu)。還可以掃描出 中斷的超鏈接和拼寫錯誤等。然而 Internet 是建立在很多相關(guān)協(xié)議基礎(chǔ)上的,而更復(fù)雜的協(xié)議又建 立在系統(tǒng)層協(xié)議之上。 Web就是建立在 HTTP ( Hypertext Transfer Protocol ) 協(xié)議基礎(chǔ)上,而 HTTP 又是建立在 TCP/IP ( Transmission Control Protocol / In ternet Protocol )協(xié)議之上,它同時也是一種 Socket協(xié)議。所以網(wǎng)絡(luò)爬蟲本質(zhì)上是一種基于 Socket的網(wǎng)絡(luò)程序。本論文中網(wǎng)絡(luò)爬蟲的關(guān)鍵技術(shù)如下: SOCKET 套接字技術(shù), HTTP 協(xié) 議技術(shù),正則表
27、達(dá)式技術(shù)。以多線程網(wǎng)絡(luò)爬蟲模型為設(shè)計基礎(chǔ),應(yīng)用 SOCKET 套接字相關(guān)函數(shù)按照 HTTP 協(xié)議向源 URL 發(fā)送請求,并以正則 表達(dá)式過濾所接受到的網(wǎng)頁標(biāo)簽,得到目標(biāo) URL ,再將目標(biāo) URL 重新作 為源 URL 進(jìn)行新的一輪向下爬行搜索,按照寬度優(yōu)先算法向下爬行,從 而完成整個 Network Spider 的爬行工作。總的來說本論文的網(wǎng)絡(luò)爬蟲是一個能夠在后臺運行的以配置文件來作 為初始 URL ,以寬度優(yōu)先算法向下爬行,保存目標(biāo)URL 的網(wǎng)絡(luò)爬蟲程序。- 5 -第2章 網(wǎng)絡(luò)爬蟲的技術(shù)要點分析2.1 網(wǎng)絡(luò)爬蟲 Spider 工作原理2.1.1 Spider 的概念搜索引擎一直專注于提升
28、用戶的體驗度,其用戶體驗度則反映在三個 方面: 準(zhǔn)、全、快 。用專業(yè)術(shù)語講是:查準(zhǔn)率、查全率和搜索速度(即 搜索耗時)。其中最易達(dá)到的是搜索速度,因為對于搜索耗時在 1 秒以下 的系統(tǒng)來說,訪問者很難辨別其快慢 了,更何況還有網(wǎng)絡(luò)速度的影響。 因此,對搜索引擎的評價就集中在了前兩者:準(zhǔn)、全。中文搜索引擎的 “準(zhǔn)”,需要保證搜索的前幾十條結(jié)果都和搜索詞十分相關(guān),這需由 “分詞技 術(shù)”和“排序技術(shù) ”來決定。中文搜索引擎的 “全”則需保證不遺漏某些重要的結(jié)果,而且能找到最 新的網(wǎng)頁,這需要搜索引擎有一個強(qiáng)大的網(wǎng)頁收集器,一般稱為 “網(wǎng)絡(luò)爬 蟲”,也有叫“網(wǎng)頁機(jī)器人 ”。這就是本論文所研究的目標(biāo)。網(wǎng)
29、絡(luò)爬蟲即Network Spider,是一個很形象的名字。把互聯(lián)網(wǎng)比喻成 一個爬蟲網(wǎng),那么Spider就是在網(wǎng)上爬來爬去的爬蟲。網(wǎng)絡(luò)爬蟲是通過網(wǎng) 頁的鏈接地址來尋找網(wǎng)頁,從網(wǎng)站某一個頁面(通常是首頁)開始,讀取 網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找 下一個網(wǎng)頁,這樣一直循環(huán)下去,直到把這個網(wǎng)站所有的網(wǎng)頁都抓取完為 止。如果把整個互聯(lián)網(wǎng)當(dāng)成一個網(wǎng)站,那么網(wǎng)絡(luò)爬蟲就可以用這個原理把 互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。對于搜索引擎來說,要抓取互聯(lián)網(wǎng)上所有的網(wǎng)頁幾乎是不可能的,從 目前公布的數(shù)據(jù)來看,容量最大的搜索引擎也不過是抓取了整個網(wǎng)頁數(shù)量 的百分之四十左右。這其中的原因一
30、方面是抓取技術(shù)的瓶頸,無法遍歷所 有的網(wǎng)頁,有許多網(wǎng)頁無法從其它網(wǎng)頁的鏈接中找到;另一個原因是存儲 技術(shù)和處理技術(shù)的問題,如果按照每個頁 面的平均大小為 20K 計算(包 含圖片),100億網(wǎng)頁的容量是100X2000G字節(jié),即使能夠存儲,下載也 存在問題(按照一臺機(jī)器每秒下載 20K 計算, 需要 340 臺機(jī)器不停的下 載一年時間,才能把所有網(wǎng)頁下載完畢) 。同時,由于數(shù)據(jù)量太大,在提 供搜索時也會有效率方面的影響。因此,許多搜索引擎的網(wǎng)絡(luò)爬蟲只是抓 取那些重要的網(wǎng)頁,而在抓取的時候評價重要性主要的依據(jù)是某個網(wǎng)頁的 鏈接深度。2.1.2 網(wǎng)絡(luò)爬蟲抓取內(nèi)容分析1. 靜態(tài)網(wǎng)頁抓取內(nèi)容分析:爬蟲
31、從一個或若干初始網(wǎng)頁的 URL開始,獲得初始網(wǎng)頁上的 URL, 在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的 URL放入隊列,直到滿 足系統(tǒng)的一定停止條件。2. 動態(tài)網(wǎng)頁抓取內(nèi)容分析:分析動態(tài)網(wǎng)頁參數(shù),按照一定規(guī)章,拼”出所有要被抓取內(nèi)容 URL,只抓取這些特定范圍內(nèi)動態(tài)網(wǎng)頁。3. 特殊內(nèi)容抓取內(nèi)容分析:比如RSS、XML數(shù)據(jù),情況特殊需特殊處理。如新聞的滾動新聞頁 面,需要爬蟲不停地監(jiān)控掃描,發(fā)現(xiàn)新內(nèi)容馬上就進(jìn)行抓取。4. 文件對象抓取內(nèi)容分析:圖片,MP3、Flash、視頻等文件的抓取,都要特殊處理。比如說:圖 片抓取出來后,要知道圖片文件類型、圖片文件的大小、圖片的像素大 小,還要轉(zhuǎn)換出
32、來縮略圖。2.2 HTTP 協(xié)議2.2.1 HTTP協(xié)議的請求http請求由三部分組成,分別是:請求行、消息報頭、請求正文請求行以一個方法符號開頭,以空格分開,后面跟著請求的URI和協(xié)議的版本,格式如下: Method Request-URI HTTP-Version CRLF其中Method表示請求方法;Request-URI是一個統(tǒng)一資源標(biāo)識符; HTTP-Version表示請求的HTTP協(xié)議版本;CRLF表示回車和換行(除了 作為結(jié)尾的CRLF夕卜,不允許出現(xiàn)單獨的CR或LF字符)。請求方法(所有方法全為大寫)有多種,請求方法解釋表如表2-1所示。表2-1請求方法表GET請求獲取Requ
33、est-URI所標(biāo)識的資源POST在Request-URI所標(biāo)識的資源后附加新的數(shù)據(jù)HEAD請求獲取由Request-URI所標(biāo)識的資源的響應(yīng)消息報頭PUT請求服務(wù)器存儲一個資源,并用Request-URI作為其標(biāo)識DELETE請求服務(wù)器刪除Request-URI所標(biāo)識的資源TRACE請求服務(wù)器回送收到的請求信息,主要用于測試或診斷應(yīng)用舉例:GET方法:在瀏覽器的地址欄中輸入網(wǎng)址的方式訪問網(wǎng)頁時,瀏覽器 采用GET方法向服務(wù)器獲取資源。POST方法要求被請求服務(wù)器接受附在請求后面的數(shù)據(jù),常用于提交 表單。HEAD方法與GET方法幾乎是一樣的,對于 HEAD請求的回應(yīng)部分 來說,它的 HTTP
34、頭部中包含的信息與通過 GET 請求所得到的信息是相 同的。利用這個方法,不必傳輸整個資源內(nèi)容,就可以得到 Request-URI 所標(biāo)識的資源的信息。該方法常用于測試超鏈接的有效性,是否可以訪 問,以及最近是否更新。在本論文中網(wǎng)絡(luò)爬蟲的 http 請求部分將用 GET 方法。2.2.2 HTTP 協(xié)議的響應(yīng)HTTP 響應(yīng)也是由三個部分組成,分別是:狀態(tài)行、消息報頭、響應(yīng) 正文狀態(tài)行格式如下:HTTP-Versio n Status-Code Reas on-Phrase CRL。 其中,HTTP-Version表示服務(wù)器 HTTP協(xié)議的版本;Status-Code表示 服務(wù)器發(fā)回的響應(yīng)狀態(tài)代
35、碼;Reaso n-Phrase表示狀態(tài)代碼的文本描述。狀 態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別,且有五種可能取 值:1xx :指示信息-表示請求已接收,繼續(xù)處理2xx :成功-表示請求已被成功接收、理解、接受3xx:重定向-要完成請求必須進(jìn)行更進(jìn)一步的操作4xx :客戶端錯誤-請求有語法錯誤或請求無法實現(xiàn) 5xx:服務(wù)器端錯誤-服務(wù)器未能實現(xiàn)合法的請求 響應(yīng)報頭與響應(yīng)正文略。2.2.3 HTTP 的消息報頭HTTP 消息由客戶端到服務(wù)器的請求和服務(wù)器到客戶端的響應(yīng)組成。 請求消息和響應(yīng)消息都是由開始行(對于請求消息,開始行就是請求行, 對于響應(yīng)消息,開始行就是狀態(tài)行) ,消息報頭
36、(可選) ,空行(只有 CRLF 的行),消息正文(可選)組成。HTTP 消息報頭包括普通報頭、請求報頭、響應(yīng)報頭、實體報頭。每一個報頭域都是由名字 +“:”+空格 +值 組成,消息報頭域的名字 是大小寫無關(guān)的。1. 普通報頭 在普通報頭中,有少數(shù)報頭域用于所有的請求和響應(yīng)消息,但并不用 于被傳輸?shù)膶嶓w,只用于傳輸?shù)南ⅰU埱髸r的緩存指令包括:no-cache (用于指示請求或響應(yīng)消息不能緩 存)、 no-store、 max-age、 max-stale、 min-fresh、 only-if-cached;響應(yīng)時的緩存指令包括:public、 private、 no-cache、 no-s
37、tore、 no-transform、 must-revalidate、 proxy-revalidate、 max-age、 s-maxage.2. 請求報頭-7 -請求報頭允許客戶端向服務(wù)器端傳遞請求的附加信息以及客戶端自身 的信息。常用的請求報頭包括:Accept:Accept 請求報頭域用于指定客戶端接受哪些類型的信息。Accept-Charset:Accept-Charset請求報頭域用于指定客戶端接受的字符集。Accept-Encoding:Accept-Encoding請求報頭域類似于Accept,但是它是用于指定可接受 的內(nèi)容編碼。eg: Accept-Encoding:gzi
38、p.deflate.如果請求消息中沒有設(shè)置這 個域服務(wù)器假定客戶端對各種內(nèi)容編碼都可以接受。Accept-Language:Accept-Language請求報頭域類似于 Accept,但是它是用于指定一種 自然語言。Authorization:Authorization 請求報頭域主要用于證明客戶端有權(quán)查看某個資源。當(dāng)瀏覽器訪問一個頁面時,如果收到服務(wù)器的響應(yīng)代碼為401(未授權(quán)),可以發(fā)送一個包含 Authorization 請求報頭域的請求,要求服務(wù)器對其進(jìn)行驗 證。Host (發(fā)送請求時,該報頭域是必需的):Host 請求報頭域主要用于指定被請求資源的 Internet 主機(jī)和端口號,
39、 它通常從 HTTP URL 中提取出來的。3. 響應(yīng)報頭 響應(yīng)報頭允許服務(wù)器傳遞不能放在狀態(tài)行中的附加響應(yīng)信息,以及關(guān)于服務(wù)器的信息和對 Request-URI 所標(biāo)識的資源進(jìn)行下一步訪問的信息。常用的響應(yīng)報頭包括:Location:Location 響應(yīng)報頭域用于重定向接受者到一個新的位置。 Location 響 應(yīng)報頭域常用在更換域名的時候。Server:Server 響應(yīng)報頭域包含了服務(wù)器用來處理請求的軟件信息。與 UserAgent 請求報頭域是相對應(yīng)的。4. 實體報頭 請求和響應(yīng)消息都可以傳送一個實體。一個實體由實體報頭域和實體正文組成,但并不是說實體報頭域和實體正文要在一起發(fā)送,
40、可以只發(fā)送 實體報頭域。實體報頭定義了關(guān)于實體正文和請求所標(biāo)識的資源的元信 息。常用的實體報頭包括:Conten t-E ncodi ng:Content-Encoding實體報頭域被用作媒體類型的修飾符,它的值指示 了已經(jīng)被應(yīng)用到實體正文的附加內(nèi)容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須采用相應(yīng)的解碼機(jī)制。Co nte nt-E ncodi ng這樣用于記錄文檔的壓縮方法。Conten t-La nguageCon te nt-La nguage實體報頭域描述了資源所用的自然語言。沒有設(shè)置 該域則認(rèn)為實體內(nèi)容將提供給所有的語言閱讀者。Conten t-Le n
41、gth:Content-Length實體報頭域用于指明實體正文的長度,以字節(jié)方式存 儲的十進(jìn)制數(shù)字來表示。Conten t-Type:Content-Type實體報頭域用語指明發(fā)送給接收者的實體正文的媒體類 型。Expires:本設(shè)辻頁完整粉料:包括源程康數(shù)據(jù)庫.說明書,歸辛PPT鏑系QQ : 1415736481獲?。I(yè)定做其它設(shè)計Expires實體報頭域給出響應(yīng)過期的日期和時間 。2.3 SOCKET套接字2.3.1什么是SOCKET套接字簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成 通信過程應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時,TCP和UDP會遇到同時為多個應(yīng)用程序進(jìn)程提供并
42、發(fā)服務(wù)的問題。多個TCP連接或多個應(yīng)用程序進(jìn)程可能需要通過同一個 TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程 序進(jìn)程和連接,許多計算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口。區(qū)分不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接,主要有3個參數(shù):通信的目標(biāo)IP地址、使用的傳輸層協(xié)議(TCP或UDP)和使用的端口號。Socket原意是 插座”通過將這3個參數(shù)結(jié)合起來,與一個 插座” Socket 綁定,應(yīng)用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應(yīng)用程序進(jìn) 程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。2.3.2 SOCKET各函數(shù)分析1. WSAStartup 函數(shù)
43、 int WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);使用 Socket 的程序在使用 Socket 之前必須調(diào)用 WSAStartup 函數(shù)。該 函數(shù)的第一個參數(shù)指明程序請求使用的 Socket 版本,其中 高位字節(jié)指明 副版本、低位字節(jié)指明主版本;操作系統(tǒng)利用第二個參數(shù)返回請求的 Socket的版本信息。當(dāng)一個應(yīng)用程序調(diào)用WSAStartup函數(shù)時,操 作系統(tǒng)根據(jù)請求的 Socket 版本來搜索相應(yīng)的 Socket 庫,然后綁定找到的 Socket 庫到該應(yīng)用程序中。以后應(yīng)用程序就可以調(diào)用所請求的 Socket 庫中的其 它
44、Socket函數(shù)了。該函數(shù)執(zhí)行成功后返回 0。2. WSACleanup 函數(shù)int WSACleanup (void);應(yīng)用程序在完成對請求的 Socket庫的使用后,要調(diào)用 WSACIeanup函 數(shù)來解除與Socket庫的綁定并且釋放Socket庫所占用的系統(tǒng)資源。3. socket 函數(shù)SOCKET socket(int af,int type,int protocoI);應(yīng)用程序調(diào)用socket函數(shù)來創(chuàng)建一個能夠進(jìn)行網(wǎng)絡(luò)通信的套接字。第 一個參數(shù)指定應(yīng)用程序使用的通信協(xié)議的協(xié)議族,對于 TCP/IP 協(xié)議族, 該參數(shù)置PF_INET;第二個參數(shù)指定要創(chuàng)建的套接字類型,流套接字類型 為
45、SOCK_STREAM、數(shù)據(jù)報套接字類型為 SOCK_DGRAM ;第三個參數(shù) 指定應(yīng)用程序所使用的通信協(xié)議。該函數(shù)如果調(diào)用成功就返回新創(chuàng)建的套 接字的描述符,如果失敗就返回 INVALID_SOCKET 。套接字描述符是一 個整數(shù)類型的值。每個進(jìn)程的進(jìn)程空間里都有一個套接字描述符表,該表 中存放著套接字描述符和套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的對應(yīng)關(guān)系。該表中有一個字段 存放新創(chuàng)建的套接字的描述符,另一個字段存放套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的地址, 因此根據(jù)套接字描述符就可以找到其對應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。每個進(jìn)程在 自己的進(jìn)程空間里都有一個套接字描述符表,但是套接字?jǐn)?shù)據(jù)結(jié)構(gòu)都是在 操作系統(tǒng)的內(nèi)核緩沖里。4. closesoc
46、ket 函數(shù)int cIosesocket( SOCKET s );closesocket函數(shù)用來關(guān)閉一個描述符為 s套接字。由于每個進(jìn)程中都 有一個套接字描述符表,表中的每個套接字描述符都對應(yīng)了一個位于操作 系統(tǒng)緩沖區(qū)中的套接字?jǐn)?shù)據(jù)結(jié)構(gòu),因此有可能有幾個套接字描述符指向同 一個套接字?jǐn)?shù)據(jù)結(jié)構(gòu)。套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中專門有一個字段存放該結(jié)構(gòu)的被- 11 -引用次數(shù),即有多少個套接字描述符指向該結(jié)構(gòu)。當(dāng)調(diào)用closesocket 函數(shù)時,操作系統(tǒng)先檢查套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中的該字段的值,如果為1,就表明只有一個套接字描述符 指向它,因此操作系統(tǒng)就先把 s 在套接字描述符 表中對應(yīng)的那條表項清除,并且釋放 s
47、 對應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu);如果該字 段大于 1,那么操作系統(tǒng)僅僅清除 s 在套接 字描述符表中的對應(yīng)表項,并 且把 s 對應(yīng)的套接字?jǐn)?shù)據(jù)結(jié)構(gòu)的引用次數(shù)減 1。closesocke函數(shù)如果執(zhí)行成功就返回 0,否則返回SOCKET_ERROR。5. se nd函數(shù)int send(SOCKET s,const char FAR *buf,int len,int flags);不論是客戶還是服務(wù)器應(yīng)用程序都用 send 函數(shù)來向 TCP 連接的另一 端發(fā)送數(shù)據(jù)??蛻舫绦蛞话阌?send函數(shù)向服務(wù)器發(fā)送請求,而服務(wù)器則通 常用 send 函數(shù)來向客戶程序發(fā)送應(yīng)答。該函數(shù)的第一個參數(shù)指定發(fā)送端 套接字描述
48、符;第二個參數(shù)指明一個存放應(yīng)用程序要發(fā)送數(shù)據(jù)的緩沖區(qū); 第三個參數(shù)指明實際 要發(fā)送的數(shù)據(jù)的字節(jié)數(shù);第四個參數(shù)一般置0。這里只描述同步 Socket 的 send 函數(shù)的執(zhí)行流程。當(dāng)調(diào)用該函數(shù)時, send 先比 較待發(fā)送數(shù)據(jù)的長度 len 和套接字 s 的發(fā)送緩沖區(qū)的長度,如果 len 大于 s 的發(fā)送緩沖區(qū)的長度,該函數(shù)返回SOCKET_ERROR ;如果len小于或者等于 s 的發(fā)送緩沖區(qū) 的長度,那么 send 先檢查協(xié)議是否正在發(fā)送 s 的發(fā) 送緩沖中的數(shù)據(jù),如果是就等待協(xié)議把數(shù)據(jù)發(fā)送完,如果協(xié)議還沒有開始 發(fā)送 s 的發(fā)送緩沖中的數(shù)據(jù)或者 s 的 發(fā)送緩沖中沒有數(shù)據(jù),那么 send
49、就 比較s的發(fā)送緩沖區(qū)的剩余空間和len,如果len大于剩余空間大小send 就一直等待協(xié)議把 s 的發(fā)送緩沖中的數(shù)據(jù)發(fā) 送完,如果 len 小于剩余空間 大小 send 就僅僅把 buf 中的數(shù)據(jù) copy 到剩余空間里。6. recv函數(shù)int recv(SOCKET s,char FAR *buf,int len,int flags);不論是客戶還是服務(wù)器應(yīng)用程序都用 recv 函數(shù)從 TCP 連接的另一端 接收數(shù)據(jù)。該函數(shù)的第一個參數(shù)指定接收端套接字描述符;第二個參數(shù)指明一個緩 沖區(qū),該緩沖區(qū)用來存放 recv 函數(shù)接收到的數(shù)據(jù);第三個參數(shù) 指明buf的長度;第四個參數(shù)一般置 0。這里
50、只描述同步Socket的recv函 數(shù)的執(zhí)行流 程。當(dāng)應(yīng)用程序調(diào)用recv函數(shù)時,recv先等待s的發(fā)送緩沖 中的數(shù)據(jù)被協(xié)議傳送完畢,如果協(xié)議在傳送 s 的發(fā)送緩沖中的數(shù)據(jù)時出現(xiàn) 網(wǎng)絡(luò)錯誤,那么recv函數(shù)返回SOCKET_ERROR,如果s的發(fā)送緩沖中沒 有數(shù)據(jù)或者數(shù)據(jù)被協(xié)議成功發(fā)送完畢后, recv 先檢查套接字 s 的接收緩沖 區(qū),如果s接收 緩沖區(qū)中沒有數(shù)據(jù)或者協(xié)議正在接收數(shù)據(jù),那么recv就一直等待,只到協(xié)議把數(shù)據(jù)接收完畢。當(dāng)協(xié)議把數(shù)據(jù)接收完畢, recv 函數(shù) 就把s的接收緩沖中的數(shù)據(jù)copy到buf中。7.bind函數(shù)int bind(SOCKET s,const struct
51、sockaddr FAR *name,int namelen);當(dāng)創(chuàng)建了一個 Socket 以后,套接字?jǐn)?shù)據(jù)結(jié)構(gòu)中有一個默認(rèn)的 IP 地址 和默認(rèn)的端口號。一個服務(wù)程序必須調(diào)用 bind 函數(shù)來給其綁定一個 IP 地 址 和一個特定的端口號。客戶程序一般不必調(diào)用 bind 函數(shù)來為其 Socket 綁定 IP 地址和斷口號。該函數(shù)的第一個參數(shù)指定待綁定的 Socket 描述 符;第二個參數(shù)指定一個sockaddr結(jié)構(gòu)。8.listen 函數(shù)int listen( SOCKET s, int backlog );服務(wù)程序可以調(diào)用 listen 函數(shù)使其流套接字 s 處于監(jiān)聽狀態(tài)。處于監(jiān) 聽狀態(tài)的
52、流套接字 s 將維護(hù)一個客戶連接請求隊列,該隊列最多容納 backlog 個客戶連接請求。假如該函數(shù)執(zhí)行成功,則返回 0;如果執(zhí)行失 敗,則返回 SOCKET_ERROR。9.accept 函數(shù)SOCKET accept(SOCKET s,struct sockaddr FAR *addr,int FAR *addrlen);服務(wù)程序調(diào)用accept函數(shù)從處于監(jiān)聽狀態(tài)的流套接字 s的客戶連接請 求隊列中取出排在最前的一個客戶請求,并且創(chuàng)建一個新的套接字來與客 戶套接 字創(chuàng)建連接通道,如果連接成功,就返回新創(chuàng)建的套接字的描述 符,以后與客戶套接字交換數(shù)據(jù)的是新創(chuàng)建的套接字;如果失敗就返回 INV
53、ALID_SOCKET 。該函數(shù)的第一個參數(shù)指定處于監(jiān)聽狀態(tài)的流套接 字;操作系統(tǒng)利用第二個參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu);操作系 統(tǒng)利用第三個參數(shù)來返回新創(chuàng)建的套接字的地址結(jié)構(gòu)的長度。10.co nnect 函數(shù)int connect(SOCKET s,const struct sockaddr FAR *name,int namelen);客戶程序調(diào)用connect函數(shù)來使客戶Socket s與監(jiān)聽于name所指定的 計算機(jī)的特定端口上的服務(wù) Socket 進(jìn)行連接。如果連接成功, connect 返 回 0;如果失敗則返回 SOCKET_ERROR7。2.4 正則表達(dá)式網(wǎng)絡(luò)爬蟲程序抓
54、取到網(wǎng)頁之后,需要將 HTML 頁面的所有 URL 連接 提取出來,這就需要應(yīng)用正則表達(dá)式來區(qū)分頁面中的其他標(biāo)簽。簡單的說,正則表達(dá)式是一種可以用于模式匹配和替換的強(qiáng)有力的工 具。他可以讓用戶通過使用一系列的特殊字符構(gòu)建匹配模式,然后把匹配 模式與數(shù)據(jù)文件、程序輸入以及 WEB 頁面的表單輸入等目標(biāo)對象進(jìn)行比 較,根據(jù)比較對象中是否包含匹配模式,執(zhí)行相應(yīng)的程序。舉例來說,正則表達(dá)式的一個最為普遍的應(yīng)用就是用于驗證用戶在線 輸入的郵件地址的格式是否正確。如果通過正則表達(dá)式驗證用戶郵件地址 的格式正確,用戶所填寫的表單信息將會被正常處理;反之,如果用戶輸 入的郵件地址與正則表達(dá)的模式不匹配,將會彈
55、出提示信息,要求用戶重新輸入正確的郵件地址。由此可見正則表達(dá)式在 WEB 應(yīng)用的邏輯判斷 中具有舉足輕重的作用。在本論文的網(wǎng)絡(luò)爬蟲的實現(xiàn)部分將應(yīng)用正則表達(dá)式來判斷URL。2.4.1 正則表達(dá)式應(yīng)用分析正則表達(dá)式簡稱RE(regular expressions,就是用某種模式去匹配一類 字符串的公式。正則 表達(dá)式被各種文本編輯軟件、類庫(例如 Rogue Wave 的 tools.h+)、腳本工具(象awk/grep/sed) 廣泛的支持,而且像 Microsoft的 Visual C+這種交互式IDE也開始支持它了。正則表達(dá)式由一些普通字符 和一些元字符(metacharacters)組成。普
56、通字符包括大小寫的字母和數(shù) 字,而元字符則具有特殊的含義,在最簡單的情況下,一個正則表達(dá)式看 上去就是一個普通的查找串。例如,正則 表達(dá) 式 "testing" 中沒有包含任 何元字符,它可以匹配"testing"和"123testing"等字符串,但是不能匹配"Testing"- 15 -242正則表達(dá)式的元字符分析常用正則表達(dá)式的元字符解釋如表2-2所示表2-2正則表達(dá)式的元字符元字符描述匹配任何單個字符。$匹配行結(jié)束符。A匹配一行的開始。*匹配0或多個正好在它之前的那個字符。引用符將列出的元字符當(dāng)作普通的字符來匹配。 c1-c2 Ac1-c2匹配括號中的任何一個字符。例如正則表達(dá)式 raout匹配rat、rot和rut,但是不匹配ret??梢栽?括號中使用連字符-來指定字符的區(qū)間,< >匹配詞(word)的開始()和結(jié)束()。( )將(和)之間的表達(dá)式疋義為 組(group),并且 將匹配這個表達(dá)式的字符保存到一個臨時區(qū)域(一個正則表達(dá)式中最多可以保存 9 個),它們可以用1 到9的符號來引用。I將兩個匹配條件進(jìn)行邏輯 或”(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專利抵押合同范本
- 公司銷售人員合同范例
- 勞務(wù)合同范本 短期
- 單位購買電腦合同范本
- 勾機(jī)鏟車出租合同范本
- 公司水果采購合同范本
- 單位玻璃保潔合同范本
- 蛋糕師招聘合同范本
- 代買股合同范本
- 制式采購合同范本
- 旅游學(xué)概論(第五版)課件 第一章 旅游學(xué)概述
- 學(xué)生課后服務(wù)活動記錄表
- 義務(wù)教育信息科技課程標(biāo)準(zhǔn)(2022年版)解讀
- CRRT的精細(xì)化護(hù)理
- 部編小學(xué)語文單元作業(yè)設(shè)計一年級下冊第二單元
- (高清版)DZT 0282-2015 水文地質(zhì)調(diào)查規(guī)范(1:50000)
- 七字押韻祭文范文六篇
- 項目利益相關(guān)者溝通計劃
- 建設(shè)項目安全設(shè)施“三同時”課件
- 交通大數(shù)據(jù)服務(wù)平臺建設(shè)方案
- 十二經(jīng)絡(luò)及任督二脈課件
評論
0/150
提交評論