




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
浙江大學(xué)碩士學(xué)位論文支持AJAX的互聯(lián)網(wǎng)搜索引擎爬蟲設(shè)計(jì)與實(shí)現(xiàn)姓名:羅兵申請(qǐng)學(xué)位級(jí)別:碩士專業(yè):計(jì)算機(jī)應(yīng)用導(dǎo)教師:陳剛20070514AbstractWebCrawlerisanimportantcomponentofSearchEngine,webdevelopersbuildapplicationsthatareeasiertouseandmorefimctionalthantraditionalWebprogramsbyusingAJAXtechnologies,whichcreatewebpageswitiiAsynchronousJavaScriptandXML.AJAXchangesthecontentofwebpagesdynamicallyaftergettingthedatafromwebserverbysendingdierequestasynchronously.Asaresult,thedatathatthetraditionalwebcrawlercollectsislessthanthedatapresentinginthewebbrowser.Weproposeanewwebcrawler-Aj狀Crawler,whichsupportsAJAX.TheAjaxCrawleriscomposedofcrawlingwebpage,analyzingwebpage,interpretingJavaScript,invokingDOMoperationmethods,regeneratingwebpage.First,ciawlthewebpagebyrequest,second,analyzethepageelement,notonlythelinks,butalsotheJavaScriptcodeandfileinthepage,then,executetheJavaScriptcode,whichincludetheAJAXrequest,getstheresultfromserverandinvokingDOMoperationmethodstochangethecontentofwebpage,atlast,regeneratethewebpageandextractthelinks.Accordingtotheexperiment,thecontentcrawledbyAjaxCrawlerismorethantraditionalcrawleratthesamecondition.圖目錄TOC\o"1-3"\h\z圖1-1搜索引擎的體系結(jié)構(gòu)⑴ 4圖2-1傳統(tǒng)爬蟲的工作流程 8圖2-2抓取策略 9圖2-3基于分類器聚焦爬蟲體系結(jié)構(gòu) 10圖24基于數(shù)據(jù)抽取器的聚焦爬蟲體系結(jié)構(gòu) 11圖2-5基于用戶學(xué)習(xí)的聚焦爬蟲體系結(jié)構(gòu) 12圖2-6系統(tǒng)結(jié)構(gòu)E"] 13圖3-1同步交互〔上〕和異步交互〔下〕的比擬[B】 18圖3-2傳統(tǒng)Web應(yīng)用和基于AJAX的Web應(yīng)用的比擬113〗 19圖3-3網(wǎng)易博客的毎日推薦頁面呈現(xiàn) 22圖3>4網(wǎng)易博客每曰推薦的頁面源碼片段 22圖3-5支持AJAX的爬蟲總體結(jié)構(gòu) 23圖4-1網(wǎng)頁分析流程 34圖4-2JS解釋器的結(jié)構(gòu) 36圖4-3DOM層次結(jié)構(gòu) 38圖44W3C的DOM接口繼承關(guān)系 39圖4-5Node節(jié)點(diǎn)的方法 39圖4-6提取頁面中超鏈接的流程 40圖5-1AjaxCrawler抓取的超鏈接數(shù)一網(wǎng)易博客 42圖5-2傳統(tǒng)爬蟲抓取的超鏈接數(shù)一網(wǎng)易博客 42圖5-3AjaxCmwler抓取的超鏈接數(shù)一新浪博客 43圖5-4傳統(tǒng)爬蟲抓取的超鏈接數(shù)一新浪博客 43圖5-5AjaxCrawler抓取的超鏈接數(shù)一百度博客 44圖5-6傳統(tǒng)爬蟲抓取的超鏈接數(shù)一百度博客 45圖5-7AjaxCrawler抓取的超鏈接數(shù)一debian 45圖5-8傳統(tǒng)爬蟲抓取的超鏈接數(shù)一debian 46圖5-9抓取鏈接數(shù)比照 47圖5-10抓取時(shí)間比照 47表目錄TOC\o"1-3"\h\z表3-1XMLReques謝象方法 20表3-2XMLRequest對(duì)象屬性 20表4-1URL類的方法說明 31第1章緒論21世紀(jì)是信息時(shí)代,隨著信息科學(xué)技術(shù)的不斷開展,網(wǎng)絡(luò)已成為人們生活中的重要組成局部,因特網(wǎng)作為信息交流的中心與樞紐作用愈顯重要。因特網(wǎng)是全球最大的分布式信息庫(kù),擁有眾多但卻雜亂無章的信息,并且這些信息呈幾何級(jí)數(shù)增長(zhǎng)。如何快速、準(zhǔn)確地查找所需要的信息,成為人們迫切需要解決的問題。搜索引擎應(yīng)運(yùn)而生,而作為搜索引擎一局部的網(wǎng)絡(luò)爬蟲起著重要作用,爬蟲抓取頁面的數(shù)量和質(zhì)量對(duì)搜索引擎的查詢結(jié)果影響很大。Web是為了區(qū)別于過往的以門戶為代表的Web的稱呼,Web2.0只是一個(gè)符號(hào),它說明的是正在變化中的互聯(lián)網(wǎng),這些變化相輔相成,彼此聯(lián)系在一起,它讓社會(huì)性、用戶、參與和創(chuàng)作這些元素浮出水面成為互聯(lián)網(wǎng)文化的中堅(jiān)力量。Web的最大特點(diǎn)是個(gè)人化、去中心化,同時(shí)強(qiáng)調(diào)社會(huì)化,強(qiáng)調(diào)開放、共享,強(qiáng)調(diào)參與、創(chuàng)造。根本上Web的絕大局部效勞都存在一個(gè)個(gè)人標(biāo)識(shí)明確的頁面。ffeb的最大改變就是普通人開始改變、創(chuàng)造網(wǎng)絡(luò),草根性質(zhì)的、業(yè)余性質(zhì)的參與。Web要凸現(xiàn)每個(gè)用戶的價(jià)值,每個(gè)人在互聯(lián)網(wǎng)上都可以創(chuàng)造自己的價(jià)值。近年來,隨著Web的興起,在Web開發(fā)中運(yùn)用AJAX技術(shù)的網(wǎng)站越來越多,這些技術(shù)的應(yīng)用帶來了更好的用戶體驗(yàn)、很多新概念和Webin設(shè)計(jì),同時(shí),由于AJAX技術(shù)可以動(dòng)態(tài)改變頁面內(nèi)容,改變了傳統(tǒng)Web頁面的結(jié)構(gòu),導(dǎo)致單純抓取靜態(tài)Web頁面的網(wǎng)絡(luò)爬蟲抓取的內(nèi)容少于頁面呈現(xiàn)的內(nèi)容,這些動(dòng)態(tài)內(nèi)容給網(wǎng)絡(luò)爬蟲的設(shè)計(jì)帶來極大挑戰(zhàn)。本論文所涉及的課題一一“支持AJAX的互聯(lián)網(wǎng)搜索引擎爬蟲設(shè)計(jì)與實(shí)現(xiàn)〞,正是在綜合考慮上述開展趨勢(shì)、需求因素的根底上提出的,設(shè)計(jì)實(shí)現(xiàn)了支持AJAX的網(wǎng)絡(luò)爬蟲原型系統(tǒng)AjaxCrawler。AjaxCrawler是基于傳統(tǒng)爬蟲,實(shí)現(xiàn)了JavaScript解釋器、DOM支持的新一代爬蟲,其核心在于獲取AJAX異步請(qǐng)求返回的數(shù)據(jù),并通過這些數(shù)據(jù)生成真正的頁面內(nèi)容,從而抓取到更多的內(nèi)容。搜索弓I擎[2〗(SearchEngine)是為滿足人們對(duì)網(wǎng)絡(luò)信息的搜索需求而開展起來的技術(shù),搜索引擎以一定的策略利用網(wǎng)絡(luò)自動(dòng)搜索功能,對(duì)各種信息資源分門別類地進(jìn)行索引、建庫(kù),并對(duì)信息進(jìn)行分析、提取、組織和處理,從而起到信息導(dǎo)航的作用,幫助人們從不同形式的數(shù)字化信息中進(jìn)行搜索。搜索引擎起源于傳統(tǒng)的信息全文檢索理論,狹義上的搜索引擎僅指基于因特網(wǎng)的搜索引擎;廣義上的搜索引擎除此之外還包括基于目錄的信息檢索效勞。搜索引擎的研究極具綜合性和挑戰(zhàn)性,它涉及到信息檢索、人工智能、計(jì)算機(jī)網(wǎng)絡(luò)、分布式處理、數(shù)據(jù)庫(kù)、數(shù)據(jù)挖掘、數(shù)字圖書館、自然語言處理等多領(lǐng)域的理論和技術(shù)。1.2.2分類按照信息搜集的方法和效勞提供方式的不同,搜索引擎主要分為三大類-全文搜索引擎(FullTextSearchEngine),目錄式搜索引擎(SearchIndex/Directory)和元搜索弓I擎(MetaSearchEngine).全文搜索引擎(FullTextSearchEngine)全文搜索引擎是從各個(gè)網(wǎng)站提取信息,建立數(shù)據(jù)庫(kù),檢索與用戶查詢條件相匹配的記錄后,按照一定的排列順序返回結(jié)果,是名副其實(shí)的搜索引擎。全文搜索弓I擎的自動(dòng)信息搜集有兩種:一種是定期搜索,即每隔一段時(shí)間,搜索引擎主動(dòng)派出爬蟲程序,對(duì)一定IP地址范圍的網(wǎng)站進(jìn)行檢索,一旦發(fā)現(xiàn)新的網(wǎng)站,它會(huì)自動(dòng)提取網(wǎng)站的信息和網(wǎng)址參加數(shù)據(jù)庫(kù);另一種是提交網(wǎng)站搜索,即網(wǎng)站擁有者主動(dòng)向搜索引擎提交網(wǎng)址,搜索引擎在一定時(shí)間內(nèi)(兩夭到數(shù)月不等)定期向提交的網(wǎng)站派出爬蟲程序。全文搜索引擎中最具代表性的有國(guó)外著名的Google及國(guó)內(nèi)的百度搜索。二、目錄索引〔Search Index/Directory)目錄索引13]是一種人工方式或半自動(dòng)方式的搜索引擎,由編輯人員查看信息后,人工生成信息摘要,并將信息置于事先確定的分類框架中.由于目錄索引只是一個(gè)按目錄分類的網(wǎng)站鏈接列表,因此不能稱為嚴(yán)格意義上的搜索引擎。由于目錄索引中參加了人的智能,所以導(dǎo)航質(zhì)量高,信息更準(zhǔn)確,但也正因?yàn)槿绱?,使得維護(hù)費(fèi)用偏大,信息更新不及時(shí)。目錄索引中最具代表性的有yahoo、新浪,三、元搜索弓I擎(Meta SearchEngine)元搜索引擎〖4]沒有自己的數(shù)據(jù),而是將用戶的查詢請(qǐng)求同時(shí)向多個(gè)搜索引擎遞交,將返回的結(jié)果處理后,作為自己的結(jié)果返回給用戶。元搜索引擎返回結(jié)果的信息量更大、更全,但是不能夠充分利用所使用搜索引擎的功能,多的篩選。1.2.3開展歷史搜索引擎技術(shù)伴隨著互聯(lián)網(wǎng)的開展引人注目,大約經(jīng)歷了三代的開展。第一代搜索引擎出現(xiàn)于1994年,是在傳統(tǒng)檢索學(xué)理論上開展起來的,用戶只要輸入檢索詞,計(jì)算機(jī)根據(jù)檢索詞比對(duì)網(wǎng)頁、網(wǎng)站等進(jìn)行不同的加權(quán)處理,根據(jù)權(quán)值對(duì)信息文獻(xiàn)進(jìn)行排序,權(quán)值越大計(jì)算機(jī)認(rèn)為該條信息與檢索詞相關(guān)性越高。這類搜索引擎一般都索引少于1,000,000個(gè)網(wǎng)頁,極少重新搜集網(wǎng)頁和更新索引。而且其檢索速度非常慢,一般都要等待10秒甚至更長(zhǎng)的時(shí)間。在實(shí)現(xiàn)技術(shù)上根本沿用較為成熟的IRdnformationRetrieval).網(wǎng)絡(luò)、數(shù)據(jù)庫(kù)等技術(shù),相當(dāng)于利用一些已有技術(shù)實(shí)現(xiàn)一個(gè)互聯(lián)網(wǎng)上的應(yīng)用。第二代搜索引擎大約出現(xiàn)在1996年,受文獻(xiàn)引文索引的影響,人們通過對(duì)網(wǎng)頁被引用的次數(shù)、引用者的權(quán)威性計(jì)算,對(duì)網(wǎng)頁進(jìn)行鏈接分析排序,鏈接分析排序技術(shù)一個(gè)最明顯的好處是:在結(jié)合詞頻排序技術(shù)的情況下,兼顧到了排序的準(zhǔn)確性和權(quán)威性。此時(shí)的搜索引擎大多采用分布式方案來提髙數(shù)據(jù)規(guī)模、響應(yīng)速度和用戶數(shù)量,一般都保持一個(gè)大約50,000,000網(wǎng)頁的索引數(shù)據(jù)庫(kù),每天能夠響應(yīng)10,000,000次用戶檢索請(qǐng)求。1997年11月,當(dāng)時(shí)最先進(jìn)的幾個(gè)搜索引擎號(hào)稱能建立從2,000,000到100,000,000的網(wǎng)頁索引-1998年至今為第三代,是搜索引擎空前繁榮的時(shí)期,這一時(shí)期的搜索引擎的開展有如下幾個(gè)特點(diǎn):索引數(shù)據(jù)庫(kù)的規(guī)模繼續(xù)增大,一般的商業(yè)搜索引擎都保持在10億個(gè)網(wǎng)頁以上。由于索引數(shù)據(jù)庫(kù)的巨大規(guī)模,使得對(duì)應(yīng)于搜索關(guān)鍵宇的返回結(jié)果數(shù)量非常大,檢索結(jié)果相關(guān)度評(píng)價(jià)成為研究的焦點(diǎn)。相關(guān)的研究分為兩類:一類是對(duì)超鏈接的分析;另一類是對(duì)用戶反應(yīng)信息的研究。開始使用自動(dòng)分類技術(shù),搜索引擎己成為一個(gè)新的研究、開發(fā)領(lǐng)域。因?yàn)樯婕暗椒植际教幚?、?shù)據(jù)庫(kù)、信息檢索、人工智能、計(jì)箅機(jī)網(wǎng)絡(luò)、數(shù)據(jù)挖掘、數(shù)字圖書館、自然語言處理等多領(lǐng)域的理論和技術(shù),所以具有綜合性和挑戰(zhàn)性。又由于搜索引擎有大量的用戶,擁有很好的經(jīng)濟(jì)價(jià)值,所以引起了世界各國(guó)計(jì)算機(jī)科學(xué)界和信息產(chǎn)業(yè)界的高度關(guān)注,目前的研究、開發(fā)十分活潑?搜索引擎一般由搜集器、分析器、索引器、檢索器和用戶接口五局部組成,如圖1-1所示。www分析器原始f據(jù)庫(kù)弓用戶接口-/‘f圖1-1搜索引擎的體系結(jié)構(gòu)⑴搜集器15】的功能是在互聯(lián)網(wǎng)中漫游、發(fā)現(xiàn)和搜集信息。它常常是一個(gè)計(jì)算機(jī)程序,日夜不停地運(yùn)行,盡可能多、盡可能快地搜集各種類型的新信息。同時(shí)因?yàn)榛ヂ?lián)網(wǎng)上的信息更新很快,需要定期更新已經(jīng)搜集過的信息,以防止死鏈接和無效鏈接。搜索器的實(shí)現(xiàn)常常使用分布式、并行計(jì)算技術(shù),以提高信息發(fā)現(xiàn)和更新的速度。搜索器搜集的信息類型多種多樣,包括HTML、XML、pdf文件、doc文檔、多媒體信息等等。1.3,2分析器分析器[6〗對(duì)本地文檔庫(kù)進(jìn)行分析以便用于索引,文檔分析技術(shù)包括分詞、過濾和轉(zhuǎn)換等。索引數(shù)據(jù)庫(kù)一般“詞〞能夠表達(dá)完整的語義對(duì)象,所以通常選用詞作為文本特征的元數(shù)據(jù)。在分詞時(shí),大局部系統(tǒng)從全文中抽取詞條,也有局部系統(tǒng)只從文檔的某些部分〔如標(biāo)題等〕抽取詞條。由于中文的基元是字而不是詞,句子中各詞語間沒有固定的分隔符,漢語語義及結(jié)構(gòu)上的復(fù)雜性和多邊性給中文分詞帶來極大困難。
漢語分詞主要有兩大類方法基于詞典與規(guī)那么,或者基于統(tǒng)計(jì)?前者應(yīng)用詞典匹配,漢語詞法或其他漢語語言知識(shí)進(jìn)行分詞,如最大匹配法〔MaximumMatching)、最小分詞方法等,其性能依賴于詞典的完備性、規(guī)那么的一致性。后者基于字和詞的統(tǒng)計(jì)信息,如相鄰字間互信息,詞頻及相應(yīng)的奉獻(xiàn)信息等應(yīng)用于分詞。分詞后通常要使用禁用詞表〔stoplist)來去除出現(xiàn)頻率很高的無意義詞條,如aruthe、of、的。另外需要對(duì)詞條進(jìn)行單、復(fù)數(shù)轉(zhuǎn)換,詞綴去除,同義詞轉(zhuǎn)換等工作,如將jumps、jumped,jumper都?xì)w結(jié)成jump進(jìn)行索引。索引器[5^^分析器提取的信息中抽取出索引項(xiàng),用于表示文檔以及生成文檔庫(kù)的索引表。索引表一般使用某種形式的倒排表(InversionList),即由索引項(xiàng)查找相應(yīng)的文檔。索引表也可能要記錄索引項(xiàng)在文檔中出現(xiàn)的位置,以便檢索器計(jì)算索引項(xiàng)之間的相鄰或相近關(guān)系(Proximity).索引項(xiàng)有客觀索引項(xiàng)和內(nèi)容索引項(xiàng)兩種??陀^索引項(xiàng)與文檔的語意內(nèi)容無關(guān),如作者名、URL、更新時(shí)間、編碼、長(zhǎng)度、鏈接流行度(LinkPopularity)等;內(nèi)容索引項(xiàng)是用來反映文檔內(nèi)容的,如關(guān)鍵詞及其權(quán)重、短語、單字等。內(nèi)容索引項(xiàng)可以分為單索引項(xiàng)和多索引項(xiàng)(或稱短語索引項(xiàng))兩種.單索引項(xiàng)對(duì)于英文來講是英語單詞,比擬容易提取,因?yàn)閱卧~之間有天然的分隔符(空格);對(duì)于中文等連續(xù)書寫的語言,必須進(jìn)行詞語的切分。在搜索引擎中,一般要給單索引項(xiàng)陚予一個(gè)權(quán)值,以表示該索引項(xiàng)對(duì)文檔的區(qū)分度,同時(shí)用來計(jì)算查詢結(jié)果的相關(guān)度。使用的方法一般有統(tǒng)計(jì)法、信息論法和概率法。短語索引項(xiàng)的提取方法有統(tǒng)計(jì)法、概率法和語言學(xué)法。索引器可以使用集中式索引算法或分布式索引算法。當(dāng)數(shù)據(jù)量很大時(shí),必須實(shí)現(xiàn)即時(shí)索引(InstantIndexing),否那么跟不上信息量急劇增加的速度。索引算法對(duì)索引器的性能(如大規(guī)模峰值査詢時(shí)的響應(yīng)速度)有很大的影響,一個(gè)搜索引擎的有效性在很大程度上取決于索引的質(zhì)量。檢索器[5】根據(jù)用戶的查詢?cè)谒饕龓?kù)中找出文檔,進(jìn)行文檔與查詢的相關(guān)度評(píng)價(jià),對(duì)將要輸出的結(jié)果進(jìn)行排序,并實(shí)現(xiàn)某種用戶相關(guān)性反應(yīng)機(jī)制,檢索器常用的信息檢索模型有集合理論模型、代數(shù)模型、概率模型和混合模型四種。1.35用戶接口用戶接口〖5】為用戶提供可視化的查詢輸入和結(jié)果輸出界面,提供用戶相關(guān)性反應(yīng)機(jī)制。主要目的是方便用戶使用搜索引擎,高效率、多方式地從捜索引擎中得到有效、及時(shí)的信息。用戶接口的設(shè)計(jì)和實(shí)現(xiàn)使用人機(jī)交互的理論和方法,以充分適應(yīng)人類的思維習(xí)慣。用戶輸入接口可以分為簡(jiǎn)單接口和復(fù)雜接口兩種。簡(jiǎn)單接口只提供用戶輸入查詢串的文本框;復(fù)雜接口可以讓用戶對(duì)查詢進(jìn)行限制,如邏輯運(yùn)算(與、或、非〕、相近關(guān)系、出現(xiàn)位置(如標(biāo)題、內(nèi)容〕、信息時(shí)間、長(zhǎng)度等。在輸出界面中,搜索引擎將檢索結(jié)果展現(xiàn)為一個(gè)線性的文檔列表,其中包含了文檔的標(biāo)題、摘要、URL等信息,用戶需要逐個(gè)瀏覽以便找出所需的文檔。論文組織本論文共分六章。第1章緒論。本章介紹論文的選題背景和意義、國(guó)內(nèi)外相關(guān)領(lǐng)域技術(shù)的現(xiàn)狀以及論文的組織結(jié)構(gòu)。第2章網(wǎng)絡(luò)爬蟲研究熱點(diǎn)。本章主要介紹了網(wǎng)絡(luò)爬蟲的根本原理、工作流程以及目前網(wǎng)絡(luò)爬蟲的研究熱點(diǎn):聚焦爬蟲和主題爬蟲,分別介紹了它們的分類和體系結(jié)構(gòu)。第3章AjaxCrawler概要設(shè)計(jì)。本章主要介紹Web 2.0相關(guān)技術(shù)和對(duì)爬蟲的影響以及AjaxCrawler的整體架構(gòu)、關(guān)鍵技術(shù)。第4章AjaxCrawler的實(shí)現(xiàn)。介紹網(wǎng)絡(luò)爬蟲的相關(guān)技術(shù)和AjaxOawler的實(shí)現(xiàn),包括JS解釋器、DOM支持模塊、頁面生成模塊等幾個(gè)局部。第5章測(cè)試和實(shí)驗(yàn)。介紹了 AjaxCrawler的測(cè)試以及傳統(tǒng)爬蟲和AjaxCrawler抓取結(jié)果的比照。第6章總結(jié)與展望??偨Y(jié)了論文創(chuàng)新點(diǎn),展望了 AjaxCrawler值得繼續(xù)優(yōu)化和實(shí)現(xiàn)的問題。第2章網(wǎng)絡(luò)爬蟲研究熱點(diǎn)作為搜索引擎關(guān)鍵技術(shù)之一的網(wǎng)絡(luò)爬蟲被稱為WebCrawler,*ebWanderer或WebSpider,能夠沿Web頁面中的超鏈接在萬維網(wǎng)中自動(dòng)漫游,并讀取漫游的Web頁面的程序。網(wǎng)絡(luò)爬蟲的漫游是指根據(jù)HTML文檔中的超鏈接,利用協(xié)議連續(xù)地從不同的效勞器中獲取Web頁面的過程。網(wǎng)絡(luò)爬蟲是通過網(wǎng)頁的鏈接地址來尋找網(wǎng)頁。從網(wǎng)站的某一個(gè)頁面(通常是首頁)開始,讀取網(wǎng)頁的內(nèi)容,找到在網(wǎng)頁中的其它鏈接地址,然后通過這些鏈接地址尋找下一個(gè)網(wǎng)頁,這樣一直循環(huán)下去,直到把這個(gè)網(wǎng)站所有的網(wǎng)頁都抓取完為止。如果把整個(gè)互聯(lián)網(wǎng)當(dāng)成一個(gè)網(wǎng)站,理論上講網(wǎng)絡(luò)爬蟲可以把互聯(lián)網(wǎng)上所有的網(wǎng)頁都抓取下來。傳統(tǒng)爬蟲從一個(gè)或假設(shè)干初始網(wǎng)頁的鏈接地址開始,獲得初始網(wǎng)頁上的地址,在抓取網(wǎng)頁的過程中,不斷從當(dāng)前頁面上抽取新的鏈接地址放入隊(duì)列,直到滿足一定的停止條件,如圖2-1所示。開始初始鏈接地址獲取網(wǎng)頁將新的地址放入隊(duì)列否結(jié)束圖2-1傳統(tǒng)爬蟲的工作流程網(wǎng)頁的抓取策略分為深度優(yōu)先、廣度優(yōu)先和最正確優(yōu)先三種,廣度優(yōu)先搜索策略是在抓取過程中先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中的一個(gè)鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。該算法的設(shè)計(jì)和實(shí)現(xiàn)相對(duì)簡(jiǎn)單。目前為覆蓋盡可能多的網(wǎng)頁,一般使用廣度優(yōu)先搜索方法,因?yàn)檫@個(gè)方法可以讓網(wǎng)絡(luò)爬蟲并行處理,提高其抓取速度。對(duì)于圖2-2,廣度優(yōu)先的抓取順序JiA—B、C、D、E、F-H,G-I,深度優(yōu)先是指網(wǎng)絡(luò)爬蟲會(huì)從起始頁開始,一個(gè)鏈接一個(gè)鏈接抓取下去,處理完這條線路之后再轉(zhuǎn)入下一個(gè)起始頁,繼續(xù)抓取鏈接。這個(gè)方法的優(yōu)點(diǎn)是網(wǎng)絡(luò)爬蟲在設(shè)計(jì)時(shí)比擬容易,但是會(huì)導(dǎo)致爬蟲的陷入問題。對(duì)于圖2-2,深度優(yōu)先的抓取順序是A—F—G;E-H-I;B;C;D,最正確優(yōu)先搜索最正確優(yōu)先搜索策略[s】按照一定的網(wǎng)頁分析算法,預(yù)測(cè)候選鏈接地址與目標(biāo)網(wǎng)
頁的相似度,或與主題的相關(guān)性,并選取評(píng)價(jià)最好的一個(gè)或幾個(gè)地址進(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)行改良,以跳出局部最優(yōu)點(diǎn)。圖2-2抓取策略隨著網(wǎng)絡(luò)的迅速開展,萬維網(wǎng)成為大量信息的載體,如何有效地提取并利用這些信息成為一個(gè)巨大的挑戰(zhàn)。搜索引擎,例如傳統(tǒng)的通用搜索引擎AltaVista,Yahoo!等,作為一個(gè)輔助人們檢索信息的工具成為用戶訪問萬維網(wǎng)的入口和指南。但是,這些通用性搜索引擎也存在一定的局限性,如:不同領(lǐng)域、不同背景的用戶往往具有不同的檢索目的和需求,通用搜索引擎所返回的結(jié)果包含大量用戶不關(guān)心的網(wǎng)頁。通用搜索引擎的目標(biāo)是盡可能大的網(wǎng)絡(luò)覆蓋率,有限的搜索引擎效勞器資源與無限的網(wǎng)絡(luò)數(shù)據(jù)資源之間的矛盾將進(jìn)一步加深。⑶萬維網(wǎng)數(shù)據(jù)形式的豐富和網(wǎng)絡(luò)技術(shù)的不斷開展,圖片、數(shù)據(jù)庫(kù),音頻、視頻多媒體等不同數(shù)據(jù)大量出現(xiàn),通用搜索引擎往往對(duì)這些信息含量密集且具有一定結(jié)構(gòu)的數(shù)據(jù)無能為力,不能很好地發(fā)現(xiàn)和獲取。(4)通用搜索引擎大多提供基于關(guān)鍵字的檢索,難以支持根據(jù)語義信息提出的查詢。為了解決上述問題,定向抓取相關(guān)網(wǎng)頁資源的聚焦爬蟲產(chǎn)生了。聚焦爬蟲是一個(gè)自動(dòng)下載網(wǎng)頁的程序,它根據(jù)既定的抓取目標(biāo),有選擇的訪問萬維網(wǎng)上的網(wǎng)
頁與相關(guān)的鏈接,獲取所需要的信息。與通用爬蟲不同,聚焦爬蟲并不追求大的覆蓋,而將目標(biāo)定為抓取與某一特定主題內(nèi)容相關(guān)的網(wǎng)頁,為面向主題的用戶查詢準(zhǔn)備數(shù)據(jù)資源。聚焦爬蟲能有效地利用網(wǎng)絡(luò)帶寬,減少網(wǎng)絡(luò)擁塞。相對(duì)于通用網(wǎng)絡(luò)爬蟲,聚焦爬蟲還需要解決三個(gè)主要問題〖8〗-對(duì)抓取目標(biāo)的描述或定義:對(duì)網(wǎng)頁或數(shù)據(jù)的分析與過濾;對(duì)鏈接地址的搜索策略。抓取目標(biāo)的描述和定義是決定網(wǎng)頁分析算法與鏈接地址搜索策略如何制訂的根底,而網(wǎng)頁分析算法和候選鏈接地址排序算法是決定搜索引擎所提供的效勞形式和鵬蟲網(wǎng)頁抓取行為的關(guān)鍵所在。一、基于分類器的聚焦爬蟲文獻(xiàn)[9]是具有代表性的聚焦爬蟲的早期研究之一,目前大多數(shù)的聚焦抓取都采用了類似的工作流程,其系統(tǒng)結(jié)構(gòu)如圖2-3所示。根據(jù)一個(gè)主題目錄和用戶指定的初始點(diǎn)來描述抓取目標(biāo),并在用戶瀏覽過程中,將用戶標(biāo)注的感興趣網(wǎng)頁放入相應(yīng)的主題目錄,修改主題樣本。系統(tǒng)的兩個(gè)主要局部是網(wǎng)頁分類器和網(wǎng)頁選擇器。網(wǎng)頁分類器負(fù)責(zé)學(xué)習(xí)抓取目標(biāo)的特點(diǎn),計(jì)算網(wǎng)頁的關(guān)聯(lián)度,并過濾網(wǎng)頁。選擇器負(fù)責(zé)計(jì)算網(wǎng)頁的重要程度,發(fā)現(xiàn)中心型網(wǎng)頁,并由此動(dòng)態(tài)決定網(wǎng)頁的訪問順序。PriorityC^tt-olCrawlerFrontierTaxonomyVTabley VjablesJ^—--rReadExamplesDistiller—CIa5sifier(Filtermg)"ClassifierCTraining)^^opic''''^VModels^2-3基于分類器聚焦爬蟲體系結(jié)構(gòu)【9]二、基于數(shù)據(jù)抽取器的聚焦爬蟲Extractor如圖2-4,聚焦爬蟲從網(wǎng)絡(luò)上發(fā)現(xiàn)所需要的資源網(wǎng)頁,傳遞給數(shù)據(jù)抽取器進(jìn)行數(shù)據(jù)抽取工作。數(shù)據(jù)抽取可能是對(duì)HiddenWeb之后的數(shù)據(jù)庫(kù)進(jìn)行探測(cè)查詢,也可能是通過wrapper或網(wǎng)頁外觀格式信息進(jìn)行數(shù)據(jù)抽取。得到的原數(shù)據(jù)將由數(shù)據(jù)分析器做分析和標(biāo)注,才能轉(zhuǎn)化為符合系統(tǒng)數(shù)據(jù)庫(kù)模式的結(jié)構(gòu)化數(shù)據(jù)進(jìn)行存儲(chǔ)和WWWWebpageCrawlerFeedbaclData、AnalyzerJ圖2*4基于數(shù)據(jù)抽取器的聚焦爬蟲體系結(jié)構(gòu)三、基于用戶學(xué)習(xí)的聚焦爬蟲協(xié)作聚焦爬蟲的體系結(jié)構(gòu)關(guān)鍵在于對(duì)用戶的瀏覽模式的學(xué)習(xí)模塊。文獻(xiàn)[10]的爬蟲體系結(jié)構(gòu)如圖2-5所示。系統(tǒng)通過記錄用戶在瀏覽到感興趣的網(wǎng)頁時(shí),點(diǎn)擊?有用〞按鈕的行為,記錄相關(guān)網(wǎng)頁,為用戶建立瀏覽模型。之后,系統(tǒng)對(duì)經(jīng)過標(biāo)注的網(wǎng)頁進(jìn)行LSI聚類,根據(jù)聚類結(jié)果構(gòu)建概念圖,表示不同類別之間的聯(lián)系。這樣,系統(tǒng)就可以利用不同網(wǎng)頁間的鏈接關(guān)系來學(xué)習(xí)用戶的瀏覽行為。
圖2-5基于用戶學(xué)習(xí)的聚焦爬蟲體系結(jié)構(gòu)2.3主題爬蟲目前的搜索引擎大多數(shù)是面向所有信息的,可稱之為綜合性搜索引擎。隨著信息多元化的增長(zhǎng),適用于所有用戶的綜合性搜索引擎已經(jīng)不能滿足特定用戶更深入地查詢需求,他們對(duì)信息的需求往往是針對(duì)受限領(lǐng)域和面向特定主題,綜合性搜索引擎的召回率和查準(zhǔn)率都比擬低。針對(duì)這種情況,需要一個(gè)分類細(xì)致精確、數(shù)據(jù)全面深入、更新及時(shí)的面向主題的搜索引擎。主題相關(guān)度的分析是主題爬蟲設(shè)計(jì)的關(guān)鍵,最簡(jiǎn)單的可以基于關(guān)鍵詞進(jìn)行分析,更深入的可以上升到語義和概念層次?;陉P(guān)鍵詞的主題相關(guān)度分析的主要思路:首先在領(lǐng)域?qū)<业膮⑴c下,確定一組帶有權(quán)重的能夠代表受限領(lǐng)域的關(guān)鍵詞,用來表示確定的主題;然后對(duì)頁面進(jìn)行關(guān)鍵詞提取,釆用向量空間模型算法計(jì)算網(wǎng)頁的主題相關(guān)度,從而決定頁面的取舍?;陉P(guān)鍵詞和基于概念的主題爬蟲系統(tǒng)都是以普通爬蟲為根底,對(duì)其進(jìn)行功能上的擴(kuò)充,在對(duì)網(wǎng)頁整個(gè)處理過程中增加主題確立模塊、優(yōu)化初始種子模塊、主題相關(guān)度分析模塊和排序模塊。如下圖,主題爬蟲的工作流程如下:第一步,爬行模塊取回網(wǎng)頁;第二步,調(diào)用相關(guān)度分析模塊,對(duì)網(wǎng)頁進(jìn)行相關(guān)度分析;第三步,爬行模塊根據(jù)分析的不同結(jié)果進(jìn)行相應(yīng)的處理;第四步,爬行模塊從數(shù)據(jù)庫(kù)取出等待處理的URL繼續(xù)工作,返回到第一步,直到?jīng)]有新的URL;第五步,對(duì)網(wǎng)頁的重要程度進(jìn)行排序。HTML文檔爬行模塊初始種子模塊‘們數(shù)據(jù)庫(kù)相關(guān)度分析模塊排序模塊圖2-6系統(tǒng)結(jié)構(gòu)[111本章主要介紹了網(wǎng)絡(luò)爬蟲的原理、工作流程和研究熱點(diǎn):聚焦爬蟲和主題爬蟲,分別介紹了它們的分類和體系結(jié)構(gòu)。
第3章AjaxCrawler概要設(shè)計(jì)的影響HTML語言是網(wǎng)絡(luò)世界進(jìn)行信息交換的最主要語言之一,HTML語言屬于一種標(biāo)記語言,它將純文本和格式化指令混合在一起反映格式化文本。HTML語法由標(biāo)記TAG和數(shù)據(jù)兩局部組成標(biāo)記TAG是’<’和’>’之間的局部,由標(biāo)記名和屬性組成。比方<ini)ut^e='button'value='ok'>,input是標(biāo)記名,type、value是屬性名,button、ok是屬性值,標(biāo)記名和屬性是大小寫無關(guān)的。HTML元素按功能分為三類:>用于表示HTML文檔結(jié)構(gòu)的元素,如list、table>用于表示HTML文檔顯示樣式的元素,如font、color>用于提供HTML文檔交互功能的元素,如form、script數(shù)據(jù)局部是HTML文擋中標(biāo)記以外的局部,一般解析這些數(shù)據(jù)為文字。—個(gè)HTML文檔通常包括如下三個(gè)局部->一個(gè)包含HTML版本信息的行>文檔頭局部,由元素HEAD標(biāo)識(shí)>文檔體局部,由元素BODY標(biāo)識(shí)下面是一個(gè)簡(jiǎn)單HTML文檔:<!DOCTYPEHTMLPUBLIC"-/AV3C//DTDHTML4.01//EN"“.dttr><HTML><HEAD><nTLE>thisisasample</nTLE></HEAD><BODY><P>Hello’world</BODY></HTML>互聯(lián)網(wǎng)上有不計(jì)其數(shù)的網(wǎng)頁,制作這些網(wǎng)頁的標(biāo)準(zhǔn)語言就是HTML語言,這些網(wǎng)頁包含很多鏈接,有指向其他網(wǎng)站網(wǎng)頁的,也有指向與自身同一效勞器網(wǎng)頁的,用戶通過點(diǎn)擊這些鏈接就可以從一個(gè)網(wǎng)頁跳到另一個(gè)網(wǎng)頁,這些鏈接使用統(tǒng)一資源定位符〔UniversalResourceLocator,URL)跳到其他網(wǎng)頁,URL是網(wǎng)頁和其他資源的地址。隨著網(wǎng)絡(luò)技術(shù)的開展,網(wǎng)站變得越來越復(fù)雜,網(wǎng)站開發(fā)從單純使用靜態(tài)HTML到使用HTML和腳本語言,從而實(shí)現(xiàn)更多的功能。如今,使用腳本代碼構(gòu)建網(wǎng)頁己經(jīng)比擬普遍,例如動(dòng)態(tài)生成網(wǎng)頁內(nèi)容,通常都需要利用很多變量和復(fù)雜的腳本,給網(wǎng)絡(luò)爬蟲抓取和分析此類網(wǎng)頁帶來很多困難。在腳本代碼用于網(wǎng)頁之前,所有的鏈接都是由HTML的<A>標(biāo)簽標(biāo)識(shí),網(wǎng)絡(luò)爬蟲只需要分析頁面中的<A>標(biāo)簽,就能比擬完整地抓取這個(gè)網(wǎng)站的網(wǎng)頁。但是隨著腳本代碼越來越多地用于網(wǎng)頁的邏輯處理、頁面呈現(xiàn)等等,尤其是近年來,隨著的興起,AJAX技術(shù)的流行,很多網(wǎng)站將腳本的應(yīng)用發(fā)揮到及至,極大地提高了用戶體驗(yàn)。Web的概念是2004年3月O'Reilly公司的DaleDougherty與MediaLive公司的CraigCline在一個(gè)頭腦風(fēng)暴會(huì)議上提出的。O'Reilly公司副總裁DaleDoughety在這次會(huì)議上指出,網(wǎng)絡(luò)非但沒有破滅,而且隨著許多令人沖動(dòng)的新程序和網(wǎng)站讓人驚訝的突然出現(xiàn),網(wǎng)絡(luò)比以往的作用更重要。Web是互聯(lián)網(wǎng)的一次理念和思想體系的升級(jí)換代,原來自上而下的、少數(shù)資源控制者集中控制主導(dǎo)的互聯(lián)網(wǎng)體系,現(xiàn)在轉(zhuǎn)變?yōu)樽韵露系?、由用戶集體智慧和力量主導(dǎo)的互聯(lián)網(wǎng)體系。Web內(nèi)在的動(dòng)力來源是將互聯(lián)網(wǎng)的主導(dǎo)權(quán)交還個(gè)人,從而充分開掘了個(gè)人的積極性。廣闊個(gè)人所奉獻(xiàn)的影響和智慧以及個(gè)人聯(lián)系形成的社群影響替代了原來少數(shù)人的影響,從而極大地解放了個(gè)人的創(chuàng)作和奉獻(xiàn)的潛能,使互聯(lián)網(wǎng)的創(chuàng)造力上升到了新的量級(jí)。Web不單純是技術(shù)或者解決方案,而是一套可執(zhí)行的理念體系,實(shí)踐著網(wǎng)絡(luò)社會(huì)化和個(gè)性化的理想。具體的說從模式上是單純的讀向?qū)?、共同建設(shè)的發(fā)展。Web是以Flickr、Tribes等網(wǎng)站為代表,以Blog、TAG、SNS、RSS、wiki等社會(huì)軟件的應(yīng)用為核心,依據(jù)六度分隔、分形、XML、AJAX等新理論和技術(shù)實(shí)現(xiàn)的互聯(lián)網(wǎng)新一代模式,3.1.2AJAX利用Web幵發(fā)應(yīng)用程序因其易于部署、節(jié)省本錢的特點(diǎn)而逐漸成為技術(shù)的主流,瀏覽器將是未來唯一需要的客戶端。J2EEWeb技術(shù)己經(jīng)從一個(gè)靜態(tài)的內(nèi)容提供環(huán)境迅速開展為一個(gè)在Intranet和Internet上運(yùn)行的動(dòng)態(tài)業(yè)務(wù)應(yīng)用程序的可靠平臺(tái)?過去幾年中在后端(后端機(jī)制,backendmechanics)投入了太多的時(shí)間,而在Web用戶界面對(duì)用戶交互和響應(yīng)靈敏方面卻投入缺乏。用戶在強(qiáng)大的業(yè)務(wù)邏輯背后,還忍受著‘‘提交一響應(yīng)一等待一刷新〞的同步運(yùn)行機(jī)制,不管在頁面呈現(xiàn)上的變化多么小,都需要耐心地等待效勞器將整個(gè)頁面重新發(fā)送給客戶端。為了構(gòu)建更為動(dòng)態(tài)和響應(yīng)更靈敏的Web應(yīng)用程序,實(shí)現(xiàn)瀏覽器和效勞器的異步并行處理,減輕效勞器端負(fù)擔(dān),JesseJamesGarrett提出了AJAXH3〗(AsynchronousJavaScriptandXML)這一新的概念,AJAX是一種創(chuàng)立交互式網(wǎng)頁應(yīng)用的網(wǎng)頁開發(fā)技術(shù),由多種技術(shù)組合而成,包括〖13]:>基于XHTML和CSS標(biāo)準(zhǔn)的表示;>?使用DocumentObjectModel進(jìn)行動(dòng)態(tài)顯示和交互;>使用XMLRequest對(duì)象與效勞器進(jìn)行異步通信;>使用JavaScript綁定一切。與傳統(tǒng)的Web開發(fā)不同,AJAX并不是以一種基于靜態(tài)頁面的方式來看待Web應(yīng)用的。從AJAX的角度看來,Web應(yīng)用應(yīng)由少量的頁面組成,其中每個(gè)頁面是一個(gè)更小型的AJAX應(yīng)用,每個(gè)頁面包括有一些使用JavaScript開發(fā)的AJAX組件。這些組件使用XMLlfequest對(duì)象以異步的方式與效勞器通信,從效勞器獲取需要的數(shù)據(jù)后使用DOMAPI來更新頁面內(nèi)容,與傳統(tǒng)Web應(yīng)用的比擬如圖3-1所示,在傳統(tǒng)的瀏覽器與效勞器的交互方式中,用戶瀏覽Web資源時(shí),首先由客戶端瀏覽器向Web效勞器發(fā)送請(qǐng)求。Web效勞器對(duì)用戶的請(qǐng)求進(jìn)行處理,并把處理結(jié)果以HTML頁面的形式返回給客戶端瀏覽器。當(dāng)用戶的請(qǐng)求在發(fā)送或Web效勞器在處理請(qǐng)求時(shí),用戶必須等待。另外用戶還經(jīng)常遇到僅僅是改變頁面的一小部?jī)?nèi)容,ITeb效勞器都要返回一個(gè)完整的ffeb頁,造成用戶每次都要浪費(fèi)時(shí)間和帶寬去重新讀取整個(gè)頁面。如圖3-2所示,AJAX的工作原理相當(dāng)于在用戶和效勞器之間加了一個(gè)中間層一一AJAX引擎,使用戶操作與效勞器響應(yīng)異步化并不是所有的用戶請(qǐng)求都提交給效勞器。一些數(shù)據(jù)驗(yàn)證和處理由AJAX來做而不必交給效勞器處理,只有確定需要從效勞器讀取新數(shù)據(jù)時(shí)再由AJAX引擎向效勞器提交請(qǐng)求。在使用AJAX引擎后,用戶從感覺上幾乎所有的操作都會(huì)很快響應(yīng),并且沒有頁面重載(白屏)的等待?AJAX引擎實(shí)際上是一個(gè)比擬復(fù)雜的JavaScript應(yīng)用程序,用來處理用戶請(qǐng)求然后根據(jù)需要?jiǎng)討B(tài)讀寫效勞器和更改DOM內(nèi)容。以前為了使網(wǎng)頁能無縫化重構(gòu),也就是在頁面已經(jīng)下載完畢后改變頁面內(nèi)容,開發(fā)人員_直通過JavaScript和DOM來實(shí)現(xiàn)。但是要使網(wǎng)頁真正動(dòng)態(tài)起來,不僅需要內(nèi)部的互動(dòng),還需要從外部獲取數(shù)據(jù),在XMLReciuest對(duì)象出現(xiàn)以前是讓用戶來輸入數(shù)據(jù)并通過DOM來改變網(wǎng)頁內(nèi)容的,但現(xiàn)在XMLRequest對(duì)象可以在不重新載入頁面的情況下讀寫效勞器上的數(shù)據(jù),使用戶的輸入到達(dá)最少。AJAX引擎允許用戶與應(yīng)用軟件之間的交互過程異步進(jìn)行,獨(dú)立于用戶與網(wǎng)絡(luò)效勞器間的交流。所以就算當(dāng)請(qǐng)求和響應(yīng)在引擎和效勞器之間被來回傳送,用戶還是能與應(yīng)用程序交互。從而可以用JavaScript調(diào)用AJAX引擎來代替產(chǎn)生一個(gè)的用戶動(dòng)作,同時(shí)引擎本身能夠立即處理不需要請(qǐng)求效勞器的動(dòng)作,就像桌面應(yīng)用程序處理一樣,例如在內(nèi)存中編輯數(shù)據(jù),驗(yàn)證數(shù)據(jù)等。dassk:webapplicatk^(syrKJin^KHs):Ajaxwebapplk^tionmod^(asywrftronoi^)M^vMl偏 server德同步交互〔上〕和異步交互〔下〕的比擬【13〗server-sidesystemssei^er'sidesystems圖3-2傳統(tǒng)Web應(yīng)用和基于AJAX的Web應(yīng)用的比擬XMLRequestAJAX的核心是JavaScript對(duì)象XMLRequest,簡(jiǎn)稱為XHR,是AJAX引擎解決無需刷新整個(gè)頁面就可以從效勞器獲取數(shù)據(jù)的關(guān)鍵所在,該對(duì)象在InternetExplorer5中首次引入,是一種支持異步請(qǐng)求的技術(shù)。簡(jiǎn)而言之,XHR為運(yùn)行于瀏覽器中的JavaScript腳本提供了一種在頁面之內(nèi)與效勞器通信的手段。員面內(nèi)的JavaScript可以在不刷新頁面的情況下從效勞器獲取數(shù)據(jù),或者向效勞器提交數(shù)據(jù)。XHR的出現(xiàn)為Web開發(fā)提供了一種全新的可能性,甚至整個(gè)改變了人們對(duì)于Web應(yīng)用由什么來組成的看法,它可以使我們以一種全新的方式來做ffeb開發(fā),為用戶提供更好的交互體驗(yàn)。在微軟IE平臺(tái)下XHR是XML組件一個(gè)對(duì)象,它通過允許幵發(fā)人員在Web頁面內(nèi)部使用XMLActive)(組件擴(kuò)展自身的功能,開發(fā)人員可以不用從當(dāng)前的Web頁面導(dǎo)航而直接傳輸數(shù)據(jù)到效勞器上或者從效勞器取數(shù)據(jù)。這個(gè)功能是很重要的,因?yàn)樗鼛椭鷾p少了無狀態(tài)連接的痛苦,還可以排除下載冗余web數(shù)據(jù)的需
要。在其他Web瀏覽器平臺(tái)下,例如Mozilla,Konqueror和Opera,也創(chuàng)立了自己的m代理類一一XMLRequest類。對(duì)于大多數(shù)情況,XMLRequest對(duì)象和XML組件很相似,方法和屬性也類似,如下表所示:表3]XMLRequest對(duì)象方法方法描述Abort停止當(dāng)前請(qǐng)求getAllResponseHeaders返回完整的heads,字符串類型getResponseHeader返回單個(gè)header標(biāo)簽,字符串類型Open設(shè)置請(qǐng)求目標(biāo)URL,方法和其他參數(shù)Send發(fā)送請(qǐng)求setRequestHeader設(shè)置header并和請(qǐng)求一起發(fā)送表3-2XMLRequest對(duì)象屬性屬性描述onreadystatechange狀態(tài)改變的事件觸發(fā)器readyState對(duì)象狀態(tài)—未初始化—讀取中—已讀取-交互中—完成responseText效勞器返回的文本responseXMLStatus效勞器返回的狀態(tài)碼,如404文件未找到200—成功statusText效勞器返回的狀態(tài)文本信息優(yōu)點(diǎn)AJAX具有如下優(yōu)點(diǎn)-⑴減輕效勞器的負(fù)擔(dān)^AJAX的原那么是“按需取數(shù)據(jù)〞,最大程度地減少冗余的請(qǐng)求和響應(yīng)對(duì)效勞器造成的負(fù)擔(dān),同時(shí)AJAX可以把原來需要效勞器做的許多事情放到客戶端來做。(2)無刷新更新頁面——減少用戶等待時(shí)間。特別的,當(dāng)要讀取大量的數(shù)據(jù)時(shí),不會(huì)出現(xiàn)白屏或訪問超時(shí)的情況。在數(shù)據(jù)的讀取過程中,用戶所面對(duì)的是原來的頁面內(nèi)容(一般頁面上有一個(gè)正在加載的提示框)。只有當(dāng)數(shù)據(jù)接收完畢之后才更新相應(yīng)局部的內(nèi)容,而這種更新是瞬間的,用戶難以發(fā)覺。(3>帶來更好的用戶體驗(yàn)——由于用戶等待時(shí)間的減少,提高了用戶網(wǎng)絡(luò)體驗(yàn)的質(zhì)量。充分利用資源——^ffi—些傳統(tǒng)方式下由效勞器負(fù)擔(dān)的工作轉(zhuǎn)移到客戶端。利用客戶端閑置的能力來處理數(shù)據(jù),減輕效勞器和網(wǎng)絡(luò)的負(fù)擔(dān),節(jié)約空間和帶寬租用本錢??梢哉{(diào)用外部數(shù)據(jù)?;跇?biāo)準(zhǔn)化的并被廣泛支持的技術(shù),不需要下載插件或者小程序。進(jìn)一步促進(jìn)頁面呈現(xiàn)和數(shù)據(jù)的別離,AJAX在整個(gè)Web效勞系統(tǒng)的位置決定了AJAX引擎只要從效勞端獲取XML或者其他格式的數(shù)據(jù),便可定制整個(gè)Web界面。從而可以使得效勞端注重?cái)?shù)據(jù)邏輯處理而不必關(guān)心Web界面的呈現(xiàn),將數(shù)據(jù)呈現(xiàn)的工作交給AJAX引擎來做,這樣有利于分工合作、減少非技術(shù)人員對(duì)頁面的修改造成的Web應(yīng)用程序錯(cuò)誤、提高效率,更加適用于現(xiàn)在的發(fā)布系統(tǒng)。AJAX提升了用戶體驗(yàn),但同時(shí)給網(wǎng)絡(luò)爬蟲的抓取帶來了極大的挑戰(zhàn),因?yàn)楹芏囗撁鎯?nèi)容都是通過異步向效勞器發(fā)請(qǐng)求后得到,而傳統(tǒng)的爬蟲僅僅分析靜態(tài)HTML頁面里的超鏈接,顯然,在利用AJAX技術(shù)的網(wǎng)站中使用傳統(tǒng)爬蟲抓取網(wǎng)頁是不夠的,抓取的信息很不完善,這將導(dǎo)致搜索引擎查詢結(jié)果準(zhǔn)確率的下降,因此有必要設(shè)計(jì)新的爬蟲,能夠支持AJAX,并且截獲異步調(diào)用返回的結(jié)果,以及分析由此結(jié)果生成的新內(nèi)容,盡可能多的抓取頁面信息??傮w結(jié)構(gòu)對(duì)于使用AJAX技術(shù)的網(wǎng)站,比方網(wǎng)易博客〖i4],使用firefox瀏覽器翻開,然后查看網(wǎng)頁源碼,重點(diǎn)查看每日推薦的內(nèi)容,如圖3-3很容易發(fā)現(xiàn)源碼里的內(nèi)容遠(yuǎn)少于頁面呈現(xiàn)的東西,從圖3-4中看到呈現(xiàn)每日推薦內(nèi)容的HTML元素是id為recomDailyContent的div節(jié)點(diǎn),源碼中此元素一點(diǎn)內(nèi)容都沒有,但是頁面上每日推薦卻有很多內(nèi)容〔超鏈接〕,因此可知此頁面內(nèi)容都是通過后加載方式利用DOM操作動(dòng)態(tài)呈現(xiàn)出來的,用戶發(fā)覺不出來。田拷,米蘭倫P米蘭vs?羅倫南山樵夫,那淡淡的藍(lán)色倜悵貝克漢姆打抗老針羅納爾多不希望小羅加盟米蘭弗誇爺基恩師徒同時(shí)奪冠斑馬動(dòng)態(tài)布馮轉(zhuǎn)會(huì)寅成再克雪斯波去尤文火箭,生的偉大,死的不榮耀駄奔南 成艦?職招糊雅典湖來了■花開-滾蛋的永遠(yuǎn)是軟蛋歐冠集鮮的米蘭隊(duì)敢"去吧!華仔!對(duì)蕃你的目標(biāo)I“立體決fitft七〔附ffl)僵尸王I受m為年輕付出代價(jià)W^J體宵菊野輛ffiS^的跡“臥底"鄉(xiāng)月領(lǐng)銜NBA坂無間道火箭隊(duì)缺乏一種頼氣3-3網(wǎng)易博客的每日推薦頁面呈現(xiàn)-?"><?hr.f='r</div> ‘?曰鮮1|4~>ftsuplHUuirRiCHiTik'ick=-onrl;■t'丨XdiTcl.?='.'X?hrcf^'t"ondiclp-rilarn 人文</?></drrX/lXdivcUs,="?*X4 inidiclt='rtturnfil?.*>50輕</?></dirX/l<4itilup'.'Xihrtf='rmtlidP'r.tmi </?></iUt></1iVdiF'Uietdii'Wh.■>??</?X('dlT></ll>fiiii,'端糾?>vd>v><ai>filsi,">tt^</?></di.^X/li?></dlTX/ll圖34網(wǎng)易博客每日推薦的頁面源碼片段我們知道,傳統(tǒng)爬蟲是通過頁面源碼中的超鏈接標(biāo)簽在互聯(lián)網(wǎng)上漫游的,而從上面的例子可以看到,頁面源碼里的超鏈接個(gè)數(shù)是少于頁面呈現(xiàn)中的超鏈接個(gè)數(shù)的,也就是說傳統(tǒng)爬蟲抓取的內(nèi)容是不完整的,這對(duì)于搜索引擎是不利的。針對(duì)傳統(tǒng)爬蟲的缺乏,AjaxCrawler將重點(diǎn)分析頁面后加載的內(nèi)容,也就是通過分析頁面中的js文件和js代碼,模擬瀏覽器的行為,根據(jù)后加載的內(nèi)容執(zhí)行DOM操作后得到真正的頁面信息,支持AJA)(的爬蟲由網(wǎng)頁抓取模塊、網(wǎng)頁分析模塊、JS解析模塊,DOM支持模JS代碼和文件DO]iM操作代碼圖3-5支持AJAX的爬蟲總體結(jié)構(gòu)網(wǎng)頁抓取模塊主要是通過請(qǐng)求,獲取需要抓取的頁面。網(wǎng)頁分析模塊主要是分析頁面元素信息,和傳統(tǒng)爬蟲不同的是,AjaxCrawler不僅僅分析頁面中的<A>標(biāo)簽和頁面內(nèi)容,還分析<SCRIPT>標(biāo)簽,如果是JavaScript腳本文件,那么通過請(qǐng)求獲取此文件然后保存到本地;如果是腳本代碼,新建臨時(shí)文件存儲(chǔ)在本地,供JS解析模塊使用。JS解析模塊主要執(zhí)行上一模塊中得到的JS代碼,這些代碼往往包含AJAX調(diào)用,獲取從效勞器返回的請(qǐng)求內(nèi)容,得到內(nèi)容后通過DOM支持模塊,在頁面中添加或者修改HTML元素,因此DOM支持模塊主要是支持類似瀏覽器中的DOM操作,最后,頁面生成模塊利用上一模塊的結(jié)果重新組合生成新的頁面內(nèi)容,然后提取頁面中的超鏈接和文本內(nèi)容。關(guān)鍵技術(shù)JavaScript的解析浙江大學(xué)碩士學(xué)位論文 塊、頁面生成模塊五局部組成,如下列圖所示。網(wǎng)頁抓取模塊網(wǎng)頁分析模塊傳統(tǒng)爬蟲抓取網(wǎng)頁后僅僅分析頁面源碼中的<八:>標(biāo)簽,然后通過這些超鏈接去抓取另外的網(wǎng)頁,但是對(duì)于那些使用AJAX技術(shù)的網(wǎng)頁,頁面源碼中的內(nèi)容比較少,更多的內(nèi)容是AJAX通過異步調(diào)用的方式后加載出來的,在頁面源碼中這些內(nèi)容都不存在,所以必須分析頁面源碼中的JavaScript代碼,找到那些調(diào)用了AJAX的代碼,然后執(zhí)行這些代碼從而獲取從效勞器返回的數(shù)據(jù),為了能夠執(zhí)行
浙g大學(xué)碩士學(xué)位論文 第3章AjaxCrawler概要設(shè)計(jì)這些代碼,需要實(shí)現(xiàn)JavaScript解析器。操作的解析對(duì)于使用AJAX技術(shù)的網(wǎng)站,嵌入網(wǎng)頁源碼的JavaScript代碼中往往包含修改DOM樹的語句,例如改變某個(gè)頁面元素的內(nèi)容、隱藏某個(gè)頁面元素等等,AJAX正是利用這些JavaScript代碼動(dòng)態(tài)改變頁面內(nèi)容的呈現(xiàn)。由于JavaScript解析器是解析純JavaScript代碼的,對(duì)于這些操作DOM樹的代碼并不支持,因?yàn)镴avaScript解析器并不知道將被修改的頁面元素,因此需要在JavaScript解析器的根底上支持JS代碼中的DOM操作,主要有獲取頁面元素、修改頁面元素的內(nèi)容等。經(jīng)過JavaScript解析和JS代碼中DOM操作的解析,最終可以得到和頁面呈現(xiàn)根本一致的頁面內(nèi)容,為分折頁面中的超鏈接和文本內(nèi)容做好準(zhǔn)備。本章小結(jié)本章主要介紹了Web對(duì)爬蟲的影響和支持AJAX爬蟲的設(shè)計(jì),對(duì)AjaxCmwler進(jìn)行了整體性的描述和概要的內(nèi)部流程描述,最后介紹了AjaxCtawler的關(guān)鍵技術(shù)。第4章AjaxCrawler的實(shí)現(xiàn)協(xié)議(HyperTextTransferProtocol,超文本傳輸協(xié)議〕是為分布式和合作式超媒體信息系統(tǒng)設(shè)計(jì)的協(xié)議,是一種無狀態(tài)、無連接、面向?qū)ο蟮膮f(xié)議,具有簡(jiǎn)單、靈活等特點(diǎn),能滿足簡(jiǎn)單數(shù)據(jù)傳輸?shù)男枰荳WW的標(biāo)準(zhǔn)通信協(xié)議。網(wǎng)絡(luò)爬蟲在萬維網(wǎng)上的信息采集都是通過協(xié)議實(shí)現(xiàn)的’下面介紹實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲中需要用到的主要方法和信息頭格式[12】。一、的信息頭協(xié)議利用信息頭來描述每次事務(wù)的處理,主要的信息頭和信息域的定義如下:請(qǐng)求頭〔Request Headers)User-Agent:客戶名及版本號(hào);From:客戶端使用者信息;Accept:客戶端可接受的數(shù)據(jù)類型;Accept-Charset:客戶端可接受的字符集;Accept-Language:客戶端能理解的語言。應(yīng)答頭(Response Headers)-Version:效勞器支持的版本號(hào)Status-code:效勞器處理本次請(qǐng)求的狀態(tài)碼,常見的有:200正常400請(qǐng)求錯(cuò)誤404請(qǐng)求的資源未找到500效勞器內(nèi)部錯(cuò)誤請(qǐng)求的資源已經(jīng)移動(dòng)請(qǐng)求的資源被臨時(shí)移動(dòng)Server:Web效勞器軟件名和版本號(hào);Last-Modified:客戶端請(qǐng)求資源的最后修改時(shí)間;Content-Length:本次傳輸數(shù)據(jù)的長(zhǎng)度;Content-Type:本次傳送數(shù)據(jù)的類型,由效勞器根據(jù)文件擴(kuò)展名決定;Content-Transfer-Encoding:表示效勞器采用的編碼機(jī)制:Content-Language:標(biāo)識(shí)本次傳送數(shù)據(jù)采用的語言種類。二、的主要方法方法〔Method)描述了在指定資源上將要執(zhí)行的動(dòng)作,協(xié)議中定義了多種方法,其中最常用的如下-GET:負(fù)責(zé)取回指定資源HEAD:請(qǐng)求效勞器傳送指定資源的大小、最后更改時(shí)間等描述性信息POST:用于客戶端向效勞器發(fā)送數(shù)據(jù),主要是發(fā)送FORM內(nèi)容,供效勞器端處理。起始URL是網(wǎng)絡(luò)爬蟲的搜索起點(diǎn),起點(diǎn)選擇的不同會(huì)影響到信息搜集的效果,在實(shí)際應(yīng)用中,根據(jù)信息發(fā)現(xiàn)系統(tǒng)的具體目的選擇適當(dāng)?shù)钠鹗嫉刂?。搜索引擎系統(tǒng)的目標(biāo)是盡量廣泛地采集和索引Web頁面,對(duì)采集文檔有質(zhì)量性和覆蓋性的要求,即采集的Web文檔應(yīng)該是那些質(zhì)量較好、用戶認(rèn)可度高且是平均分散在整個(gè)網(wǎng)絡(luò)中的頁面。因此,搜索引擎系統(tǒng)中網(wǎng)絡(luò)爬蟲的起始地址選擇比擬關(guān)鍵,一般釆用如下的策略:選擇訪問人數(shù)多的站點(diǎn)地址為起始地址;選擇高質(zhì)量的綜合性站點(diǎn)地址為起始地址;根據(jù)域名的劃分選擇起始地址;根據(jù)地理區(qū)域的劃分選擇起始地址;根據(jù)IP地址的區(qū)段選擇起始地址在搜索引擎中,由于系統(tǒng)對(duì)信息的需求是有目標(biāo)的,因而對(duì)網(wǎng)絡(luò)所抓取的文擋有目的性要求,即所抓取的文檔應(yīng)盡量與信息發(fā)現(xiàn)目標(biāo)相關(guān)??砂凑杖缦路椒ù_定網(wǎng)絡(luò)爬蟲的起始地址:首先根據(jù)發(fā)現(xiàn)目標(biāo)提取目標(biāo)特征描述,再根據(jù)目標(biāo)特征描述在Yahoo等著名的資源索引與檢索系統(tǒng)中進(jìn)行查詢,取各站點(diǎn)返回的結(jié)果地址作為網(wǎng)絡(luò)爬蟲釆集的起始地址,萬維網(wǎng)是一個(gè)超大型的超文本系統(tǒng),信息容量極為龐大,為了提高檢索系統(tǒng)信息釆集的效率,檢索系統(tǒng)一般可同時(shí)運(yùn)行多個(gè)網(wǎng)絡(luò)爬蟲,并行采集Web文檔。并行文檔釆集是通過將所漫游的萬維網(wǎng)空間劃分為多個(gè)子空間,在每個(gè)子空間中運(yùn)行一個(gè)網(wǎng)絡(luò)爬蟲實(shí)現(xiàn)的,而且漫游空間的劃分便于對(duì)網(wǎng)絡(luò)爬蟲漫游路徑與漫游范圍的控制。對(duì)網(wǎng)絡(luò)爬蟲漫游空間的劃分與控制策略主要有三種:按域名空間劃分漫游空間按照域名進(jìn)行劃分,如按照“.edu〞、“〞等域名后綴進(jìn)行劃分,具體劃分時(shí)可根據(jù)子空間的大小取不同級(jí)次域名進(jìn)行劃分。按照域名劃分空間可使網(wǎng)絡(luò)爬蟲所采集到的網(wǎng)頁相對(duì)集中,有利于后續(xù)處理。按地理空間劃分漫游子空間可以按照國(guó)家、地區(qū)、省份等地理區(qū)域進(jìn)行劃分,這樣劃分可以使網(wǎng)絡(luò)爬蟲所要漫游的效勞器相對(duì)集中于某個(gè)地域或網(wǎng)段內(nèi),釆集網(wǎng)頁的時(shí)延相差比擬小,有利于對(duì)網(wǎng)絡(luò)爬蟲和后處理模塊的負(fù)載均衡,也能保證所釆集到的文檔有一定的地理覆蓋性。按IP地址空間劃分這種劃分是比擬簡(jiǎn)單的劃分規(guī)那么,可根據(jù)子空間的大小取不同區(qū)間的地址為子空間,按地址劃分有利于對(duì)漫游范圍的控制,使得網(wǎng)絡(luò)爬蟲漫游到子空間內(nèi)所網(wǎng)絡(luò)爬蟲是搜索引擎系統(tǒng)的重要組成局部,幾乎每一個(gè)搜索引擎系統(tǒng)都運(yùn)行自己的網(wǎng)絡(luò)爬蟲進(jìn)行信息采集。每個(gè)Web頁面的采集都要經(jīng)過資源請(qǐng)求、效勞器應(yīng)答和網(wǎng)絡(luò)信息傳送三個(gè)階段才能下載到本地,所有效勞器間的通信與文檔下載都需要經(jīng)過Internet的傳送,網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)量很大,將大幅度增加網(wǎng)絡(luò)和服務(wù)器的負(fù)載。因此,網(wǎng)絡(luò)爬蟲使用不當(dāng)或過分使用都會(huì)使網(wǎng)絡(luò)和被訪問效勞器的負(fù)載增大,甚至造成網(wǎng)絡(luò)傳輸?shù)膿砣蚖eb應(yīng)用效勞器的崩浪。另一方面,由于萬維網(wǎng)是一個(gè)復(fù)雜的異構(gòu)信息效勞網(wǎng)絡(luò),網(wǎng)絡(luò)中可能存在一?鏈接“黑洞〞〔如由一些數(shù)據(jù)庫(kù)或CGI程序動(dòng)態(tài)生成的頁面,網(wǎng)絡(luò)爬蟲一旦陷入就很難擺脫〕和一些廢棄的頁面,網(wǎng)絡(luò)爬蟲不應(yīng)去采集這些信息。所以為了減輕網(wǎng)絡(luò)爬蟲程序?qū)W(wǎng)絡(luò)和效勞器的巨大負(fù)載,保證網(wǎng)絡(luò)爬蟲不影響其他系統(tǒng)正常工作,并使網(wǎng)絡(luò)爬蟲保持正常、有效地運(yùn)行,有必要對(duì)爬蟲的漫游行為采取適當(dāng)?shù)目刂?。主要有下面幾個(gè)原那么:(1)標(biāo)識(shí)網(wǎng)絡(luò)爬蟲爬蟲在運(yùn)行時(shí),應(yīng)在協(xié)議的User-Agent域中標(biāo)識(shí)出是網(wǎng)絡(luò)爬蟲客戶,并在From域中標(biāo)識(shí)出使用者的聯(lián)系方法。這樣做可以使得被訪問用戶能夠與網(wǎng)絡(luò)爬蟲的使用者保持聯(lián)系,假設(shè)被訪問系統(tǒng)受到爬蟲的干擾,可及時(shí)通知爬蟲的使用者進(jìn)行修正。并且網(wǎng)絡(luò)爬蟲應(yīng)在擁有域名的機(jī)器上運(yùn)行,使被訪問用戶能識(shí)別網(wǎng)絡(luò)爬蟲的運(yùn)行位置。合理采集資源為了降低爬蟲對(duì)網(wǎng)絡(luò)和被訪問系統(tǒng)的影響,應(yīng)合理采集資源。爬蟲發(fā)送請(qǐng)求的速度不要太快,否那么被訪問系統(tǒng)可能會(huì)因?yàn)檫^多的效勞請(qǐng)求而崩澳。因此,在向同一個(gè)效勞器發(fā)送請(qǐng)求時(shí),應(yīng)保持一定的時(shí)間間隔,此間隔需根據(jù)網(wǎng)絡(luò)狀況與效勞器能力而定,并且爬蟲應(yīng)在網(wǎng)絡(luò)負(fù)載較輕的夜間運(yùn)行。在對(duì)一個(gè)效勞器進(jìn)行刷新訪問時(shí),應(yīng)先讀取請(qǐng)求頁面的頭信息,判斷頁面自上次訪問后有無變化,假設(shè)確定發(fā)生變化再進(jìn)行讀取,并根據(jù)各效勞器信息資源的更新周期確定對(duì)效勞器資源的刷新訪問頻率。在發(fā)送請(qǐng)求時(shí)還應(yīng)在請(qǐng)求頭的Acc印t域中標(biāo)識(shí)出爬蟲需要的資源種類,減輕效勞器的壓力。利用Robot,txt是Web應(yīng)用效勞器專門向爬蟲程序提供的用來描述本身資源的信息元文件,般存儲(chǔ)于效勞器的根目錄。包含了自身資源結(jié)構(gòu)描述、內(nèi)容描述和更新時(shí)間等信息,并注明了哪瘦資源爬蟲可以采集、哪些禁止采集。中不允許采集的內(nèi)容一般是黑洞頁面、動(dòng)態(tài)頁面、過期頁面、未完成或有錯(cuò)誤的頁面和擁有者不愿公開的頁面。現(xiàn)在Robot,txt所釆用的描述格式一般都遵循MartinKoster所制訂的網(wǎng)絡(luò)爬蟲排他標(biāo)準(zhǔn)〔StandardforRobotExclusion,SRE),在SRE中定義了User-Agent和Disallow兩個(gè)描述域,用來標(biāo)識(shí)對(duì)特定網(wǎng)絡(luò)爬蟲的禁止訪問區(qū)域。因此在爬蟲訪問某臺(tái)效勞器時(shí),應(yīng)首先讀取并分析效勞器的Robot,txt文件〔絕大多數(shù)正式Web應(yīng)用效勞器都向網(wǎng)絡(luò)爬蟲程序提供此文件〕’這樣既可以提高網(wǎng)絡(luò)爬蟲的運(yùn)行效率和文檔采集的有效性,又可以減少對(duì)被訪問系統(tǒng)的不利影響。4.1.5內(nèi)容提取對(duì)于網(wǎng)頁內(nèi)容的提取,一直是網(wǎng)絡(luò)爬蟲中重要的技術(shù)。整個(gè)系統(tǒng)一般采用插件的形式,通過一個(gè)插件管理效勞程序,遇到不同格式的網(wǎng)頁采用不同的插件處理。這種方式的好處在于擴(kuò)充性好,以后每出現(xiàn)一種新的類型,就可以把其處理方式做成一個(gè)插件補(bǔ)充到插件管理效勞程序之中。對(duì)于doc、Pdf等文檔,這種由專業(yè)廠商提供的軟件生成的文檔,廠商都會(huì)提供相應(yīng)的文本提取接口?網(wǎng)絡(luò)爬蟲只需要調(diào)用這些插件的接口,即可提取文檔中的文本信息和文件其它相關(guān)的信息。HTML等文檔不一樣,HTML有一套自己的語法?通過不同的命令標(biāo)識(shí)符來表示不同的字體、顏色、位置等版式,提取文本信息時(shí)需要把這些標(biāo)識(shí)符都過濾掉。對(duì)于多媒體、圖片等文件,一般是通過鏈接的描文本(即鏈接文本)和相關(guān)的文件注釋來判斷這些文件的內(nèi)容。例如有一個(gè)鏈接文字為“劉德華照片〞,其鏈接指向一張jpg格式的圖片,那么爬蟲就知道這張圖片的內(nèi)容是“劉德華的照片〞。這樣,在搜索“劉德華"和‘‘照片〞時(shí)都能讓搜索引擎找到這張圖片。另外,許多多媒體文件中有文件屬性,提取這些屬性也可更好地了解文件的內(nèi)容。本模塊根據(jù)超鏈接地址通過請(qǐng)求獲得相應(yīng)的網(wǎng)頁,根據(jù)返回的狀態(tài)碼判定當(dāng)前URL是否有錯(cuò),如果有錯(cuò)直接返回錯(cuò)誤信息;如果不能連接或連接超時(shí),設(shè)定重連次數(shù),最終得到此頁面或者返回錯(cuò)誤信息?!?、網(wǎng)絡(luò)編程根本概念,TCP/IP協(xié)議簡(jiǎn)介網(wǎng)絡(luò)根底知識(shí)網(wǎng)絡(luò)編程的目的就是指直接或間接地通過網(wǎng)絡(luò)協(xié)議與其他計(jì)算機(jī)進(jìn)行通訊.網(wǎng)絡(luò)編程中有兩個(gè)主要的問題,一個(gè)是如何準(zhǔn)確的定位網(wǎng)絡(luò)上一臺(tái)或多臺(tái)主機(jī),另一個(gè)就是找到主機(jī)后如何可靠高效的進(jìn)行數(shù)據(jù)傳輸。在TCP/IP協(xié)議中IP層主要負(fù)責(zé)網(wǎng)絡(luò)主機(jī)的定位,數(shù)據(jù)傳輸?shù)穆酚?,由IP地址可以唯一地確定Internet上的一臺(tái)主機(jī)。而TCP層那么提供面向應(yīng)用的可靠的或非可靠的數(shù)據(jù)傳輸機(jī)制,這是網(wǎng)絡(luò)編程的主要對(duì)象,一般不需要關(guān)心IP層是如何處理數(shù)據(jù)的。目前較為流行的網(wǎng)絡(luò)編程模型是客戶機(jī)/效勞器〔C/S)結(jié)構(gòu),即通信雙方的一方作為效勞器等待客戶提出請(qǐng)求并予以響應(yīng)??蛻裟敲丛谛枰跁r(shí)向效勞器提出申請(qǐng)。效勞器一般作為守護(hù)進(jìn)程始終運(yùn)行,監(jiān)聽網(wǎng)絡(luò)端口,一且有客戶請(qǐng)求,就會(huì)啟動(dòng)一個(gè)效勞進(jìn)程來響應(yīng)該客戶,同時(shí)自己繼續(xù)監(jiān)聽效勞端口,使后來的客戶也能及時(shí)得到效勞。兩類傳輸協(xié)議:TCP和UDP雖然TCP/IP協(xié)議的名稱中只有TCP這個(gè)協(xié)議名,但是在TCP/IP的傳輸層存在TCP和UDP兩個(gè)協(xié)議。(1)TCP是TransferControlProtocol的簡(jiǎn)稱,是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過TCP協(xié)議傳輸,得到的是一個(gè)順序的無過失的數(shù)據(jù)流。發(fā)送方和接收方的兩個(gè)socket之間建立連接,以便在TCP協(xié)議的根底上進(jìn)行通信,當(dāng)一個(gè)socket(通常都是serversocket)等待建立連接時(shí),另一個(gè)socket可以要求進(jìn)行連接,一旦這兩個(gè)socket連接起來,它們就可以進(jìn)行雙向數(shù)據(jù)傳輸,雙方都可以進(jìn)行發(fā)送或接收操作。UDP是UserDatagramProtocol的簡(jiǎn)稱,是一種無連接的協(xié)議,每個(gè)數(shù)據(jù)包都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的,兩種協(xié)議的比擬-使用UDP時(shí),每個(gè)數(shù)據(jù)包中都給出了完整的地址信息,因此無需建立發(fā)送方和接收方的連接-對(duì)于TCP協(xié)議,由于它是一個(gè)面向連接的協(xié)議,在socket之間進(jìn)行數(shù)據(jù)傳輸之前必須建立連接,所以在TCP中多了一個(gè)連接建立的時(shí)間。使用UDP傳輸數(shù)據(jù)時(shí)是有大小限制的,每個(gè)被傳輸?shù)臄?shù)據(jù)包必須限定在64KB之內(nèi)。而TCP沒有這方面的限制,一且連接建立起來,雙方的socket就可以按統(tǒng)一的格式傳輸大量的數(shù)據(jù)-UDP是一個(gè)不可靠的協(xié)議,發(fā)送方所發(fā)送的數(shù)據(jù)包并不一定以相同的次序到達(dá)接收方。而TCP是一個(gè)可靠的協(xié)議,它確保接收方完全正確地獲取發(fā)送方所發(fā)送的全部數(shù)據(jù)。總之,TCP在網(wǎng)絡(luò)通信上有極強(qiáng)的生命力,例如遠(yuǎn)程連接(Telnet)和文件傳輸〔FTP)都需要不定長(zhǎng)度的數(shù)據(jù)被可靠地傳輸。相比之下UDP操作簡(jiǎn)單,而且僅需要較少的監(jiān)護(hù),因此通常用于局域網(wǎng)高可靠性的分散系統(tǒng)中client/server應(yīng)用程序,UDP協(xié)議的存在,主要有兩個(gè)原因,一是可靠的傳輸需要付出代價(jià),對(duì)數(shù)據(jù)內(nèi)容正確性的檢驗(yàn)占用計(jì)算機(jī)的處理時(shí)間和網(wǎng)絡(luò)帶寬,因此TCP傳輸?shù)男什蝗鏤DP髙。二是在許多應(yīng)用中并不需要保證嚴(yán)格的傳輸可靠性,比方視頻會(huì)議系統(tǒng),并不要求音頻視頻數(shù)據(jù)絕對(duì)的正確,只要保證連貫性即可,這種情況下使用UDP更合理,二、Java網(wǎng)絡(luò)編程1.統(tǒng)一資源定位器URLURL表示Internet上某一資源的地址。通過URL可以訪問Internet上的各種網(wǎng)絡(luò)資源,比方最常見的WWW,F(xiàn)TP站點(diǎn)。瀏覽器通過解析給定的URL可以在網(wǎng)絡(luò)上查找相應(yīng)的文件或其他資源。URL的組成格式如下:protocol://resourceName,協(xié)議名(protocol)標(biāo)識(shí)獲取資源所使用的傳輸協(xié)議,如、ftp、gopher、file等,資源名〔resourcename)是資源的完整地址,包括主機(jī)名、端口號(hào)、文件名或文件內(nèi)部的一個(gè)引用。例如:.RQO/是協(xié)議名://主機(jī)名./indeji.html是協(xié)議名://機(jī)器名+文件名./netffQrk.html#ref是協(xié)議名://機(jī)器名+端口號(hào)+文件名+內(nèi)部引用創(chuàng)立URL為了表示中實(shí)現(xiàn)了類URL,可以通過四種方式初始化一個(gè)URL對(duì)象:publicURL(Stringspec);publicURL(URLcontext,Stringspec);publicURL(Stringprotocol,Stringhost.Stringfile):publicURL(Stringprotocol,Stringhost,intport.Stringfile);解析URL—個(gè)URL對(duì)象生成后,其屬性是不能被改變的,可以通過類URL所提供的方法來獲取這些屬性:表4-丨URL類的方法說明方法說明getProtocolO獲取該URL的協(xié)議名getHostO獲取該URL的主機(jī)名getPortO獲取該URL的端口號(hào),如果沒有設(shè)置端口,返回-1getFileO獲取該URL的文件名getQueryO獲取該URL的査詢信息getPathO獲取該URL的路徑getAuthorityO獲取該URL的權(quán)限信息getUserlnfoO獲得用戶信息getRefO獲得該URL的錨5.從URL讀取WWW網(wǎng)絡(luò)資源使用URL的方法openStreamO通過VRL對(duì)象讀取指定的ffWW資源,方法openStearaO與指定的URL建立連接并返回InputStream類的對(duì)象以便從這一連publicclassURLReader{publicstaticvoidniain(String[]args)throwsException{//構(gòu)建URL對(duì)象URLtire=newURL('.163.com/');BufferedReaderin=newBufferedReader(newInputStrearaReader(tire.openStreamO));//使用openStream得到輸入流并由此構(gòu)造一個(gè)BufferedReader對(duì)象StringinputLine;//從輸入流不斷的讀數(shù)據(jù),直到讀完為止while((inputLine=in.readLineO)!=null)System,out.printIn(inputUne);//把讀入的數(shù)據(jù)打印到屏幕上in.close0;//關(guān)閉輸入流6.通過URLConnetction連接WWW通過URL的方法openStreamO只能從網(wǎng)絡(luò)上讀取數(shù)據(jù),如果同時(shí)需要輸出數(shù)據(jù),必須先與URL建立連接,然后才能對(duì)其進(jìn)行讀寫,需要用到URLConnection類。類URLConnection也在包中定義,它表示Java程序和URL在網(wǎng)絡(luò)上的通信連接,當(dāng)與一個(gè)URL建立連接時(shí),首先要在一個(gè)URL對(duì)象上通過方法openConnectionO生成對(duì)應(yīng)的URLConnection對(duì)象,例如下面的程序段首先生成—個(gè)指向地址,163-00111的對(duì)象,然后用openConnection()翻開該URL對(duì)象上的~個(gè)連接,返回一個(gè)URLCormection對(duì)象。如果連接過程失敗,將產(chǎn)生lOExc印tion異常。Try{URLnet=newURLr,163.com");URLConnectonntc=;)catch(MalformedURLExceptione){//創(chuàng)立URU)對(duì)象失敗}catch(lOExceptione){//openConnectionO失敗4.3網(wǎng)頁分析模塊嵌入JavaScript在HTML中嵌入JavaScript的方式有如下幾種:一、將JS代碼放在標(biāo)記對(duì)<80491>和</8014?1>之間一般格式如下:〈scripttype="text/javascript">//jscode</script>可以在〈script〉標(biāo)記對(duì)之間放置多條JavaScript語句,這些語句的放置順序就是它們的執(zhí)行順序,而且執(zhí)行的過程是文檔裝載過程的一局部。標(biāo)記〈script〉既可以出現(xiàn)在HTML文檔的<head>局部,也可以出現(xiàn)在<body>局部。一個(gè)HTML文檔可包含任意多個(gè)不重疊的〈script〉標(biāo)記對(duì),雖然在裝載和解析一個(gè)HTML文件的過程中,各個(gè)腳本在不同時(shí)刻執(zhí)行,但是這些腳本卻是同一個(gè)JavaScript程序的組成局部,因此在一個(gè)腳本代碼中定義的函數(shù)和變量適用于隨后出現(xiàn)的同一文件中的所有腳本。二、放置在*<script>標(biāo)記的src屬性指定的外部文件中從JavaScript1.1起,〈script〉標(biāo)記就支持src屬性,這個(gè)屬性的值指定了一個(gè)JavaScript代碼文件的URL,用法如下:〈scriptsrc="../js/utils.js"></script>JavaScript文件的擴(kuò)展名通常是.js,只包含純粹的JavaScript代碼,其中既沒有〈script〉標(biāo)記,也沒有其他HTML標(biāo)記。使用src屬性有很多優(yōu)點(diǎn)-把大型JavaScript代碼塊移出HTML文件,簡(jiǎn)化了 HTML文件;減少JavaSrcipt代碼的重復(fù);src屬性的值可以是任意URL,因此Web效勞器的JS程序可使用另一個(gè)Web效勞器上JS文件中的代碼。三、放置在事件處理程序中,如onclick等HTML屬性值指定。在HTML文件在瀏覽器中加載時(shí),腳本中的JS代碼只執(zhí)行一次,僅使用這種靜態(tài)腳本程序是不能動(dòng)態(tài)地響應(yīng)用戶的。很多動(dòng)態(tài)性的程序都定義了事件處理程序,當(dāng)某個(gè)事件發(fā)生時(shí)〔如用戶點(diǎn)擊了一個(gè)按鈕),瀏覽器會(huì)自動(dòng)調(diào)用響應(yīng)事件處理程序。舉例如下:
<inputtype="button"value="subinit"onclick="doSoniething();"/>從例子中可以看到,onclick的屬性值是字符串,其中包含一條或多條JS語句。假設(shè)有多條語句,須用分號(hào)隔開,也可以將這些語句寫到一個(gè)函數(shù)里,然后調(diào)用此函數(shù)。當(dāng)指定事件〔在這里是點(diǎn)擊〕在這個(gè)按鈕發(fā)生時(shí),就執(zhí)行這些JS代碼。4.3.2網(wǎng)頁分析流程是is文件本模塊根據(jù)網(wǎng)頁抓取模塊獲取的網(wǎng)賀,遍歷此網(wǎng)頁的每個(gè)節(jié)點(diǎn),如果是script節(jié)點(diǎn),如果是JavaScript類型,再分析是文件還是代碼,假設(shè)是文件,通過請(qǐng)求獲取此文件;假設(shè)是代碼,直接將這些代碼保存到本地文件。流程如下:HTML元素將js代碼保存至臨時(shí)文件獲取js文件網(wǎng)頁分析流程解析模塊4.4.1JavaScript簡(jiǎn)介JavaScript語言已經(jīng)開展幾年了,Netscape公司發(fā)布了多個(gè)版本,微軟公司也發(fā)布了與JavaScript語言相似的版本,名為JScript,另外,ECMA〖i5]S布了三
個(gè)版本的ECMA-262標(biāo)準(zhǔn),對(duì)JavaScript語言進(jìn)行標(biāo)準(zhǔn)化,命名為ECMAScript。JavaScript是一種輕型的、解釋型的程序設(shè)計(jì)語言,具有面向?qū)ο竽芰?。在句法?gòu)成上,JavaScript的核心與C、C++和Java相似,都具有諸如if語句、while循環(huán)和M運(yùn)算符這樣的結(jié)構(gòu)。但是,JavaScript與這些語言的相似之處也僅限于句法上的類同。JavaScript是一種弱類型語言,變量不需要有一個(gè)明確的類型。把JavaScript解釋器嵌入Web瀏覽器就形成了客戶端JavaScript,這是迄今為止最普通的JavaScript變體。當(dāng)人們提到JavaScript時(shí),通常所指的是客戶端JavaScript.客戶端JavaScript將JavaScript解釋器的腳本化能力與Web瀏覽器定義的文檔對(duì)象模型〔DOM)結(jié)合在一起。這兩種技術(shù)是以一種相互作用的方式結(jié)合在一起的,產(chǎn)生的效果也大于兩局部能力之和,即客戶端JavaScript使得可執(zhí)行的內(nèi)容散布在網(wǎng)絡(luò)中的各個(gè)地方,它是新一代動(dòng)態(tài)DHTML(DynamicHTML)文檔的核心。這樣一來,網(wǎng)頁就不再是靜態(tài)的HTML了,而是包含與用戶進(jìn)行交互、控制瀏覽器以及動(dòng)態(tài)創(chuàng)立HTML內(nèi)容的程序。通過網(wǎng)頁分析模塊得到了當(dāng)前URL包含的所有JS代碼和文件,接下來需要模擬瀏覽器的行為,按照J(rèn)S代碼加載的順序執(zhí)行這些代碼,解釋器的總體結(jié)構(gòu)如圖4-2所示,解釋器系統(tǒng)分為前端和后端兩局部?前端系統(tǒng)首先進(jìn)行詞法分析,然后進(jìn)行語法分析,語法分析的結(jié)果產(chǎn)生一棵語法樹,并根據(jù)語法樹產(chǎn)生相應(yīng)的中間代碼。中間代碼存入代碼段中,以供后端系統(tǒng)解釋執(zhí)行。對(duì)后端系統(tǒng)而言,前端系統(tǒng)產(chǎn)生的中間代碼即為所需的目標(biāo)碼,對(duì)其進(jìn)行解釋執(zhí)行并輸出結(jié)果即可。符號(hào)表模塊那么貫穿于整個(gè)系統(tǒng)的生存期,前端系統(tǒng)主要對(duì)符號(hào)表模塊進(jìn)行查找、添加、刪除操作,后端系統(tǒng)那么對(duì)符號(hào)表模塊進(jìn)行查找操作。圖中各模塊功能簡(jiǎn)要介紹如下:(1)詞法分析:以嵌入在html文本中的JavaScript腳本程序作為輸入形成單詞鏈表,以便語法分析。⑵語法分析:以單詞鏈表為輸入,依照J(rèn)avaScript語言的語法規(guī)那么形成中間數(shù)據(jù)結(jié)溝。執(zhí)行控制器:以中間代碼為輸入負(fù)責(zé)對(duì)語句解釋執(zhí)行的控制。語句解釋器:完成各類型控制語句的解釋執(zhí)行,該模塊可能會(huì)調(diào)用解釋
執(zhí)行器而形成遞歸調(diào)用。前端系統(tǒng)產(chǎn)生的中間代碼采用自定義的字節(jié)碼,好處是字節(jié)碼與平臺(tái)無關(guān),在不同的平臺(tái)上使用不同的解釋器對(duì)它進(jìn)行解釋執(zhí)行,即可實(shí)現(xiàn)在字節(jié)碼級(jí)與各平臺(tái)兼容,而不必對(duì)字節(jié)碼做任何修改。字節(jié)碼指令由操作碼和操作數(shù)組成。操作碼為定長(zhǎng)(1個(gè)字節(jié)),而操作數(shù)緊跟其后,可以為0個(gè)或多個(gè)字節(jié)。因而后端系統(tǒng)看到的中間代碼實(shí)際是一些字節(jié)流,而代碼段那么是存放字節(jié)碼的字節(jié)數(shù)組。符號(hào)表模塊包括一張符號(hào)表和張常量表。符號(hào)表記錄各種變量信息,常量表記錄常量信息以及對(duì)象的屬性名信息。符號(hào)表和常量表的結(jié)構(gòu)均采用Hash鏈表的結(jié)構(gòu),以提髙查找速度。符號(hào)表記錄的主要信息有:變量名及其對(duì)應(yīng)的Hash值、變量的類型等。如果變量的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫(yī)院顧問合同范本
- 勞務(wù)施工電梯合同范本
- 加工制造合同范本
- 協(xié)議單合同范本
- 北京裝修勞務(wù)合同范本
- 加盟串串香合同范本
- 住宅用地轉(zhuǎn)讓買賣合同范本
- 倉(cāng)庫(kù)維修協(xié)議合同范本
- 個(gè)人定制菜地合同范本
- 中介轉(zhuǎn)租店鋪合同范本
- 《攝影圖片分析》課件
- 青少年社會(huì)支持評(píng)定量表
- kW直流充電樁的設(shè)計(jì)
- 施工圖總目錄
- 《裝配化工字組合梁鋼橋六車道3x30m通用圖》(3911-05-2021)【可編輯】
- 02S404給排水圖集標(biāo)準(zhǔn)
- 人民醫(yī)院診斷證明書
- 六年級(jí)勞動(dòng)與技術(shù)下冊(cè)《課程綱要》
- 掛牌督辦安全生產(chǎn)重大事故隱患銷號(hào)申請(qǐng)表
- 2023纖維增強(qiáng)水泥擠出成型中空墻板
- 頸源性頭痛課件
評(píng)論
0/150
提交評(píng)論