抓取網(wǎng)頁數(shù)據(jù)的方法及系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明涉及通信領域,更為具體而言,涉及抓取網(wǎng)頁數(shù)據(jù)的方法及系統(tǒng)。
【背景技術】
[0002]隨著互聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展,海量數(shù)據(jù)日益增多,用戶產(chǎn)品層出不窮,競爭的加劇以及產(chǎn)品迭代速度的加快給數(shù)據(jù)采集技術提出了更高的要求。產(chǎn)品對數(shù)據(jù)采集技術存在豐富而多變的需求,例如,采集由⑶I (Graphical User Interface,圖形用戶界面)交互觸發(fā)展現(xiàn)的數(shù)據(jù)全集、采集被驗證機制阻礙的信息或者采集由關鍵字驅動的查詢結果信息等。然而,目前在現(xiàn)有技術中缺乏一種能夠支持不同種類需求的數(shù)據(jù)采集方法。
【發(fā)明內容】
[0003]為有效地解決上述技術問題,本發(fā)明提供了一種抓取網(wǎng)頁數(shù)據(jù)的方法及系統(tǒng)。
[0004]一方面,本發(fā)明的實施方式提供了一種抓取網(wǎng)頁數(shù)據(jù)的方法,所述方法包括:
[0005]生成數(shù)據(jù)模板;
[0006]根據(jù)所述生成的數(shù)據(jù)模板以及第一請求數(shù)據(jù)拼接出第二請求數(shù)據(jù);
[0007]根據(jù)所述拼接出的第二請求數(shù)據(jù)執(zhí)行網(wǎng)頁數(shù)據(jù)的抓取。
[0008]另一方面,本發(fā)明的實施方式還提供了一種抓取網(wǎng)頁數(shù)據(jù)的系統(tǒng),所述系統(tǒng)包括:
[0009]生成模塊,用于生成數(shù)據(jù)模板;
[0010]拼接模塊,用于根據(jù)所述生成模塊所生成的數(shù)據(jù)模板以及第一請求數(shù)據(jù)拼接出第二請求數(shù)據(jù);
[0011]抓取模塊,用于根據(jù)所述拼接模塊所拼接出的第二請求數(shù)據(jù)執(zhí)行網(wǎng)頁數(shù)據(jù)的抓取。
[0012]實施本發(fā)明提供的抓取網(wǎng)頁數(shù)據(jù)的方法及系統(tǒng)可以在抓取網(wǎng)頁數(shù)據(jù)的過程中提高對多樣化需求的適應性。
【附圖說明】
[0013]圖1是根據(jù)本發(fā)明實施方式的一種抓取網(wǎng)頁數(shù)據(jù)的方法的流程圖;
[0014]圖2示出了圖1所示的步驟SllO的一種實施方式;
[0015]圖3是根據(jù)本發(fā)明實施方式的另一種抓取網(wǎng)頁數(shù)據(jù)的方法的框架圖;
[0016]圖4是根據(jù)本發(fā)明實施方式的一種抓取網(wǎng)頁數(shù)據(jù)的系統(tǒng)的結構示意圖;
[0017]圖5示出了圖4所示的生成模塊110的一種實施方式。
【具體實施方式】
[0018]為使本發(fā)明的實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合附圖對本發(fā)明作進一步地詳細描述。
[0019]圖1是根據(jù)本發(fā)明實施方式的一種抓取網(wǎng)頁數(shù)據(jù)的方法的流程圖。所述方法包括:
[0020]SllO:生成數(shù)據(jù)模板。
[0021]S120:根據(jù)所述生成的數(shù)據(jù)模板以及第一請求數(shù)據(jù)拼接出第二請求數(shù)據(jù)。
[0022]其中,在本發(fā)明的實施方式中,該數(shù)據(jù)模板可以包括:請求數(shù)據(jù)模板,所述第一請求數(shù)據(jù)為用戶的原始請求數(shù)據(jù),而該第二請求數(shù)據(jù)是根據(jù)所述數(shù)據(jù)模塊以及第一請求數(shù)據(jù)拼接出的真正用于發(fā)送的請求數(shù)據(jù)。
[0023]S130:根據(jù)所述拼接出的第二請求數(shù)據(jù)執(zhí)行網(wǎng)頁數(shù)據(jù)的抓取。
[0024]在上述實施方式中,通過數(shù)據(jù)模板可以在抓取網(wǎng)頁數(shù)據(jù)的過程中提高對多樣化需求的適應性。
[0025]其中,在本發(fā)明的實施方式中,該步驟S130可以包括:將所述拼接出的第二請求數(shù)據(jù)發(fā)送至待抓取的站點;接收所述站點返回的響應數(shù)據(jù)。
[0026]并且,在本發(fā)明的實施方式中,所述第一請求數(shù)據(jù)、第二請求數(shù)據(jù)以及響應數(shù)據(jù)可以是HTTP (Hypertext transfer protocol,超文本傳輸協(xié)議)協(xié)議數(shù)據(jù)。
[0027]為直接面向指定數(shù)據(jù),不下載頁面中其他無關數(shù)據(jù),節(jié)省帶寬,以及實現(xiàn)定制化抓取,在本發(fā)明的一種優(yōu)選的實施方式中,該數(shù)據(jù)模板還可以包括:響應數(shù)據(jù)模板。并且,在執(zhí)行步驟S140后可以根據(jù)該響應數(shù)據(jù)模板提取所述響應數(shù)據(jù)中的部分數(shù)據(jù)。其中該響應數(shù)據(jù)模板描述了響應數(shù)據(jù)中所需要的一部分數(shù)據(jù)的位置。
[0028]此外,為實現(xiàn)對非響應數(shù)據(jù)模板解析方式的支持,進一步提高對個性化及定制化抓取的支持,在本發(fā)明的另一種優(yōu)選的實施方式中,除根據(jù)響應數(shù)據(jù)模板提取所述響應數(shù)據(jù)中的部分數(shù)據(jù)的這一定制化抓取方式以外,還可以根據(jù)用戶的自定義配置提取所述響應數(shù)據(jù)中的部分數(shù)據(jù)來實現(xiàn)定制化抓取。其中所述自定義配置例如可以是正則表達式、XPath (Xml Path Language,可擴展標記語言路徑語言)字符串、JSONPath (JS0N路徑語言)字符串等。
[0029]如圖2所示,步驟SllO具體可以通過以下方式實現(xiàn):
[0030]Slll:對所述站點進行網(wǎng)頁數(shù)據(jù)的抓取。
[0031]S112:截獲所述抓取產(chǎn)生的傳輸數(shù)據(jù)。
[0032]S113:根據(jù)所述截獲的傳輸數(shù)據(jù)中的各請求數(shù)據(jù)生成所述請求數(shù)據(jù)模板,以及,根據(jù)所述截獲的傳輸數(shù)據(jù)中的各響應數(shù)據(jù)生成所述響應數(shù)據(jù)模板。
[0033]其中,在本發(fā)明的實施方式中,該步驟S113中的根據(jù)所述截獲的傳輸數(shù)據(jù)中的各請求數(shù)據(jù)生成所述請求數(shù)據(jù)模板可以通過以下方式實現(xiàn):確定所述各請求數(shù)據(jù)中相同的名值對以及不同的名值對;將所述相同的名值對直接寫入到所述請求數(shù)據(jù)模板,將所述不同的名值對中的取值修正為替換標簽后寫入到所述請求數(shù)據(jù)模板。其中,名值對是指字段的“名稱”和“取值”,以HTTP標準請求報文的報文頭中的字段Host:WWW.baidu.com為例,Host是字段的名稱,www.baidu.com為字段的取值,“Host”:“www.baidu.com”即為一個名值對。
[0034]并且,根據(jù)所述截獲的傳輸數(shù)據(jù)的中的各響應數(shù)據(jù)生成所述響應數(shù)據(jù)模板可以通過以下方式實現(xiàn):確定所述各響應數(shù)據(jù)中相同的名值對以及不同的名值對;將所述相同的名值對直接寫入到所述響應數(shù)據(jù)模板,將所述不同的名值對中的取值修正為替換標簽后寫入到所述響應數(shù)據(jù)模板。
[0035]以下結合具體的例子對本發(fā)明的實施方式進行具體說明。如圖3所示,首先獲取瀏覽器與網(wǎng)站之間交互的數(shù)據(jù)(包括HTTP請求數(shù)據(jù)以及HTTP響應數(shù)據(jù)),并從所述獲取的交互數(shù)據(jù)中分析出穩(wěn)定不變的數(shù)據(jù)格式信息,即數(shù)據(jù)模板,包括:請求數(shù)據(jù)模板以及響應數(shù)據(jù)模板,其中該請求數(shù)據(jù)模板用于拼接請求數(shù)據(jù),響應數(shù)據(jù)模板用于描述響應數(shù)據(jù)中所需要的一部分數(shù)據(jù)的位置;然后將第一請求數(shù)據(jù)(用戶的原始請求數(shù)據(jù))加載到請求隊列;最后根據(jù)請求數(shù)據(jù)模板以及請求隊列中的第一請求數(shù)據(jù)拼接出第二請求數(shù)據(jù),并以HTTP協(xié)議的方式發(fā)送給待抓取的站點,然后以HTTP協(xié)議的方式讀取該站點返回的響應數(shù)據(jù),從該響應數(shù)據(jù)中提取所需要的數(shù)據(jù)(即定制化提取),比如從站點返回的響應數(shù)據(jù)一般為 HTML (HyperText Mark-up Language,超文本標記語言)網(wǎng)頁,或者 JSON (JavaScriptObject Notat1n,一種輕量級的數(shù)據(jù)交換格式)數(shù)據(jù)或者XML (Extensible MarkupLanguage,可擴展標記語言)數(shù)據(jù)等,而對于用戶而言,可能只關心一部分的數(shù)據(jù)(例如一個淘寶網(wǎng)頁中的商品名稱以及價格),具體地可以根據(jù)響應數(shù)據(jù)模板進行提取,此外在本發(fā)明的實施方式中,還可以向用戶提供接口設計(輸入響應數(shù)據(jù)以及用戶自定義配置),使用戶擴展設計出滿足自己需求的用于定制化提取的程序。該用戶自定義配置例如可以是正則表達式、XPath (Xml Path Language,可擴展標記語言路徑語言)字符串、JSONPath (JSON路徑語言)字符串等。此外,在本發(fā)明的實施方式中,通過采用并發(fā)線程池提高抓取效率。
[0036]以下對生成數(shù)據(jù)模板的具體過程進行說明。
[0037]首先,在瀏覽器和網(wǎng)站服務器之間架設網(wǎng)絡代理;其次,用戶基于瀏覽器發(fā)生η輪網(wǎng)頁數(shù)據(jù)的抓取行為,并使用代理截獲所述抓取產(chǎn)生的傳輸數(shù)據(jù)(包括HTTP請求數(shù)據(jù)以及HTTP響應數(shù)據(jù)),令每輪交互過程分為m組報文,將請求數(shù)據(jù)報文標識成Snm,將響應數(shù)據(jù)報文標識成Rnm,則第j (1〈 = j< = η)輪交互過程表示為:C(j)=[(Sj I, Rjl),(Sj2, Rj2),...,(Sjm, Rjm)],第 j 輪中第 k 組(1〈 = k〈 = m)交互數(shù)據(jù)為(Sjk, Rjk);最后確定該η輪交互中同組請求數(shù)據(jù)報文中的C0MM0N_KV(相同的“KV對”,即名值對,