樂(lè)思軟件的主要目標(biāo)就是解決網(wǎng)絡(luò)信息的采集問(wèn)題。我們?cè)谶@個(gè)問(wèn)題上研究了10年也實(shí)踐了10年,為國(guó)內(nèi)外許多客戶提供了幾千次網(wǎng)絡(luò)信息采集服務(wù)。在此基礎(chǔ)上開(kāi)發(fā)的樂(lè)思網(wǎng)絡(luò)信息采集系統(tǒng),目前居于國(guó)際領(lǐng)先水平(曾在國(guó)際招標(biāo)中擊敗美國(guó)競(jìng)爭(zhēng)對(duì)手),國(guó)內(nèi)無(wú)出其右者。我們的采集軟件和深聚焦爬蟲(chóng)類似,但是功能要比簡(jiǎn)單的爬蟲(chóng)強(qiáng)大,只要是公開(kāi)的網(wǎng)站信息,寫好配置都能夠采集。
馬云說(shuō),大數(shù)據(jù)時(shí)代來(lái)了。現(xiàn)在太多互聯(lián)網(wǎng)公司都在做大數(shù)據(jù),每個(gè)公司的數(shù)據(jù)來(lái)源都不止一個(gè),其中占比重較大的一個(gè)數(shù)據(jù)源非網(wǎng)絡(luò)爬蟲(chóng)莫屬。然而不同的公司格局業(yè)務(wù)背景不同,所需要的數(shù)據(jù)類型也就不同。不同于搜索網(wǎng)站所用的通用爬蟲(chóng),聚焦爬蟲(chóng)開(kāi)始越來(lái)越多的被人們提起。
聚焦爬蟲(chóng),又稱主題爬蟲(chóng)(或?qū)I(yè)爬蟲(chóng)),是“面向特定主題”的一種網(wǎng)絡(luò)爬蟲(chóng)程序。它與我們通常所說(shuō)的爬蟲(chóng)(通用爬蟲(chóng))的區(qū)別之處就在于,聚焦爬蟲(chóng)在實(shí)施網(wǎng)頁(yè)抓取時(shí)要進(jìn)行主題篩選。它盡量保證只抓取與主題相關(guān)的網(wǎng)頁(yè)信息。
聚焦爬蟲(chóng)主要分為兩大類。一類是淺聚焦爬蟲(chóng),所謂淺聚焦爬蟲(chóng)是指,爬蟲(chóng)程序抓取特定網(wǎng)站的的所有信息。其工作方式和通用爬蟲(chóng)幾乎一樣,唯一的區(qū)別是種子URL的選定確定了抓取內(nèi)容的一致,其核心是種子URL的選擇。另一類是深聚焦爬蟲(chóng),深聚焦爬蟲(chóng)是指在海量的不同內(nèi)容網(wǎng)頁(yè)中,通過(guò)主題相關(guān)度算法選擇主題相近的URL和內(nèi)容進(jìn)行爬取。其核心是如何判斷所爬取的URL和頁(yè)面內(nèi)容是與主題相關(guān)的。
關(guān)系如下:
由圖可見(jiàn),淺聚焦爬蟲(chóng)可以看成是將通用爬蟲(chóng)局限在了一個(gè)單一主題的網(wǎng)站上,因此我們通常所說(shuō)的聚焦爬蟲(chóng)大多是指深聚焦爬蟲(chóng)。
淺聚焦爬蟲(chóng)從一個(gè)或若干初始網(wǎng)頁(yè)的URL開(kāi)始,(例如分類信息網(wǎng))獲得初始網(wǎng)頁(yè)上的URL,在抓取網(wǎng)頁(yè)的過(guò)程中,不斷從當(dāng)前頁(yè)面上抽取新的URL放入隊(duì)列,直到滿足系統(tǒng)的一定停止條件。
其工作流程如圖:
可見(jiàn)淺聚焦爬蟲(chóng)的基本原理跟通用爬蟲(chóng)的基本原理是一樣的,其特點(diǎn)是選定種子URL,例如,要抓取招聘信息,可以將招聘網(wǎng)站的URL作為種子URL。用主題網(wǎng)站保證了抓取內(nèi)容的主題一致。
深聚焦爬蟲(chóng)最主要的特點(diǎn)是主題一致性。然而在浩如煙海的互聯(lián)網(wǎng)大數(shù)據(jù)中要保證所抓取的數(shù)據(jù)主題一致并不是一件簡(jiǎn)單的事情。針對(duì)不同的數(shù)據(jù)需求,這其中需要的策略和方式并沒(méi)有統(tǒng)一的解答。在這里不說(shuō)具體的解決方法,只討論一下常見(jiàn)的解決思路。
這種解決方法是不管頁(yè)面的主題是什么,先將頁(yè)面爬取下來(lái)。對(duì)頁(yè)面進(jìn)行簡(jiǎn)單的去噪后,利用主題提取策略(關(guān)鍵字,分類聚類算法等)對(duì)處理后的頁(yè)面內(nèi)容進(jìn)行主題提取,最后對(duì)比設(shè)定好的主題,如果主題一致,或在一定的閥值內(nèi),則保存頁(yè)面進(jìn)一步進(jìn)行數(shù)據(jù)清洗。若主題偏差超過(guò)一點(diǎn)閥值,則直接丟棄頁(yè)面。這種方式的優(yōu)點(diǎn)是鏈接頁(yè)面全覆蓋,不會(huì)出現(xiàn)數(shù)據(jù)遺漏。但是缺點(diǎn)也十分致命,那就是全覆蓋的頁(yè)面,很大一部分是與主題無(wú)關(guān)的廢棄頁(yè)面,這極大的拖慢了爬蟲(chóng)爬取數(shù)據(jù)的速度。到后期,爬取數(shù)據(jù)的速度將是無(wú)法接受的。
上面介紹了淺聚焦爬蟲(chóng)的核心是選定合適的種子URL,這些種子URL主要是主題網(wǎng)站的入口URL。比如北京趕集網(wǎng)擔(dān)保貸款頻道的入口URL:http://bj.ganji.com/danbaobaoxian/,這個(gè)URL透漏給我們很多信息,根據(jù)這些信息,我們可以初步預(yù)測(cè)到這個(gè)URL所鏈接的頁(yè)面的主題就是擔(dān)保保險(xiǎn),其地域在北京,其平臺(tái)是趕集網(wǎng)。由此我們發(fā)現(xiàn),互聯(lián)網(wǎng)上的網(wǎng)站或者網(wǎng)站的一個(gè)模塊大部分都是有固定主題的,并且同一網(wǎng)站中同一主題的頁(yè)面URL,都有一定的規(guī)律可循。針對(duì)這種情況,通過(guò)URL預(yù)測(cè)頁(yè)面主題的思路也就自然而生了。除此之外,頁(yè)面中絕大部分超鏈接都是帶有錨文本的,而錨文本基本可以看做是對(duì)目標(biāo)頁(yè)面的概括描述。結(jié)合對(duì)URL的分析和對(duì)錨文本的分析,對(duì)目標(biāo)頁(yè)面進(jìn)行主題預(yù)測(cè)的正確率也就相當(dāng)可觀了。顯而易見(jiàn),針對(duì)URL的主題預(yù)測(cè)策略,可以有效的減少不必要的頁(yè)面下載,節(jié)約下載資源,加快下載速度。然而,這種預(yù)測(cè)結(jié)果并不能完全保證丟棄的URL都是與主題無(wú)關(guān)的,因此會(huì)有一些遺漏。同時(shí),這種方式也無(wú)法確保通過(guò)預(yù)測(cè)的頁(yè)面都是與主題相關(guān)的,因此需要對(duì)通過(guò)的預(yù)測(cè)的URL頁(yè)面進(jìn)行頁(yè)面內(nèi)容主題提取,再對(duì)比與設(shè)定的主題做出取舍。
通過(guò)上面的分析,得出一般的解決方法。就是先通過(guò)URL分析,丟棄部分URL。下載頁(yè)面后,對(duì)頁(yè)面內(nèi)容進(jìn)行主題提取,對(duì)比預(yù)設(shè)定的主題做取舍。最后進(jìn)行數(shù)據(jù)清洗。
深聚焦爬蟲(chóng)的一般結(jié)構(gòu)如下圖:
六個(gè)主要的組成部分【控制中心】【下載模塊】【抽取模塊】【清洗模塊】【消重模塊】【資源模塊】
大數(shù)據(jù)時(shí)代,對(duì)數(shù)據(jù)的多樣性和針對(duì)性要求越來(lái)越高。隨之爬蟲(chóng)的架構(gòu)方式也更加靈活多變。比較常見(jiàn)的開(kāi)源爬蟲(chóng)框架有Crawler4j、WebMagic、WebCollector、scrapy等。另一方面,針對(duì)爬蟲(chóng)的抓取,被抓取網(wǎng)站也制定了相應(yīng)的防爬蟲(chóng)措施。常見(jiàn)的防爬蟲(chóng)方式有如下幾種:
一、針對(duì)頻繁訪問(wèn)網(wǎng)站的IP設(shè)定訪問(wèn)限制。這是最常見(jiàn)的一種放爬蟲(chóng)方式,具體體現(xiàn)是,在一個(gè)單位時(shí)間內(nèi),同一個(gè)IP的請(qǐng)求數(shù)量達(dá)到了網(wǎng)站設(shè)計(jì)的閥值,這個(gè)IP就被限制訪問(wèn)。面對(duì)這種情況,可以制定適當(dāng)?shù)?/span>IP訪問(wèn)策略。
二、使用js和ajax技術(shù)的動(dòng)態(tài)頁(yè)面。這樣的網(wǎng)頁(yè)源代碼中并沒(méi)有包含所需的數(shù)據(jù),數(shù)據(jù)包裹存在于二次請(qǐng)求的返回文檔中。針對(duì)這樣的頁(yè)面,可以分析請(qǐng)求過(guò)程,提取二次請(qǐng)求的URL,進(jìn)而得到想要的數(shù)據(jù)。
三、其他情況:隨著互聯(lián)網(wǎng)的不斷發(fā)展,出現(xiàn)了各種各樣的防爬蟲(chóng)方式。這就需要人們根據(jù)實(shí)際情況,針對(duì)性的解決問(wèn)題。比如使用模擬瀏覽器(htmlunit,selenium)技術(shù)等。
總之,沒(méi)有一成不變的互聯(lián)網(wǎng),就沒(méi)有一成不變的爬蟲(chóng),擁抱變化,才能讓爬蟲(chóng)爬的更遠(yuǎn)。
每一個(gè)社交網(wǎng)站都有海量的數(shù)據(jù),和海量數(shù)據(jù)成正比的是社交網(wǎng)站的防爬蟲(chóng)策略。這就對(duì)爬蟲(chóng)提出了更高更嚴(yán)格的要求,也更細(xì)化了不同爬蟲(chóng)之間的差異。然而一成不變不是互聯(lián)網(wǎng)的主調(diào),依存互聯(lián)網(wǎng)生存的公司,更要學(xué)會(huì)擁抱變化,甚至預(yù)測(cè)變化,方能在未來(lái)乘風(fēng)破浪,越行越遠(yuǎn)。