欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)的制作方法

文檔序號:7999848閱讀:154來源:國知局
用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)。該系統(tǒng)包括:控制器,讀取起始地址列表中的一個或多個地址,并將所述一個或多個地址存入在數(shù)據(jù)庫中維護的多個下載隊列中的至少一個下載隊列;數(shù)據(jù)庫,用于維護多個下載隊列,其中,所述多個下載隊列至少包括第一下載隊列和第二下載隊列,且各個下載隊列對應于不同類型的數(shù)據(jù);多個下載模塊,用于根據(jù)所述多個下載隊列來分別下載多個類型的數(shù)據(jù),從根據(jù)所述第一下載隊列下載的數(shù)據(jù)中解析出要下載的后續(xù)地址,判斷所述后續(xù)地址屬于哪個下載隊列,根據(jù)所述判斷的結(jié)果,將所述后續(xù)地址存入相應下載隊列中;以及重復上述過程,直到滿足預定條件為止。
【專利說明】用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)
【技術(shù)領域】
[0001]本發(fā)明總體上涉及分布式數(shù)據(jù)下載,更具體地涉及用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)。
【背景技術(shù)】
[0002]在當今的搜索引擎領域中,為了更快速有效地對互聯(lián)網(wǎng)上的網(wǎng)頁進行搜索,通常需要由搜索引擎提供商來預先從各個網(wǎng)站上抓取/爬取/下載(在下文中,這些術(shù)語可作為同義詞互換使用)各種網(wǎng)頁/應用程序/音頻/視頻等并進行分析。為了實現(xiàn)該網(wǎng)頁抓取,不可避免地要用到各種網(wǎng)頁抓取程序(也被稱為網(wǎng)絡爬蟲、網(wǎng)絡蜘蛛等,下文中統(tǒng)稱為網(wǎng)絡爬蟲)。
[0003]現(xiàn)有的網(wǎng)絡爬蟲一般由一些起始地址開始下載網(wǎng)頁,然后通過解析所下載的頁面內(nèi)容來決定后續(xù)爬取的頁面。通常需要在爬蟲程序內(nèi)實現(xiàn)一個爬取隊列,用于存放起始地址與解析出來的后續(xù)爬取地址。此外,還需要實現(xiàn)一個用于存放下載過的頁面地址的去重過濾器,以避免重復爬取。
[0004]與單機的爬蟲程序相比,可同時部署在多個節(jié)點上的分布式網(wǎng)絡爬蟲在計算機硬件資源和/或網(wǎng)絡帶寬資源的使用以及與ip、地域有關(guān)問題的處理上能夠更加靈活?,F(xiàn)有的分布式網(wǎng)絡爬蟲通常通過共享爬取隊列和去重過濾器來實現(xiàn)。
[0005]然而,現(xiàn)有的爬蟲系統(tǒng)至少存在以下問題:(1)不支持使用不同的下載配置來下載不同類型的數(shù)據(jù);(2)其去重過濾器不支持有效期,即,其不支持對一些會更新的網(wǎng)頁進行重復爬??;(3)不支持對爬取規(guī)則的設定以及對JavaScript (下文中簡稱為JS)的分析。
[0006]此外,現(xiàn)有的分布式爬蟲系統(tǒng)還至少存在以下問題:(I)難以統(tǒng)一部署和配置,由于分布式爬蟲系統(tǒng)通常部署在多臺計算機上,因此對各個爬蟲節(jié)點(模塊)進行集中管理和統(tǒng)一配置非常困難。特別地,在需要對多個網(wǎng)站進行爬取的時候,常常需要在開始、停止爬取網(wǎng)站時登錄爬蟲服務器,進行修改配置、啟動/停止相關(guān)進程等操作。當網(wǎng)站數(shù)量較大時,這些過程變得非常繁瑣且容易出錯;(2)難以設置針對特定網(wǎng)站的整體爬取間隔,通常需要控制網(wǎng)絡爬蟲對網(wǎng)站的訪問間隔,以避免影響網(wǎng)站正常運轉(zhuǎn),減少對網(wǎng)站造成太大的負擔,然而現(xiàn)有技術(shù)僅能在單個爬蟲程序上對爬取間隔進行限制,無法將所有分布式爬蟲節(jié)點作為一個整體來進行控制,換言之,盡管可以限制單個爬蟲對同一網(wǎng)站的各自的訪問頻率,但是難以避免出現(xiàn)很多爬蟲同時或幾乎同時訪問該同一網(wǎng)站的情況,在該情況下,網(wǎng)站的正常運轉(zhuǎn)受到了突發(fā)訪問高峰的干擾,嚴重時有可能使網(wǎng)站宕機或下線;以及(3)難以收集統(tǒng)計信息,無法直接獲得分布式爬蟲的總體統(tǒng)計信息,通常需要另外搭建一套日志系統(tǒng)來實現(xiàn)此功能。

【發(fā)明內(nèi)容】

