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