網頁腳本動態生成的鏈接的提取方法及裝置的制造方法
【技術領域】
[0001]本發明涉及計算機技術領域,特別是涉及一種網頁腳本動態生成的鏈接的提取方法及裝置。
【背景技術】
[0002]搜索引擎的網絡蜘蛛是通過網頁的鏈接地址來尋找網頁的,先從網站某一個頁面開始,讀取頁面內容,并提取網頁中的統一資源定位符(Uniform Resource Locator,簡稱URL),然后通過這些URL鏈接地址,尋找下一個網頁,按照此方法循環下去。通常情況下,URL鏈接存在于超文本標記語言(HyperText Markup Language,簡稱HTML)網頁的<a>標簽的href屬性中,網絡蜘蛛僅需要遍歷HTML網頁的所有節點,找出其中<a>標簽的href屬性即可。但是對于網頁中某些程序代碼(例如:Java腳本(Javascript)代碼)執行后動態生成的URL鏈接,網絡蜘蛛沒有更好的方法將其抽取出來。
[0003]通常情況下,對于這些動態生成的URL鏈接,網絡蜘蛛先加載瀏覽器內核引擎,下載完網頁后,將網頁中的某些程序代碼(例如Javascript代碼)在瀏覽器內核引擎中執行一次,這樣就可以得到被修改過的HTML網頁,此時,網絡蜘蛛可以采用普通鏈接抽取的方法進行鏈接抽取。但是,該解決方法存在以下缺點:
[0004]程序代碼(例如Javascript代碼)在瀏覽器內核引擎執行后,生成的鏈接不一定會表現在修改過的HTML網頁中,這種情況下網絡蜘蛛就抽取不到該鏈接地址。此外,按照該方法進行鏈接抽取,需要將某些程序代碼逐一執行,會占用較大的工作資源,尤其是代碼量較大的情況下,資源耗費更多,可行性低。
【發明內容】
[0005]鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上述問題的一種網頁腳本動態生成的鏈接的提取方法及裝置。
[0006]基于本發明的一個方面,提供了一種網頁腳本動態生成的鏈接的提取方法,包括:
[0007]獲取網頁中的腳本代碼;
[0008]根據所述腳本代碼的語言規則對所述腳本語言進行分割,將所述腳本語言分割為至少一個獨立語句;
[0009]對各獨立語句進行鏈接特征分析,提取其中存在的鏈接。
[0010]可選地,所述對各獨立語句進行鏈接特征分析,包括:
[0011 ] 對各獨立語句的架構進行解析,獲取各層架構中的鏈接特征參數。
[0012]可選地,獨立語句使用嵌入函數實現多層架構。
[0013]可選地,獲取各層架構中的鏈接特征參數,包括:
[0014]獲取當前層架構中的變量和/或常量;
[0015]根據設定規則對所述當前層架構中的變量和/或常量進行計算,得到計算結果;
[0016]對所述計算結果進行鏈接特征分析,以確定其中是否存在鏈接特征。
[0017]可選地,按如下步驟獲取當前層架構中的變量:
[0018]檢測當前層架構中是否存在var name = value型或其變種;
[0019]若是,則獲取var name = value型或其變種對應的變量;
[0020]若否,則確定當前層架構中不存在變量。
[0021]可選地,按如下步驟獲取當前層架構中的常量:
[0022]獲取當前層架構中由單引號和/或雙引號限定的所有常量。
[0023]可選地,若常量兩側不緊鄰加號,則該常量本身具備鏈接特征。
[0024]可選地,根據所述腳本代碼的語言規則對所述腳本語言進行分割,包括:
[0025]根據所述語言規則確定各獨立語句的分割點;
[0026]使用所述語言規則中設定的分隔符在所述分割點對所述腳本語言進行分割。
[0027]可選地,所述分隔符包括分號。
[0028]可選地,對各獨立語句進行鏈接特征分析,提取其中存在的鏈接,包括:
[0029]查找網頁各節點的<a>標簽中的href屬性;
[0030]從所述href屬性中提取鏈接。
[0031]基于本發明的另一個方面,提供了一種網頁腳本動態生成的鏈接的提取裝置,包括:
[0032]獲取模塊,適于獲取網頁中的腳本代碼;
[0033]分割模塊,適于根據所述腳本代碼的語言規則對所述腳本語言進行分割,將所述腳本語言分割為至少一個獨立語句;
[0034]提取模塊,適于對各獨立語句進行鏈接特征分析,提取其中存在的鏈接。
[0035]可選地,所述提取模塊還適于:
[0036]對各獨立語句的架構進行解析,獲取各層架構中的鏈接特征參數。
[0037]可選地,獨立語句使用嵌入函數實現多層架構。
[0038]可選地,所述提取模塊還適于:
[0039]獲取當前層架構中的變量和/或常量;
[0040]根據設定規則對所述當前層架構中的變量和/或常量進行計算,得到計算結果;
[0041]對所述計算結果進行鏈接特征分析,以確定其中是否存在鏈接特征。
[0042]可選地,所述提取模塊還適于按如下步驟獲取當前層架構中的變量:
[0043]檢測當前層架構中是否存在var name = value型或其變種;
[0044]若是,則獲取var name = value型或其變種對應的變量;
[0045]若否,則確定當前層架構中不存在變量。
[0046]可選地,所述提取模塊還適于按如下步驟獲取當前層架構中的常量:
[0047]獲取當前層架構中由單引號和/或雙引號限定的所有常量。
[0048]可選地,若常量兩側不緊鄰加號,則該常量本身具備鏈接特征。
[0049]可選地,所述分割模塊還適于:
[0050]根據所述語言規則確定各獨立語句的分割點;
[0051]使用所述語言規則中設定的分隔符在所述分割點對所述腳本語言進行分割。
[0052]可選地,所述分隔符包括分號。
[0053]可選地,所述提取模塊還適于:
[0054]查找網頁各節點的<a>標簽中的href屬性;
[0055]從所述href屬性中提取鏈接。
[0056]按照本發明實施例中的方法,根據腳本代碼的語言規則對腳本語言進行分割,被分割的語句通常是完整的獨立語句,避免隨便分割所導致的語句不完整,不完整的語句會人為造成解析困難,也不會出現語句中的有效部分誤中斷的問題,例如語句中的鏈接被分割開,因此,獨立語句的分割保證了鏈接提取的流暢度,另外,對腳本代碼進行分割,對分割得到的獨立語句進行鏈接特征提取,不會出現鏈接提取疏漏的情況,保證了鏈接提取的完整度。此外,本發明實施例對各獨立語句進行鏈接特征分析,僅僅是將每個獨立語句中包含鏈接特征的代碼按照設定的處理方法抽取出來,相對于現有技術中提供的將各獨立語句中的代碼一一執行后再抽取鏈接的技術方案,本發明實施例提供的方法無須將相應代碼一一執行,占用更少的工作資源,能夠極大縮短鏈接提取的時間,并且,對執行腳本代碼的終端而言,無須執行代碼也避免了因代碼量過大造成的系統負載過重所導致的終端系統崩潰等情況。因此,本發明實施例采用的鏈接提取方法相對于現有技術而言,資源耗費低,可行性尚ο
[0057]上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠更明顯易懂,以下特舉本發明的【具體實施方式】。
[0058]根據下文結合附圖對本發明具體實施例的詳細描述,本領域技術人員將會更加明了本發明的上述以及其他目的、優點和特征。
【附圖說明】
[0059]通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0060]圖1示出了根據本發明一個實施例的網頁腳本動態生成的鏈接的提取方法的處理流程圖;
[0061]圖2示出了根據本發明一個實施例的獲取獨立語句的語句架構中的鏈接特征參數的一種處理流程圖;
[0062]圖3示出了根據本發明一個實施例的Javascript代碼動態生成的鏈接的提取方法的處理流程圖;以及
[0063]圖4示出了根據本發明一個實施例的網頁腳本動態生成的鏈接的提取裝置的結構示意圖。
【具體實施方式】
[0064]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
[0065]為解決上述技術問題,本發明實施例提供了一種網頁腳本動態生成的鏈接的提取方法。圖1示出了根據本發明一個實施例的網頁腳本動態生成的鏈接的提取方法的處理流程圖。參見圖1,該方法至少包括以下步驟S102至步驟S106。
[0066]首先執行步驟S102,獲取網頁中的腳本代碼。
[0067]隨后執行步驟S104,獲取的腳本代碼的語言規則對腳本語言進行分割,將腳本語言分割為至少一個獨立語句。
[0068]腳本代碼在編寫的過程中會按照一定的語言規則進行,本發明實施例需要按照編寫過程中的語言規則將獲取的腳本代碼進行分割,即將網頁后臺程序對應的腳本代碼分割成獨立的語句。根據語言規則對腳本代碼進行分割,被分割后的語句通常是完整的語句,避免隨便分割所導致的語句不完整,不完整的語句會人為造成解析困難,如果其中的鏈接也被分割開,那么會進一步增加鏈接提取的困難度