【正文】
................ 13 網(wǎng)絡(luò)爬蟲具體實(shí)現(xiàn) .............................................................................................. 14 第四章 測試 ...................................................................................................................... 17 第 五 章 總結(jié)和展望 .......................................................................................................... 19 附錄 A主要源代碼 ........................................................................................................... 20 結(jié) 束 語 ........................................................................................................................ 22 II 基于 QT 的網(wǎng)絡(luò)爬蟲 摘 要 本設(shè)計基于 QT 軟件平臺,實(shí)現(xiàn)了功能簡單的網(wǎng)絡(luò)搜索引擎。同時本設(shè)計中采用了先進(jìn)的網(wǎng)絡(luò)爬蟲算法,同時利用了廣度優(yōu)先和深度優(yōu)先的基本原理實(shí)現(xiàn)在網(wǎng)絡(luò)上高速有效的搜索。the second:make out local music to make a list of suggest and the function of obtaining work music list, the third:make out the function of download music. basic iPhone OS will be the main technologies used to. The bottom language of Graduation Design’s development is Objectivec, the entire design and development process in both runs through the objectoriented programming ideas, especially the Encapsulation and the bination between two class, in this system has been Good application. This increases the overall system maintainability and scalability, making system expansion and code maintenance more convenient 【 Key words】 EasyMusic, read/write streams, music list 1 引 言 隨著國際互聯(lián)網(wǎng)( Inter)的迅速發(fā)展,網(wǎng)上的信息越來越多,全球目前的網(wǎng)頁超過 20 億,每天新增加 730 萬網(wǎng)頁。它要用到信息檢索、人工智能、計算機(jī)網(wǎng)絡(luò)、分布式處理、數(shù)據(jù)庫、數(shù)據(jù)挖掘、數(shù)字圖書館、 自然語言處理等多領(lǐng)域的理論和技術(shù),具有很高的綜合性和很強(qiáng)的挑戰(zhàn)性。最初的檢索功能通過索引站的方式實(shí)現(xiàn),而有了網(wǎng)絡(luò)機(jī)器人,即網(wǎng)絡(luò)爬蟲這個技術(shù)之后,搜索引擎的時代便開始一發(fā)不可收拾了。 定義 2:主題網(wǎng)絡(luò)爬蟲就是根據(jù)一定的網(wǎng)頁分析算法過濾與主題無關(guān)的鏈接,保留主題相關(guān)的鏈接并將其放入待抓取的 URL 隊列中;然后根據(jù)一定的搜索策略從隊列中選擇下一步要抓取 的網(wǎng)頁 URL,并重復(fù)上述過程,直到達(dá)到系統(tǒng)的某一條件時停止。 主題網(wǎng)絡(luò)爬蟲的基本思路就是按照事先給出的主題,分超鏈接和已經(jīng)下載的網(wǎng)頁內(nèi)容,預(yù)測下一個待抓取的 URL 及當(dāng)前網(wǎng)頁的主題相關(guān)度,保證盡可能多地爬行、下載與主 相關(guān)的網(wǎng)頁,盡可能少地下載無關(guān)網(wǎng)頁。要在如此浩瀚的信息海洋里尋找信息,就像 “大海撈針 ”一樣困難。 網(wǎng)絡(luò)檢索功能起于互聯(lián)網(wǎng)內(nèi)容爆炸性發(fā)展所帶來的對內(nèi)容檢索的需求。 網(wǎng)絡(luò)爬蟲的歷史 在互聯(lián)網(wǎng)發(fā)展初期,網(wǎng)站相對較少,信息查找比較容易。由于 Archie 深受用戶歡迎,受其啟發(fā),美國內(nèi)華達(dá) System Computing Services大學(xué)于 1993年開發(fā)了另一個與之非常相似的搜索工具,不過此時的搜索工具除了索引文件外,已能檢索 網(wǎng)頁。 然而 JumpStation 和 WWW Worm只是以搜索工具在數(shù)據(jù)庫中找到匹配信息的先后次序排列搜索結(jié)果,因此毫無信息關(guān)聯(lián)度可言。從此搜索引擎進(jìn)入了高速發(fā)展時期。象國外的 Inktomi,它本身并不是直接面向用戶的搜索引擎,但向包括 Overture(原 GoTo)、 LookSmart、 MSN、 HotBot等在內(nèi)的其他搜索引擎提供全文網(wǎng)頁搜索服務(wù)。但是,如果對方討厭爬蟲,很可能封掉服務(wù)器的 IP,服務(wù)器 IP 又不容易改,另外耗用的帶寬也是較貴??梢缘统杀敬罅坎渴?,由于客戶 端 IP 地址是動態(tài)的,所以很難被目標(biāo)網(wǎng)站封鎖。 Web 商業(yè)化至今,搜索引擎始終保持著網(wǎng)絡(luò)上被使用最多的服務(wù)項(xiàng)目的地位,然而,隨著網(wǎng)上內(nèi)容的爆炸式增長和內(nèi)容形式花樣的不斷翻新,搜索引擎越來越不能滿足挑剔的網(wǎng)民們的各種信息需求。因?yàn)樗玫叫畔z索、人工智能、計算機(jī)網(wǎng)絡(luò)、分布式處理、數(shù)據(jù)庫、數(shù)據(jù)挖掘、數(shù)字圖書館、自然語言處理等多領(lǐng)域的理論和技術(shù),所以具有綜合性和挑戰(zhàn)性。 廣度優(yōu)先是指網(wǎng)絡(luò)蜘蛛會先抓取起始網(wǎng)頁中鏈接的所有網(wǎng)頁,然后再選擇其中 的一個鏈接網(wǎng)頁,繼續(xù)抓取在此網(wǎng)頁中鏈接的所有網(wǎng)頁。其基本思想是認(rèn)為與初始 URL 在一定鏈接距離內(nèi)的網(wǎng)頁具 有主題相關(guān)性的概率很大。傳統(tǒng)的網(wǎng)絡(luò)爬蟲從一個或若干初始網(wǎng)頁的 URL 開始,獲取初始網(wǎng)頁上的 URL,在抓取網(wǎng)頁的過程當(dāng)中,不斷從當(dāng)前抓取頁面上抽取新的 URL 放入隊列 , 直到滿足系統(tǒng)的一定停止的條件。 相對于現(xiàn)在通用網(wǎng)絡(luò)爬蟲,聚焦爬蟲還需要解決三個主要問題: (1) 對抓取目標(biāo)的描述和定義; (2) 對網(wǎng)頁數(shù)據(jù)的分析與過濾; (3) 對 URL 的搜索策略。 爬蟲的工作過程 中索引器的應(yīng)用 爬蟲的工作過程,簡單的來講,就是要不斷發(fā)現(xiàn)新的鏈接,并對該鏈接所對應(yīng)的頁面分析存儲的過程。內(nèi)容索引項(xiàng)又可以分為單索引項(xiàng)和多索引項(xiàng)兩種。當(dāng)數(shù)據(jù)量很大時,必須實(shí)現(xiàn)實(shí)時索引 ,否則就不能夠跟上信息量增加的速度。索引器中的中文分詞技術(shù)分為 2 種: (1)最大匹配法 MM (2)反向最大匹配法 RMM 有些搜索引擎對信息庫中頁面建立全文索引,有些只建立摘要部 分的索引或者每個段落前面部分的索引。利用這些結(jié)果取得的信息可以提高頁面相關(guān)度判別時的準(zhǔn)確度。有些網(wǎng)頁就將頁面的關(guān)鍵詞等信息放在其中。這些信息說明了該圖像對應(yīng)圖像的基本信息 。 什么是網(wǎng)頁標(biāo)題 通常瀏覽一個網(wǎng)頁時,通過瀏覽器頂端的藍(lán)色顯示條出現(xiàn)的信息就是“網(wǎng)頁標(biāo)題”。 例如,現(xiàn)在會看到很多網(wǎng)站的首頁標(biāo)題較長,除了網(wǎng)站名稱之外,還有網(wǎng)站相關(guān)業(yè)務(wù)之類的關(guān)鍵詞,這主要是為了在搜索引擎搜索結(jié)果中獲得排名優(yōu)勢而考慮的,也屬于正常的搜索引擎優(yōu)化方法。不過網(wǎng)頁的標(biāo)題不可過長,一般最好在 35 到 40 個字符之間。比如戴爾中國的網(wǎng)站 首頁標(biāo)題為“戴爾中國( Dell China) — 計算機(jī),筆記本電腦,臺式機(jī),打印機(jī),工作站,服務(wù)器,存儲器,電子產(chǎn)品及附件等”。 QT 概述 本次設(shè)計將使用 QT 作為實(shí)現(xiàn)工具,為此簡要介紹一下 QT 以及和本次相關(guān)的類: Haavard Nord 和 Eirik ChambeEng 于 1991 年開始開發(fā)了“ Qt ”, 1994年 3 月 4 日創(chuàng)立公司 ,最早名為 Quasar Technologies,然后更名為 Troll Tech,然后再改為 Trolltech, 中文名稱是“奇趣科技”;但是該公司在 2021 年 6 月 17 日被 NOKIA 公司收購,以增強(qiáng)該公司在跨平臺軟件研發(fā)方面的實(shí)力,更名 Qt Software。使用 Qt 只需一次性開發(fā)應(yīng)用程序和用戶界面,無須再次重新編寫源代碼,便可跨不同桌面和嵌入式操作系統(tǒng)部署這些應(yīng)用程序。 Qt/Embedded 與以往的 Qt/X11 相比,主要是通過 Qt API 與 Linux I/O 10 設(shè)施直接交互,來作為嵌入式 Linux 的端口;因?yàn)?Qt/Embedded 主要采用framebuffer 作為底層圖形接口而并不再需要 Xlib 庫,因此非常節(jié)省資源。另外,這個服務(wù)進(jìn)程其實(shí)就是一個有某些額外權(quán)限的客戶進(jìn)程,因?yàn)樗梢蕴峁┮粋€用戶接口和輸入方法給客戶端的某個運(yùn)行起來的應(yīng)用程序。消息的傳 遞通常伴隨著二進(jìn)制數(shù)據(jù)的傳輸,對于二進(jìn)制數(shù)據(jù)的傳輸,本文采用了一個 QDataStream類的序列化過程來完成的。信號和插槽是 Qt 自行定義的一種通信機(jī)制, QT 編程語法是完全符合標(biāo)準(zhǔn) C/C++ 語言的,但是信號與插槽機(jī)制卻是獨(dú)立于標(biāo)準(zhǔn)的 C/C++ ,因此要正確的處理信號和插槽,必須借助一個稱為 moc( Meta Object Compiler)的 Qt 工具,該工具是一個 C++ 預(yù)處理程序,它為高層次的事件處理自動生成所需要的附加代碼。一個類對應(yīng)著一個特殊的對象,當(dāng)特定的對象狀態(tài)發(fā)生改變時,信號就由該對象發(fā)射出去了,這時,這個對象就完成了它的全部工作了,但是這個對象它實(shí)際上并不 知道這個信號是由誰來接收;這就是所謂的信息封裝,用于確保對象被當(dāng)作一個真正的軟件組件來使用。總之,可以說信號與插槽構(gòu)造了一個強(qiáng)大的部件編程機(jī)制 。當(dāng)一個應(yīng)用程序正在下載某個文件時,我們并不希望它只專注于原來的任務(wù),我們還想同時用它來打開已經(jīng)下載的多媒體文件或者向它添加新的下載任務(wù),這個時候,我們就要用多線程來打造一個反應(yīng)靈敏的用戶界面。一旦這些任務(wù)在執(zhí)行過程中需要等待,那這種偽并行會在一個任務(wù)等待其它資源的時候執(zhí)行其它任務(wù),以便解決程序中存在的瓶頸問題。 當(dāng)線程一起工作時,不僅必須共享數(shù)據(jù),而且還必須知道其它線程的狀態(tài)和活動。這些工兵在給定范圍內(nèi)重復(fù)相同的動作,他們之間會協(xié)調(diào)各自的行為。 有了多線程就可以使爬蟲的效率大大提升: 13 網(wǎng)絡(luò)爬蟲的概要設(shè)計 本網(wǎng)絡(luò)爬蟲的開發(fā)目的,通過網(wǎng)絡(luò)爬蟲技術(shù)一個自動提取網(wǎng)頁的程序,實(shí)現(xiàn)搜索引擎從自己想要訪問的網(wǎng)上下載網(wǎng)頁,再根據(jù)已下載 的網(wǎng)頁上繼續(xù)訪問其它的網(wǎng)頁,并將其下載直到滿足用戶的需求。 ,訪問該鏈接網(wǎng)頁上的所有鏈接,訪問完成后,再通過遞歸算法實(shí)現(xiàn)下一層的訪問。 ( 3)通過用戶行為來確定的抓取目標(biāo)樣例,分為 2 種: a) 在用戶瀏覽過程中顯示標(biāo)注的抓取樣本; b) 通過用戶日志的挖掘得到訪問模式及相關(guān)樣本。 (tr())。//如果不需要設(shè)置代理,就注釋掉這行 QNetworkReply *reply = (QNetworkRequest(URL))。manager, SIGNAL(finished(QNetworkReply*)), amp。 return QString(responseData)。準(zhǔn)確提取 這些文本的信息,一方面對搜索引擎的搜索準(zhǔn)確性有重要作用,另一方面對網(wǎng)絡(luò)爬蟲正確跟蹤其它鏈接有很大的影響 。這些標(biāo)識符都有一定的規(guī)則,只要根據(jù)不同的標(biāo)識符來取得相應(yīng)的信息即可。例如某個網(wǎng)站有 “產(chǎn)品介紹 ”頻道,因?yàn)閷?dǎo)航條在網(wǎng)站中的每個網(wǎng)頁都有,若不過濾掉導(dǎo)航條鏈接,在搜索 “產(chǎn)品介紹 ”的時候,則網(wǎng)站內(nèi)每個網(wǎng)頁都會搜索到,這無疑會帶來大量垃圾信息。例如:有一個鏈接文字為 “XXX的照片 ”,其鏈接指向一張為 bmp 格式的圖片,那么網(wǎng)絡(luò)爬蟲就知道這張圖片的內(nèi)容就是 “XXX的照片 ”。所謂動態(tài)網(wǎng)頁,是相對于靜態(tài)網(wǎng)頁而言,由程序自動生成的頁面,這樣生成的好處是可以快速統(tǒng)一的更改網(wǎng)頁風(fēng)格, 也可以減少網(wǎng)頁所占的服務(wù)器的空間,但同樣給網(wǎng)絡(luò)爬蟲的抓取帶來了一些麻煩。對 于這類網(wǎng)站,如果需要這些數(shù)據(jù)能被搜索引擎搜索,則需要提供一種可以遍歷整個數(shù)據(jù)庫內(nèi)容的方法。 解析 Html 文件 ,獲取指定網(wǎng)頁中所有的連接的核心代碼: 16 QStringList Widget::get_html_url(QString str) { QRegExp rx。//在獲取的時候記得加入 QStringList list。))。 } 匹配關(guān)鍵字的核心代碼: 本段代碼在子線程中運(yùn)行,只要是使用正則表達(dá)式解析出網(wǎng)頁的關(guān)鍵字,并且與指定的關(guān)鍵字比較,如果有相應(yīng)的,則發(fā)送信號給主線程。 str = (QRegExp([\\s|\\S]*title),)。//把找到的結(jié)果返回 } 17 第四章 測試 打開軟件,在輸入框中輸入自己想要搜索的內(nèi)容