[0007]因此,本發(fā)明提供了至少解決上述技術(shù)問題的用于下載網(wǎng)站數(shù)據(jù)的分布式方法和系統(tǒng)。[0008]具體地,根據(jù)本發(fā)明的第一方案,提供了一種用于下載網(wǎng)站數(shù)據(jù)的分布式方法。該方法包括以下步驟:a)讀取起始地址列表中的一個或多個地址,并將所述一個或多個地址存入在數(shù)據(jù)庫中維護的多個下載隊列中的至少一個下載隊列,其中,所述多個下載隊列至少包括第一下載隊列和第二下載隊列,且各個下載隊列對應于不同類型的數(shù)據(jù);b)根據(jù)所述多個下載隊列來分別下載多個類型的數(shù)據(jù);c)從根據(jù)所述第一下載隊列下載的數(shù)據(jù)中解析出要下載的后續(xù)地址;d)判斷所述后續(xù)地址屬于哪個下載隊列;e)根據(jù)步驟d)中的判斷結(jié)果,將所述后續(xù)地址存入相應下載隊列中;以及f)重復上述步驟b)至e),直到滿足預定條件為止。
[0009]在一些實施例中,步驟b)包括:按照在所述數(shù)據(jù)庫中集中維護的針對各個網(wǎng)站的下載間隔,根據(jù)相應下載隊列中的記錄,從相應網(wǎng)站下載數(shù)據(jù)。
[0010]在一些實施例中,所述第一下載隊列是網(wǎng)頁下載隊列,以及所述第二下載隊列是應用下載隊列。
[0011]在一些實施例中,針對每個要下載的網(wǎng)站,預定義由多個下載模塊統(tǒng)一使用的、并針對所述網(wǎng)站的不同頁面類型單獨規(guī)定的一條或多條爬取規(guī)則。
[0012]在一些實施例中,步驟d)包括:當所述爬取規(guī)則包括指示所述后續(xù)地址的類型的第一屬性時,根據(jù)所述第一屬性來判斷所述后續(xù)地址屬于哪個下載隊列。
[0013]在一些實施例中,步驟d)還包括:當所述爬取規(guī)則不包括指示所述后續(xù)地址的類型的第一屬性時,判斷所述后續(xù)地址屬于第二下載隊列。
[0014]在一些實施例中,步驟e)包括:進一步判斷所述后續(xù)地址是否滿足由所述爬取規(guī)則中的第二屬性所定義的正則表達式,如果滿足所述正則表達式,則將作為所述后續(xù)地址與所述正則表達式匹配的結(jié)果的各字符串拼接為要存入相應下載隊列中的地址,否則跳過所述后續(xù)地址。
[0015]在一些實施例中,步驟c)包括:根據(jù)所述爬取規(guī)則中用于描述后續(xù)地址的字符串構(gòu)成特征的第三屬性,從下載的數(shù)據(jù)中解析出要下載的后續(xù)地址。
[0016]在一些實施例中,所述第三屬性是xpath表達式。
[0017]在一些實施例中,步驟b)包括:從第一下載隊列中讀取一條記錄;使用在所述數(shù)據(jù)庫中維護的第一去重列表,對所述記錄進行去重;以及根據(jù)所述記錄來下載相應數(shù)據(jù)。
[0018]在一些實施例中,對所述記錄進行去重的步驟包括:當確定所述記錄與所述第一去重列表中的記錄匹配時,跳過所述記錄并從所述第一下載隊列中讀取下一條記錄。
[0019]在一些實施例中,在步驟e)之前,所述方法還包括以下步驟:使用所述記錄中的地址來更新所述第一去重列表;以及步驟e)包括:在所述后續(xù)地址屬于所述第一下載隊列的情況下,使用更新后的所述第一去重列表對所述后續(xù)地址去重,并將其存入所述第一下載隊列;以及在所述后續(xù)地址屬于所述第二下載隊列的情況下,使用在所述數(shù)據(jù)庫中維護的第二去重列表對所述后續(xù)地址去重,相應更新所述第二去重列表,并將其存入所述第二下載隊列。
[0020]在一些實施例中,步驟b)包括:按優(yōu)先級從所述第二下載隊列中讀取待下載地址;使用在所述數(shù)據(jù)庫中維護的第三去重列表對所述待下載地址進行去重;對由所述待下載地址指向的數(shù)據(jù)進行下載;以及更新所述第三去重列表。
[0021]在一些實施例中,步驟b)還包括:對已下載的數(shù)據(jù)進行檢查;計算已下載的數(shù)據(jù)的數(shù)字摘要;基于所述數(shù)字摘要,使用在所述數(shù)據(jù)庫中維護的第四去重列表對已下載的數(shù)據(jù)進行去重;更新所述第四去重列表;以及將所述已下載的數(shù)據(jù)存入文件系統(tǒng)中。
[0022]在一些實施例中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每條記錄均包括有效期,當使用各個去重列表對相應地址進行去重并且在去重列表中存在與相應地址匹配的記錄時,所述方法包括以下步驟:判斷所述記錄的有效期是否已到期,如果已到期,則不對相應地址進行去重,如果未到期,則對相應地址進行去重。
[0023]在一些實施例中,所述爬取規(guī)則還包括第四屬性,當所述第四屬性的值為“真”時,通過記錄對包括所述第四屬性在內(nèi)的所述爬取規(guī)則的使用的次數(shù),來識別當前下載的鏈接在相應網(wǎng)站的應用列表的第幾頁上。
[0024]在一些實施例中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表時,在當前下載的鏈接在應用列表的預定頁數(shù)的頁面上的情況下,與當前下載的鏈接在應用列表的預定頁數(shù)之后的頁面上的情況下相比,將去重列表中對應記錄的有效期設置為更大。
[0025]在一些實施例中,所述預定頁數(shù)小于等于5頁。
[0026]在一些實施例中,由所述數(shù)據(jù)庫來提供與網(wǎng)站數(shù)據(jù)下載相關(guān)的統(tǒng)計信息。
[0027]在一些實施例中,所述統(tǒng)計信息包括以下一項或多項:所述多個下載隊列的當前長度、指定時間段內(nèi)各個去重列表的長度、或各個去重列表的總長度。
[0028]在一些實施例中,所述數(shù)據(jù)庫是key-value型數(shù)據(jù)庫。
[0029]在一些實施例中,所述數(shù)據(jù)庫是Redi s數(shù)據(jù)庫。
[0030]在一些實施例中,所述預定條件是所有下載隊列為空、達到預定爬取深度、或二者的組合。
[0031]根據(jù)本發(fā)明的第二方面,提供了一種用于下載網(wǎng)站數(shù)據(jù)的分布式系統(tǒng)。該系統(tǒng)包括:控制器,讀取起始地址列表中的一個或多個地址,并將所述一個或多個地址存入在數(shù)據(jù)庫中維護的多個下載隊列中的至少一個下載隊列;數(shù)據(jù)庫,用于維護多個下載隊列,其中,所述多個下載隊列至少包括第一下載隊列和第二下載隊列,且各個下載隊列對應于不同類型的數(shù)據(jù);多個下載模塊,用于根據(jù)所述多個下載隊列來分別下載多個類型的數(shù)據(jù),從根據(jù)所述第一下載隊列下載的數(shù)據(jù)中解析出要下載的后續(xù)地址,判斷所述后續(xù)地址屬于哪個下載隊列,根據(jù)所述判斷的結(jié)果,將所述后續(xù)地址存入相應下載隊列中;以及重復上述過程,直到滿足預定條件為止。
[0032]在一些實施例中,所述多個下載模塊被進一步配置為:按照在所述數(shù)據(jù)庫中集中維護的針對各個網(wǎng)站的下載間隔,根據(jù)相應下載隊列中的記錄,從相應網(wǎng)站下載數(shù)據(jù)。
[0033]在一些實施例中,所述第一下載隊列是網(wǎng)頁下載隊列,以及所述第二下載隊列是應用下載隊列。
[0034]在一些實施例中,針對每個要下載的網(wǎng)站,預定義由多個下載模塊統(tǒng)一使用的、并針對所述網(wǎng)站的不同頁面類型單獨規(guī)定的一條或多條爬取規(guī)則。
[0035]在一些實施例中,所述下載模塊被配置為:當所述爬取規(guī)則包括指示所述后續(xù)地址的類型的第一屬性時,根據(jù)所述第一屬性來判斷所述后續(xù)地址屬于哪個下載隊列。
[0036]在一些實施例中,所述下載模塊還被配置為:當所述爬取規(guī)則不包括指示所述后續(xù)地址的類型的第一屬性時,判斷所述后續(xù)地址屬于第二下載隊列。[0037]在一些實施例中,所述下載模塊被配置為:進一步判斷所述后續(xù)地址是否滿足由所述爬取規(guī)則中的第二屬性所定義的正則表達式,如果滿足所述正則表達式,則將作為所述后續(xù)地址與所述正則表達式匹配的結(jié)果的各字符串拼接為要存入相應下載隊列中的地址,否則跳過所述后續(xù)地址。
[0038]在一些實施例中,所述下載模塊被配置為:根據(jù)所述爬取規(guī)則中用于描述后續(xù)地址的字符串構(gòu)成特征的第三屬性,從下載的數(shù)據(jù)中解析出要下載的后續(xù)地址。
[0039]在一些實施例中,所述第三屬性是xpath表達式。
[0040]在一些實施例中,所述下載模塊被配置為:從第一下載隊列中讀取一條記錄;使用在所述數(shù)據(jù)庫中維護的第一去重列表,對所述記錄進行去重;以及根據(jù)所述記錄來下載相應數(shù)據(jù)。
[0041]在一些實施例中,所述下載模塊還被配置為:當確定所述記錄與所述第一去重列表中的記錄匹配時,跳過所述記錄并從所述第一下載隊列中讀取下一條記錄。
[0042]在一些實施例中,所述下載模塊被配置為:使用所述記錄中的地址來更新所述第一去重列表;在所述后續(xù)地址屬于所述第一下載隊列的情況下,使用更新后的所述第一去重列表對所述后續(xù)地址去重,并將其存入所述第一下載隊列;以及在所述后續(xù)地址屬于所述第二下載隊列的情況下,使用在所述數(shù)據(jù)庫中維護的第二去重列表對所述后續(xù)地址去重,相應更新所述第二去重列表,并將其存入所述第二下載隊列。
[0043]在一些實施例中,所述下載模塊還被配置為:按優(yōu)先級從所述第二下載隊列中讀取待下載地址;使用在所述數(shù)據(jù)庫中維護的第三去重列表對所述待下載地址進行去重;對由所述待下載地址指向的數(shù)據(jù)進行下載;以及更新所述第三去重列表。
[0044]在一些實施例中,所述下載模塊還被配置為:對已下載的數(shù)據(jù)進行檢查;計算已下載的數(shù)據(jù)的數(shù)字摘要;基于所述數(shù)字摘要,使用在所述數(shù)據(jù)庫中維護的第四去重列表對已下載的數(shù)據(jù)進行去重;更新所述第四去重列表;以及將所述已下載的數(shù)據(jù)存入文件系統(tǒng)中。
[0045]在一些實施例中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每條記錄均包括有效期,當使用各個去重列表對相應地址進行去重并且在去重列表中存在與相應地址匹配的記錄時,所述下載模塊還被配置為:
[0046]判斷所述記錄的有效期是否已到期,如果已到期,則不對相應地址進行去重,如果未到期,則對相應地址進行去重。
[0047]在一些實施例中,所述爬取規(guī)則還包括第四屬性,當所述第四屬性的值為“真”時,通過記錄對包括所述第四屬性在內(nèi)的所述爬取規(guī)則的使用的次數(shù),來識別當前下載的鏈接在相應網(wǎng)站的應用列表的第幾頁上。
[0048]在一些實施例中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表時,在當前下載的鏈接在應用列表的預定頁數(shù)的頁面上的情況下,與當前下載的鏈接在應用列表的預定頁數(shù)之后的頁面上的情況下相比,所述下載模塊將去重列表中對應記錄的有效期設置為更大。
[0049]在一些實施例中,所述預定頁數(shù)小于等于5頁。
[0050]在一些實施例中,由所述數(shù)據(jù)庫來提供與網(wǎng)站數(shù)據(jù)下載相關(guān)的統(tǒng)計信息。
[0051]在一些實施例中,所述統(tǒng)計信息包括以下一項或多項:所述多個下載隊列的當前長度、指定時間段內(nèi)各個去重列表的長度、或各個去重列表的總長度。
[0052]在一些實施例中,所述數(shù)據(jù)庫是key-value型數(shù)據(jù)庫。
[0053]在一些實施例中,所述數(shù)據(jù)庫是Redis數(shù)據(jù)庫。
[0054]在一些實施例中,所述預定條件是所有下載隊列為空、達到預定爬取深度、或二者的組合。
[0055]通過使用本發(fā)明提供的方法和系統(tǒng),可以按照要獲取的數(shù)據(jù)的類型,例如(但不限于):網(wǎng)頁文件(例如,111:1111、1111:1111、8111:1111等等)、應用程序(例如,在Windows上運行的exe文件、針對Android系統(tǒng)的apk應用程序包等)、文檔文件(例如,WORD文件、PDF文件等)、動態(tài)圖像文件(例如,AVI文件、MP4文件等等)、靜態(tài)圖像文件(例如,JPG文件、BMP文件等等)、音頻文件(MP3、WMA等等)、以及其他各種數(shù)據(jù)類型(例如,F(xiàn)lash等等),由爬蟲(下載器)采用不同的下載和處理流程來進行處理。充分利用了這些不同類型數(shù)據(jù)在處理器/存儲器資源和/或網(wǎng)絡資源等方面上的不同特性。
[0056]此外,通過使用本發(fā)明提供的方法和系統(tǒng),可以提供針對去重列表中任意記錄的有效期,使得對一些可能會更新的網(wǎng)頁的重復爬取成為可能。
[0057]此外,通過使用本發(fā)明提供的方法和系統(tǒng),可以通過使用xpath表達式和正則表達式,在很大程度上處理了網(wǎng)頁文件中以JS格式表達的網(wǎng)絡地址的問題。
[0058]此外,通過使用本發(fā)明提供的方法和系統(tǒng),支持由多個爬蟲模塊統(tǒng)一使用的、并針對不同頁面類型單獨提供的爬取規(guī)則,使得在簡化了對多個爬蟲模塊的爬取規(guī)則的維護的同時,讓爬取規(guī)則支持更為復雜的設置,以更方便地針對各個網(wǎng)站來設計爬取規(guī)則。特別地,通過讓爬取規(guī)則支持翻頁規(guī)則,使得用戶可以針對不同頁數(shù)來采取不同的爬取策略和更新去重列表的策略。
[0059]此外,通過使用本發(fā)明提供的方法和系統(tǒng),借助專門的控制器和數(shù)據(jù)庫來操作爬蟲模塊,包括:啟動/停止/查看狀態(tài)/修改配置等等,而無需在部署各個爬蟲模塊的節(jié)點上分別進行操作。
[0060]此外,通過使用本發(fā)明提供的方法和系統(tǒng),借助數(shù)據(jù)庫中統(tǒng)一維護的針對各個爬取/下載組維護的列表,可以對所有爬蟲(下載器)的針對某一個網(wǎng)站的爬取間隔進行限制。此外,借助數(shù)據(jù)庫中統(tǒng)一維護的爬取隊列,支持多個分布式爬蟲采用相同的爬取隊列。
[0061]此外,通過使用本發(fā)明提供的方法和系統(tǒng),借助針對數(shù)據(jù)庫中維護的各個列表/隊列的統(tǒng)計功能,可以獲取相關(guān)統(tǒng)計信息,包括(但不限于):當前爬取隊列/下載隊列大小、以及總體/特定時間段內(nèi)的爬取頁面數(shù)/解析下載鏈接數(shù)/下載數(shù)/新文件數(shù)等。
[0062]換言之,通過使用本發(fā)明提供的方法和系統(tǒng),可以解決或至少減輕現(xiàn)有技術(shù)所具有的前述技術(shù)問題。
【專利附圖】

