一種分布式垂直爬蟲服務系統的優化方法
【技術領域】
[0001]本發明涉及網絡數據傳輸方法,具體來說涉及一種分布式垂直爬蟲服務系統的優化方法。
【背景技術】
[0002]隨著互聯網的發展,互聯網中包含的信息內容越來越多,搜索引擎可以幫助人們在海量信息中尋找自己感興趣的內容,一般的搜索引擎,如百度、Google和Bing等,都是面向所有用戶提供互聯網內容搜索服務。這些搜索引擎需要通過爬蟲技術不斷地從互聯網上獲取信息,并將這些信息保存起來,以便人們方便地檢索這些信息。由于需要爬取的數據量巨大,因此大規模的搜索引擎往往采取分布式處理機制,即建立分布式爬蟲服務系統。這些爬蟲從統一的下載隊列中獲取目標URL,然后將目標網頁下載存儲到指定的位置。
[0003]搜索引擎越來越多,這些搜索引擎的爬蟲不斷地獲取網站的內容,網站系統的壓力越來越大,1994年6月30日,在經過搜索引擎人員以及被搜索引擎抓取的網站站長共同討論后,正式發布了一份行業規范,即Robots協議。Robots協議(也稱為爬蟲協議、機器人協議等)的全稱是“網絡爬蟲排除標準”(Robots Exclus1n Protocol),網站通過Robots協議告訴搜索引擎哪些頁面可以抓取,哪些頁面不能抓取。
[0004]由于人們在信息檢索時都帶有明確的目標,而一般的搜索引擎返回的信息過于繁雜,甚至有些不相干的信息也被檢索出來,人們希望搜索引擎可以針對某個特定領域提供信息檢索服務,同時還希望搜索引擎能夠對檢索出的內容做一些基本的分析處理,垂直搜索引擎便應運而生。垂直搜索引擎往往只面向特定領域,如去哪網僅面向在線旅游領域,因此它所爬取的內容不必覆蓋整個互聯網,而僅僅是特定領域的網站即可。但他需要對這些網站內容進行簡單的處理,如格式轉換或按排序某些特征排序等。
[0005]目前垂直搜索引擎沿用了一般搜索引擎的設計方法,在總體結構上采用分布式處理機制,在爬蟲邏輯單元上采用一體化設計模式。一般搜索引擎在爬蟲處理邏輯方面的工作比較簡單,只需要下載并存儲即可,而垂直爬蟲的處理邏輯比較負載,除了下載和存儲之夕卜,還需要對網頁內容進行簡單的分析處理。隨著大數據時代的到來,垂直爬蟲所需要處理的信息量越來越多,部分網站又采取了動態頁面技術,使得網頁的下載和分析邏輯越來越復雜,而由于傳統的爬蟲服務系統在爬蟲邏輯單元上采用一體化設計模式,使得爬蟲邏輯單元性能低下。此外,由于部分網站主們不遵守Robots協議,這也導致垂直爬蟲服務系統幾乎無法正常工作。
【發明內容】
[0006]本發明的目的在于提供一種分布式垂直爬蟲服務系統的優化方法,該方法能夠提升垂直爬蟲在處理大量數據信息時的效率,增強對對采用了延遲加載的動態HTML頁面的抓取能力,對于頁面下載邏輯和分析處理邏輯進行有效地管理和擴展,對網站主的爬蟲防御策略提供有效地規避。
[0007]本發明的目的可通過以下的技術措施來實現:一種分布式垂直爬蟲服務系統的優化方法,包括如下內容:
[0008]將原有的爬蟲服務系統拆分為下載服務和頁面分析邏輯兩部分,且將該下載服務和分析邏輯均部署在多個云主機上,任務隊列也拆分為下載任務隊列和分析任務隊列。
[0009]其中,所述下載服務采用如下下載任務流程:
[0010](1.1)下載服務從下載隊列中獲取下載任務;
[0011](1.2)下載服務判斷下載任務中的頁面類型;
[0012](1.3)根據頁面類型加載頁面下載邏輯單元;
[0013](1.4)頁面下載邏輯單元讀取下載參數;
[0014](1.5)頁面下載邏輯單元根據兩次任務的最小時間間隔隨機生成本次任務結束后的休眠時間;
[0015](1.6)頁面下載邏輯單元在可選的UserAgent列表中隨機選擇一個作為本次任務的 UserAgent ;
[0016](1.7)頁面下載邏輯單元在可選的REFERER列表中隨機選擇一個作為本次任務的REFERER ;
[0017](1.8)頁面下載邏輯單元向目標URL發出HTTP請求;
[0018](1.9)頁面下載邏輯單元判斷服務器的返回值,并根據返回值確定下載是否成功。
[0019]所述頁面分析邏輯采用如下頁面分析任務流程:
[0020](2.1)當下載任務狀態變為成功后,下載任務守護進程會將下載任務轉移至分析任務隊列中;
[0021](2.2)頁面分析邏輯將從分析隊列中獲取任務信息;
[0022](2.3)頁面分析邏輯將根據分析任務中的類名,調用相應的Java類,并將目標URL保存路徑和分析結果保存路徑以命令行參數形式傳遞給Java類;
[0023](2.4)待Java類運行完畢后,判斷退出結果是否為1,將任務狀態更新為成功;
[0024](2.5)如果為I則表示分析程序正常結束,否則表示分析程序運行出錯;
[0025](2.6)頁面分析邏輯將判斷出錯次數,一旦次數超過3次則向管理員發出告警并將任務狀態更新為失敗。
[0026]其中頁面類型方式分為靜態頁面和動態頁面兩種。所述步驟(1.3)中根據頁面類型加載頁面下載邏輯單元包括:如果頁面類型為靜態頁面,則加載靜態頁面下載邏輯單元;如果頁面類型為動態頁面,則加載動態頁面下載邏輯單元。
[0027]所述步驟(1.9)中頁面下載邏輯單元判斷服務器的返回值,并根據返回值確定下載是否成功的具體過程包括:
[0028]對于靜態頁面,靜態頁面下載邏輯單元判斷服務器的返回值是否為200 ;
[0029]如果返回值為200,則接收返回內容,并將返回內容寫入目標路徑中,之后將下載任務狀態更新為下載成功;否則將任務狀態更新為下載失敗;
[0030]對于動態頁面,動態頁面下載邏輯單元判斷服務器的返回值是否為200 ;
[0031]如果返回值不為200,則將任務狀態更新為下載失敗;
[0032]如果返回值為200,根據任務中的延遲加載所使用的JavaScript函數名,觸發JavaScript函數,此時JavaScript會再次向服務端發起HTTP請求;
[0033]如果該再次向服務端發起HTTP請求的回返值為200,則并將返回內容寫入目標路徑中,之后將下載任務狀態更新為下載成功;否則將任務狀態更新為下載失敗。
[0034]所述下載任務隊列中的每個下載任務中描述了目標URL、頁面類型、下載頁面的保存路徑、動態頁面延遲加載所使用的JavaScript函數名、頁面分析類型。所述頁面分析類型用于指示采用何種方式來分析下載頁面。
[0035]所述爬蟲服務系統的存儲設備采用HDFS的分布式存儲方式,下載頁面的保存路徑形式為 ^hdf s: //namenode: namenodeport/parent/child,,。
[0036]所述分析任務描述了目標URL保存路徑、分析類的類名和分析結果保存路徑。其中分析類的類名指定了被調用的Java類。分析結果保存路徑同樣采用HDFS形式。
[0037]本發明的有益效果在于:
[0038](I)采用分治的思想將原有爬蟲處理邏輯拆分為下載和分析兩部,使得下載效率和分析效率都可以得到較大的提升。
[0039](2)下載邏輯被獨立拆分后,通過接口技術可以有效地擴展下載能力,既能支持靜態頁面下載,又能支持動態頁面下載。
[0040](3)分析邏輯被獨立拆分后,可以通過分析任務管理各種分析邏輯,分析邏輯的實現方式既可以是普通的Java程序,又可以是基于Hadoop的MapReduce程序,這種方法不僅能增強分析邏輯的處理性能,還可以降低分析邏輯的開發難度。
[0041](4)通過隨機參數的控制,可以將爬蟲行為混入用戶訪問行為中,使得網站主難以有效地識別爬蟲行為,提升了爬蟲下載頁面的成功率。
【附圖說明】
[0042]圖1是現有的一般分布式垂直爬蟲服務系統工作流程;
[0043]圖2是本發明的一般分布式垂直爬蟲服務系統結構示意圖;
[0044]圖3是本發明的一般分布式垂直爬蟲服務系統的下載服務流程圖;
[0045]圖4是本發明的一般分布式垂直爬蟲服務系統的頁面分析邏輯流程圖。
【具體實施方式】
[0046]現有的一般分布式垂直爬蟲服務系統工作流程如圖1所示。爬蟲服務以多線程或多進程方式運行,他們可能部署在企業內部的一個主機或多臺主機上。每個爬蟲服務都從任務隊列中獲取一個下載任務,然后向目標URL地址發送HTTP請求,并將返回的結果保存到內存中,再利用DOM分析器對HTML頁面進行內容解析,之后通過DOM選擇器挑選有用的信息,最后將這些有用的信息保存的存儲設備上。
[0047]本發明對一般分布式垂直爬蟲的結構與流程進行優化,優化后的流程如圖2所示。本發明將原有的爬蟲服務系統拆分為下載服務和頁面分析邏輯兩部分,且將該下載服務和分析邏輯均部署在多個云主機上,任務隊列也拆分為下載任務隊列和分析任務隊列。
[0048]每個下載任務中描述了目標URL、頁面類型、下載頁面的保存路徑、動態頁面延遲加載所使用的JavaScript函數名、頁面分析類型。其中頁面類型方式分為靜態頁面和動態頁面兩種。存儲設備采用HDFS的分布式存儲方式,下載頁面的保存路徑形式為“hdfs://namenode: namenodeport/parent/chi Id”。頁面分析類型則用于指示采用何種方式來分析下載頁面。
[0049]下載服務根據下載任務中的頁面類型,動態加載對應的頁面下載邏輯單元以完成頁面下載任務。靜態頁面下載邏輯單元采用HTTP請求方式下載目標頁面,而動態頁面下載邏輯單元則利用HTMLUNIT觸發動態頁面中的延遲加載方法,實現對延遲加載內容的獲取(見(1.20)步驟)。所有頁面下載邏輯單元都將從參數管理器中讀取必要的參數,這些參數包括兩個下載任務之間間隔的最小時間,下載任務可以設置的瀏覽器UserAgent列表,下載任務可以設置的HTTP Referer信息列表等。頁面下載邏輯單元隨機設置這些參數,來躲避站長對爬蟲的封鎖。當下載服務完成下載后,向下載任務隊列報告下載結果。下載任務隊列將完成下載的任務轉移至分析任務隊列中。
[0050]分析任務描述了目標URL保存路徑、分析類的類名和分析結果保存路徑。其中分析類的類名指定了被調用的Java類。分析結果保存路徑依舊采用HDFS形式。
[0051]每個頁面分析邏輯可以是一個普通Java類,也可以是MapReduce類。對于普通Ja