【附圖說明】
[0063]通過下面結(jié)合【專利附圖】
附圖
【附圖說明】本發(fā)明的優(yōu)選實施例,將使本發(fā)明的上述及其它目的、特征和優(yōu)點更加清楚,其中:
[0064]圖1示出了根據(jù)本發(fā)明的實施例的用于下載網(wǎng)站數(shù)據(jù)的示例分布式系統(tǒng)的簡化框圖;
[0065]圖2示出了在圖1所示的數(shù)據(jù)庫中維護的一些示例數(shù)據(jù)結(jié)構(gòu)的示意圖;[0066]圖3?9示出了根據(jù)本發(fā)明的實施例的用于設計示例爬取規(guī)則的示例過程的屏幕截圖;
[0067]圖10示出了根據(jù)本發(fā)明的實施例的用于下載網(wǎng)站數(shù)據(jù)的分布式方法的示例的爬取部分的流程圖;以及
[0068]圖11示出了根據(jù)本發(fā)明的實施例的用于下載網(wǎng)站數(shù)據(jù)的分布式方法的示例的下載部分的流程圖。
[0069]在本發(fā)明的所有附圖中,相同或相似的結(jié)構(gòu)均以相同或相似的附圖標記來標識?!揪唧w實施方式】
[0070]下面參照附圖對本發(fā)明的優(yōu)選實施例進行詳細說明,在描述過程中省略了對于本發(fā)明來說是不必要的細節(jié)和功能,以防止對本發(fā)明的理解造成混淆。以下,將結(jié)合特定的實施例來詳細描述本發(fā)明的方法和系統(tǒng)。但是本領域技術(shù)人員應當理解:以下描述的各個特定實施例并不限制本發(fā)明的范圍;相反地,應當將這些特定實施例理解為被包括在由所附權(quán)利要求限定的本發(fā)明的精神和范圍中,且本領域技術(shù)人員可以在不脫離由所附權(quán)利要求限定的本發(fā)明的精神和范圍的情況下,對本發(fā)明做出各種修改、添加、刪除、或替換。
[0071]首先,參見圖1,其示出了根據(jù)本發(fā)明的實施例的用于下載網(wǎng)站數(shù)據(jù)的示例分布式系統(tǒng)10的簡化框圖。分布式系統(tǒng)10包括:控制器110、數(shù)據(jù)庫120、多個爬蟲130_1?130_N (N代表爬蟲的數(shù)目)、以及多個下載器140_1?140_M(M代表下載器的數(shù)目)??刂破?10與數(shù)據(jù)庫120相連,且數(shù)據(jù)庫120與各個爬蟲130_1?130_N和各個下載器140_1?140_M相連,形成以數(shù)據(jù)庫120為中心的星型拓撲結(jié)構(gòu),進而控制器110可以通過數(shù)據(jù)庫120來控制各個爬蟲130_1?130_N和各個下載器140_1?140_M,且各個爬蟲130_1?130_N和各個下載器140_1?140_11可以通過數(shù)據(jù)庫120向控制器110反饋各種信息。當然,在另一些實施例中,控制器110可以與各個爬蟲130_1?130_N和各個下載器140_1?140_M直接相連并通信。
[0072]在本實施例中,數(shù)據(jù)庫120是key-value型數(shù)據(jù)庫,更優(yōu)選地,是Redis數(shù)據(jù)庫。當然,數(shù)據(jù)庫120也可以是其它key-value型數(shù)據(jù)庫,例如(但不限于):Berkeley DB、MemCacheDB> BigTable> Dynamo> Tokyo Cabinet 等等。此外,數(shù)據(jù)庫 120 也可以是其它非key-value 型數(shù)據(jù)庫,例如(但不限于):MySQL> Microsoft SQL、Oracle RDBMS 等。
[0073]然而,與傳統(tǒng)的關(guān)系型數(shù)據(jù)庫相比,key-value型數(shù)據(jù)庫能夠提供更高的查詢速度、更大的數(shù)據(jù)容量、更高的并發(fā)數(shù)、更適合通過主鍵進行查詢,因此優(yōu)選地使用key-value型數(shù)據(jù)庫為本發(fā)明的各個模塊提供隊列/列表/配置/數(shù)據(jù)文件的存儲和管理等等。此夕卜,由于Redis數(shù)據(jù)庫提供了多種數(shù)據(jù)結(jié)構(gòu)(包括字符串(string)、雙向鏈表(list)、集合(set)、以及有序集合(zset)),因此其與其它key-value型數(shù)據(jù)庫相比,更適于實現(xiàn)本發(fā)明的方法和系統(tǒng)。在下文中將描述通過這些數(shù)據(jù)結(jié)構(gòu),特別是有序集合(zset),來實現(xiàn)根據(jù)本發(fā)明的實施例的在數(shù)據(jù)庫120中存儲的各種數(shù)據(jù)結(jié)構(gòu)。
[0074]為了方便對下文的理解,下面簡要介紹一下zset的結(jié)構(gòu)。zset是一個集合類的數(shù)據(jù)結(jié)構(gòu),其中每個元素均額外具有一個順序?qū)傩?z值,又被稱為score值)??梢栽谔砑踊蛐薷脑氐臅r候指定這一屬性。每次指定后,zset會自動按新的z值來重新調(diào)整zset中各元素的順序??梢愿鷵?jù)z值指定的順序,以很高的效率對zset中的元素進行存取。更多細節(jié)可以參考 zset 的使用說明:http://redis.1o/commands#sorted_set。
[0075]現(xiàn)在,返回圖1,將繼續(xù)描述分布式系統(tǒng)10。在本實施例中,分布式系統(tǒng)10主要用于對指定網(wǎng)站的網(wǎng)頁和在網(wǎng)頁中提供的應用程序進行下載,并對下載到的網(wǎng)頁進行分析,從中提取出可供后續(xù)下載的網(wǎng)頁和/或應用程序的地址。在另一示例中,分布式系統(tǒng)10也可以用于對其他類型的數(shù)據(jù)進行下載,例如對網(wǎng)頁和在網(wǎng)頁中提供的視頻進行下載、分析等。在另一示例中,分布式系統(tǒng)10也可以用于對一種或三種以上的數(shù)據(jù)(例如,網(wǎng)頁、應用程序、音頻等)進行下載、分析等。
[0076]在分布式系統(tǒng)10中,控制器110通過數(shù)據(jù)庫120提供的數(shù)據(jù)庫接口來處理在數(shù)據(jù)庫120中維護的各個數(shù)據(jù)結(jié)構(gòu)等,從而間接地控制各個爬蟲130_1~130_N和各個下載器140_1 ~140_M。
[0077]在本實施例中,爬蟲130_1~130_N和下載器140_1~140_M是基于開源爬蟲框架scrapyl.6開發(fā)的,但本發(fā)明的實施例不限于此,也可以使用其它爬蟲程序。
[0078]因此,在圖1所示的分布式系統(tǒng)10中,各個模塊的主要功能和使用方式如表1所
【權(quán)利要求】
1.一種用于下載網(wǎng)站數(shù)據(jù)的分布式方法,包括以下步驟: a)讀取起始地址列表中的一個或多個地址,并將所述一個或多個地址存入在數(shù)據(jù)庫中維護的多個下載隊列中的至少一個下載隊列,其中,所述多個下載隊列至少包括第一下載隊列和第二下載隊列,且各個下載隊列對應于不同類型的數(shù)據(jù); b)根據(jù)所述多個下載隊列來分別下載多個類型的數(shù)據(jù); c)從根據(jù)所述第一下載隊列下載的數(shù)據(jù)中解析出要下載的后續(xù)地址; d)判斷所述后續(xù)地址屬于哪個下載隊列; e)根據(jù)步驟d)中的判斷結(jié)果,將所述后續(xù)地址存入相應下載隊列中;以及 f)重復上述步驟b)至e),直到滿足預定條件為止。
2.根據(jù)權(quán)利要求1所述的方法,其中,步驟b)包括: 按照在所述數(shù)據(jù)庫中集中維護的針對各個網(wǎng)站的下載間隔,根據(jù)相應下載隊列中的記錄,從相應網(wǎng)站下載數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的方法,其中,所述第一下載隊列是網(wǎng)頁下載隊列,以及所述第二下載隊列是應用下載隊列。
4.根據(jù)權(quán)利要求1所述的方法,其中,針對每個要下載的網(wǎng)站,預定義由多個下載模塊統(tǒng)一使用的、并針對所述網(wǎng)站的不同頁面類型單獨規(guī)定的一條或多條爬取規(guī)則。
5.根據(jù)權(quán)利要求4所述的方法,其中,步驟d)包括: 當所述爬取規(guī)則包括指示所述后續(xù)地址的類型的第一屬性時,根據(jù)所述第一屬性來判斷所述后續(xù)地址屬于哪個下載隊列。
6.根據(jù)權(quán)利要求5所述的方法,其中,步驟d)還包括: 當所述爬取規(guī)則不包括指示所述后續(xù)地址的類型的第一屬性時,判斷所述后續(xù)地址屬于第二下載隊列。
7.根據(jù)權(quán)利要求4所述的方法,其中,步驟e)包括: 進一步判斷所述后續(xù)地址是否滿足由所述爬取規(guī)則中的第二屬性所定義的正則表達式,如果滿足所述正則表達式,則將作為所述后續(xù)地址與所述正則表達式匹配的結(jié)果的各字符串拼接為要存入相應下載隊列中的地址,否則跳過所述后續(xù)地址。
8.根據(jù)權(quán)利要求4所述的方法,其中,步驟c)包括: 根據(jù)所述爬取規(guī)則中用于描述后續(xù)地址的字符串構(gòu)成特征的第三屬性,從下載的數(shù)據(jù)中解析出要下載的后續(xù)地址。
9.根據(jù)權(quán)利要求8所述的方法,其中,所述第三屬性是xpath表達式。
10.根據(jù)權(quán)利要求4所述的方法,其中,步驟b)包括: 從第一下載隊列中讀取一條記錄; 使用在所述數(shù)據(jù)庫中維護的第一去重列表,對所述記錄進行去重;以及 根據(jù)所述記錄來下載相應數(shù)據(jù)。
11.根據(jù)權(quán)利要求10所述的方法,其中,對所述記錄進行去重的步驟包括: 當確定所述記錄與所述第一去重列表中的記錄匹配時,跳過所述記錄并從所述第一下載隊列中讀取下一條記錄。
12.根據(jù)權(quán)利要求10所述的方法,其中,在步驟e)之前,所述方法還包括以下步驟: 使用所述記錄中的地址來更新所述第一去重列表;以及步驟e)包括:在所述后續(xù)地址屬于所述第一下載隊列的情況下,使用更新后的所述第一去重列表對所述后續(xù)地址去重,并將其存入所述第一下載隊列;以及 在所述后續(xù)地址屬于所述第二下載隊列的情況下,使用在所述數(shù)據(jù)庫中維護的第二去重列表對所述后續(xù)地址去重,相應更新所述第二去重列表,并將其存入所述第二下載隊列。
13.根據(jù)權(quán)利要求12所述的方法,其中,步驟b)包括: 按優(yōu)先級從所述第二下載隊列中讀取待下載地址; 使用在所述數(shù)據(jù)庫中維護的第三去重列表對所述待下載地址進行去重; 對由所述待下載地址指向的數(shù)據(jù)進行下載;以及 更新所述第三去重列表。
14.根據(jù)權(quán)利要求13所述的方法,其中,步驟b)還包括: 對已下載的數(shù)據(jù)進行檢查; 計算已下載的數(shù)據(jù)的數(shù)字摘要; 基于所述數(shù)字摘要,使用在所述數(shù)據(jù)庫中維護的第四去重列表對已下載的數(shù)據(jù)進行去重; 更新所述第四去重列表;以及 將所述已下載的數(shù)據(jù)存入文件 系統(tǒng)中。
15.根據(jù)權(quán)利要求14所述的方法,其中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每條記錄均包括有效期,當使用各個去重列表對相應地址進行去重并且在去重列表中存在與相應地址匹配的記錄時,所述方法包括以下步驟: 判斷所述記錄的有效期是否已到期,如果已到期,則不對相應地址進行去重,如果未到期,則對相應地址進行去重。
16.根據(jù)權(quán)利要求15所述的方法,其中,所述爬取規(guī)則還包括第四屬性,當所述第四屬性的值為“真”時,通過記錄對包括所述第四屬性在內(nèi)的所述爬取規(guī)則的使用的次數(shù),來識別當前下載的鏈接在相應網(wǎng)站的應用列表的第幾頁上。
17.根據(jù)權(quán)利要求16所述的方法,其中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表時,在當前下載的鏈接在應用列表的預定頁數(shù)的頁面上的情況下,與當前下載的鏈接在應用列表的預定頁數(shù)之后的頁面上的情況下相比,將去重列表中對應記錄的有效期設置為更大。
18.根據(jù)權(quán)利要求17所述的方法,其中,所述預定頁數(shù)小于等于5頁。
19.根據(jù)權(quán)利要求1~18中任一項所述的方法,其中,由所述數(shù)據(jù)庫來提供與網(wǎng)站數(shù)據(jù)下載相關(guān)的統(tǒng)計信息。
20.根據(jù)權(quán)利要求19所述的方法,其中,所述統(tǒng)計信息包括以下一項或多項:所述多個下載隊列的當前長度、指定時間段內(nèi)各個去重列表的長度、或各個去重列表的總長度。
21.根據(jù)權(quán)利要求1所述的方法,其中,所述數(shù)據(jù)庫是key-value型數(shù)據(jù)庫。
22.根據(jù)權(quán)利要求21所述的方法,其中,所述數(shù)據(jù)庫是Redis數(shù)據(jù)庫。
23.根據(jù)權(quán)利要求1所述的方法,其中,所述預定條件是所有下載隊列為空、達到預定爬取深度、或二者的組合。
24.一種用于下載網(wǎng)站數(shù)據(jù)的分布式系統(tǒng),包括: 控制器,讀取起始地址列表中的一個或多個地址,并將所述一個或多個地址存入在數(shù)據(jù)庫中維護的多個下載隊列中的至少一個下載隊列; 數(shù)據(jù)庫,用于維護多個下載隊列,其中,所述多個下載隊列至少包括第一下載隊列和第二下載隊列,且各個下載隊列對應于不同類型的數(shù)據(jù); 多個下載模塊,用于根據(jù)所述多個下載隊列來分別下載多個類型的數(shù)據(jù),從根據(jù)所述第一下載隊列下載的數(shù)據(jù)中解析出要下載的后續(xù)地址,判斷所述后續(xù)地址屬于哪個下載隊列,根據(jù)所述判斷的結(jié)果,將所述后續(xù)地址存入相應下載隊列中;以及重復上述過程,直到滿足預定條件為止。
25.根據(jù)權(quán)利要求24所述的分布式系統(tǒng),其中,所述多個下載模塊被進一步配置為: 按照在所述數(shù)據(jù)庫中集中維護的針對各個網(wǎng)站的下載間隔,根據(jù)相應下載隊列中的記錄,從相應網(wǎng)站下載數(shù)據(jù)。
26.根據(jù)權(quán)利要求24所述的分布式系統(tǒng),其中,所述第一下載隊列是網(wǎng)頁下載隊列,以及所述第二下載隊列是應用下載隊列。
27.根據(jù)權(quán)利要求24所述的分布式系統(tǒng),其中,針對每個要下載的網(wǎng)站,預定義由多個下載模塊統(tǒng)一使用的、并針對所述網(wǎng)站的不同頁面類型單獨規(guī)定的一條或多條爬取規(guī)則。
28.根據(jù)權(quán)利要求27所述的分布式系統(tǒng),其中,所述下載模塊被配置為: 當所述爬取規(guī)則包括指示所述后續(xù)地址的類型的第一屬性時,根據(jù)所述第一屬性來判斷所述后續(xù)地址屬于哪個下載隊列。
29.根據(jù)權(quán)利要求28所述的分布式系統(tǒng),其中,所述下載模塊還被配置為: 當所述爬取規(guī)則不包括指示所述后續(xù)地址的類型的第一屬性時,判斷所述后續(xù)地址屬于第二下載隊列。
30.根據(jù)權(quán)利要求27所述的分布式系統(tǒng),其中,所述下載模塊被配置為: 進一步判斷所述后續(xù)地址是否滿足由所述爬取規(guī)則中的第二屬性所定義的正則表達式,如果滿足所述正則表達式,則將作為所述后續(xù)地址與所述正則表達式匹配的結(jié)果的各字符串拼接為要存入相應下載隊列中的地址,否則跳過所述后續(xù)地址。
31.根據(jù)權(quán)利要求27所述的分布式系統(tǒng),其中,所述下載模塊被配置為: 根據(jù)所述爬取規(guī)則中用于描述后續(xù)地址的字符串構(gòu)成特征的第三屬性,從下載的數(shù)據(jù)中解析出要下載的后續(xù)地址。
32.根據(jù)權(quán)利要求31所述的分布式系統(tǒng),其中,所述第三屬性是xpath表達式。
33.根據(jù)權(quán)利要求27所述的分布式系統(tǒng),其中,所述下載模塊被配置為: 從第一下載隊列中讀取一條記錄; 使用在所述數(shù)據(jù)庫中維護的第一去重列表,對所述記錄進行去重;以及 根據(jù)所述記錄來下載相應數(shù)據(jù)。
34.根據(jù)權(quán)利要求33所述的分布式系統(tǒng),其中,所述下載模塊還被配置為: 當確定所述記錄與所述第一去重列表中的記錄匹配時,跳過所述記錄并從所述第一下載隊列中讀取下一條記錄。
35.根據(jù)權(quán)利要求33所述的分布式系統(tǒng),其中,所述下載模塊被配置為: 使用所述記錄中的地址來更新所述第一去重列表; 在所述后續(xù)地址屬于所述第一下載隊列的情況下,使用更新后的所述第一去重列表對所述后續(xù)地址去重,并將其存入所述第一下載隊列;以及在所述后續(xù)地址屬于所述第二下載隊列的情況下,使用在所述數(shù)據(jù)庫中維護的第二去重列表對所述后續(xù)地址去重,相應更新所述第二去重列表,并將其存入所述第二下載隊列。
36.根據(jù)權(quán)利要求35所述的分布式系統(tǒng),其中,所述下載模塊還被配置為: 按優(yōu)先級從所述第二下載隊列中讀取待下載地址; 使用在所述數(shù)據(jù)庫中維護的第三去重列表對所述待下載地址進行去重; 對由所述待下載地址指向的數(shù)據(jù)進行下載;以及 更新所述第三去重列表。
37.根據(jù)權(quán)利要求36所述的分布式系統(tǒng),其中,所述下載模塊還被配置為: 對已下載的數(shù)據(jù)進行檢查; 計算已下載的數(shù)據(jù)的數(shù)字摘要; 基于所述數(shù)字摘要,使用在所述數(shù)據(jù)庫中維護的第四去重列表對已下載的數(shù)據(jù)進行去重; 更新所述第四去重列表;以及 將所述已下載的數(shù)據(jù)存入文件系統(tǒng)中。
38.根據(jù)權(quán)利要求37所述的分布式系統(tǒng),其中,所述第一去重列表、所述第二去重列表和所述第三去重列表中的每條記錄均包括有效期,當使用各個去重列表對相應地址進行去重并且在去重列表中存在 與相應地址匹配的記錄時,所述下載模塊還被配置為: 判斷所述記錄的有效期是否已到期,如果已到期,則不對相應地址進行去重,如果未到期,則對相應地址進行去重。
39.根據(jù)權(quán)利要求38所述的分布式系統(tǒng),其中,所述爬取規(guī)則還包括第四屬性,當所述第四屬性的值為“真”時,通過記錄對包括所述第四屬性在內(nèi)的所述爬取規(guī)則的使用的次數(shù),來識別當前下載的鏈接在相應網(wǎng)站的應用列表的第幾頁上。
40.根據(jù)權(quán)利要求39所述的分布式系統(tǒng),其中,在更新所述第一去重列表、所述第二去重列表或所述第三去重列表時,在當前下載的鏈接在應用列表的預定頁數(shù)的頁面上的情況下,與當前下載的鏈接在應用列表的預定頁數(shù)之后的頁面上的情況下相比,所述下載模塊將去重列表中對應記錄的有效期設置為更大。
41.根據(jù)權(quán)利要求40所述的分布式系統(tǒng),其中,所述預定頁數(shù)小于等于5頁。
42.根據(jù)權(quán)利要求24~41中任一項所述的分布式系統(tǒng),其中,由所述數(shù)據(jù)庫來提供與網(wǎng)站數(shù)據(jù)下載相關(guān)的統(tǒng)計信息。
43.根據(jù)權(quán)利要求42所述的分布式系統(tǒng),其中,所述統(tǒng)計信息包括以下一項或多項:所述多個下載隊列的當前長度、指定時間段內(nèi)各個去重列表的長度、或各個去重列表的總長度。
44.根據(jù)權(quán)利要求24所述的分布式系統(tǒng),其中,所述數(shù)據(jù)庫是key-value型數(shù)據(jù)庫。
45.根據(jù)權(quán)利要求44所述的分布式系統(tǒng),其中,所述數(shù)據(jù)庫是Redis數(shù)據(jù)庫。
46.根據(jù)權(quán)利要求24所述的分布式系統(tǒng),其中,所述預定條件是所有下載隊列為空、達到預定爬取深度、或二者的組合。
【文檔編號】H04L29/08GK103475688SQ201310198688
【公開日】2013年12月25日 申請日期:2013年5月24日 優(yōu)先權(quán)日:2013年5月24日
【發(fā)明者】吳自立 申請人:北京網(wǎng)秦天下科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
永昌县| 三原县| 新丰县| 汽车| 象山县| 南岸区| 长武县| 奈曼旗| 义马市| 漯河市| 剑阁县| 通江县| 泗水县| 浮梁县| 全椒县| 香港 | 鄂托克前旗| 舞阳县| 德格县| 舟山市| 绥阳县| 怀来县| 射阳县| 淄博市| 岐山县| 娱乐| 土默特右旗| 丰县| 五台县| 晋江市| 忻州市| 赤壁市| 湘潭市| 宁乡县| 贵州省| 天祝| 花莲市| 黄骅市| 建平县| 林口县| 永济市|