一種網(wǎng)頁抓取方法及裝置的制造方法
【專利摘要】本發(fā)明涉及網(wǎng)絡(luò)信息處理技術(shù)領(lǐng)域,提供了一種網(wǎng)頁抓取方法及裝置,其中,該方法包括:獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取該網(wǎng)頁的時間;確定再次抓取該網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將該網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列;從待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取。通過本發(fā)明解決了現(xiàn)有技術(shù)中開源網(wǎng)絡(luò)爬蟲只能對網(wǎng)頁進(jìn)行單次抓取的情況下,需要定時重新抓取網(wǎng)頁進(jìn)行網(wǎng)頁更新導(dǎo)致的無法自動適應(yīng)網(wǎng)頁更新頻率的問題,從而可以不斷調(diào)整各個網(wǎng)頁的抓取周期,實(shí)現(xiàn)了網(wǎng)頁的及時更新,降低了重抓大量未更新網(wǎng)頁而帶來的成本,提高了搜索引擎的及時性。
【專利說明】
-種網(wǎng)頁抓取方法及裝置
技術(shù)領(lǐng)域
[0001] 本發(fā)明設(shè)及網(wǎng)絡(luò)信息處理技術(shù)領(lǐng)域,具體設(shè)及一種網(wǎng)頁抓取方法及裝置。
【背景技術(shù)】
[0002] 捜索引擎給用戶的日常生活帶來了很多的方便,用戶可W通過捜索引擎輸入比較 關(guān)屯、的關(guān)鍵字,捜索引擎會給用戶返回和運(yùn)些關(guān)鍵字相關(guān)的內(nèi)容。
[0003] 用戶總是希望能夠得到更加準(zhǔn)確、新鮮度更高的內(nèi)容;各個被捜索引擎收錄的網(wǎng) 站也希望捜索引擎能將自己的最新內(nèi)容進(jìn)行索引。網(wǎng)絡(luò)爬蟲(Web Crawler)為捜索引擎提 供待索引的網(wǎng)絡(luò)資源,在捜索引擎中起到了至關(guān)重要的作用。為了能夠更及時的獲取新鮮 度比較高的內(nèi)容,達(dá)到更高的用戶體驗(yàn),同時又能降低優(yōu)化該體驗(yàn)帶來的成本,網(wǎng)絡(luò)爬蟲的 網(wǎng)頁更新策略顯得尤為重要。
[0004] 然而在現(xiàn)有的開源網(wǎng)絡(luò)爬蟲解決方案中,一般只設(shè)及對網(wǎng)頁的單次抓取,對抓取 過的網(wǎng)頁一般不提供更新策略,包括Larbin,Nutch,化ritrix等比較流行的開源網(wǎng)絡(luò)爬蟲, 都只是對網(wǎng)頁進(jìn)行一次抓取,所W在利用開源解決方案進(jìn)行抓取時,如果想進(jìn)行網(wǎng)頁更新, 一般只是采用折中的解決方案:對固定類型網(wǎng)頁,進(jìn)行定時重置、定時重新抓取的策略。運(yùn) 種解決方案雖然解決了網(wǎng)頁的更新問題,但是無法自動適應(yīng)各種站點(diǎn)的網(wǎng)頁更新頻率的變 化,并且在抓取的網(wǎng)站數(shù)量上升到一定級別后,手動維護(hù)的工作量使得運(yùn)種方案名存實(shí)亡。
[0005] 針對相關(guān)技術(shù)中,開源網(wǎng)絡(luò)爬蟲只能對網(wǎng)頁進(jìn)行單次抓取的情況下,需要定時重 新抓取網(wǎng)頁進(jìn)行網(wǎng)頁更新導(dǎo)致的無法自動適應(yīng)網(wǎng)頁更新頻率的問題,還未提出有效的解決 方案。
【發(fā)明內(nèi)容】
[0006] 因此,本發(fā)明要解決的技術(shù)問題在于克服現(xiàn)有技術(shù)中開源網(wǎng)絡(luò)爬蟲只能對網(wǎng)頁進(jìn) 行單次抓取的情況下,需要定時重新抓取網(wǎng)頁進(jìn)行網(wǎng)頁更新導(dǎo)致的無法自動適應(yīng)網(wǎng)頁更新 頻率的問題,從而提供一種網(wǎng)頁抓取方法及裝置。
[0007] 根據(jù)本發(fā)明的一個方面,提供了一種網(wǎng)頁抓取方法,包括:獲取網(wǎng)頁的抓取周期, 計(jì)算得出再次抓取所述網(wǎng)頁的時間;確定所述再次抓取所述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng) 頁,將所述網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列;從所述待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓 取。
[0008] 可選地,獲取網(wǎng)頁的抓取周期包括:獲取第一次抓取到所述網(wǎng)頁距離當(dāng)前時間的 累積時間;獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容變更的次數(shù);通過計(jì)算所述累積時間 與所述次數(shù)的比值得到所述抓取周期。
[0009] 可選地,計(jì)算得出再次抓取所述網(wǎng)頁的時間包括:獲取上一次抓取所述網(wǎng)頁的抓 取時間;將所述抓取時間與所述抓取周期進(jìn)行求和運(yùn)算,得到所述再次抓取所述網(wǎng)頁的時 間。
[0010] 可選地,確定所述再次抓取所述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將所述網(wǎng)頁重 新加入待抓取的網(wǎng)頁隊(duì)列包括;判斷所述再次抓取所述網(wǎng)頁的時間是否早于當(dāng)前時間,在 判斷結(jié)果為是的情況下,將所述再次抓取所述網(wǎng)頁的時間更新為一個超大值,并將所述網(wǎng) 頁重新加入所述待抓取的網(wǎng)頁隊(duì)列。
[0011] 可選地,獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容變更的次數(shù)包括:獲取此次抓 取到所述網(wǎng)頁的第一Sim化sh值和上次抓取到所述網(wǎng)頁的第二Sim化sh值;將所述第一 SimHash值和所述第二SimHash值使用海明距離算法進(jìn)行對比,得到對比結(jié)果;判斷所述對 比結(jié)果是否大于預(yù)定闊值,在判斷結(jié)果為是的情況下,確定所述網(wǎng)頁的內(nèi)容發(fā)生了變更。
[0012] 可選地,獲取所述網(wǎng)頁的SimHash值包括:對所述網(wǎng)頁進(jìn)行分詞處理,得到一個η維 向量的詞數(shù)組;對所述詞數(shù)組進(jìn)行SimHash運(yùn)算得到所述網(wǎng)頁的SimHash值。
[0013] 根據(jù)本發(fā)明的另一個方面,還提供了一種網(wǎng)頁抓取裝置,包括:獲取模塊,用于獲 取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取所述網(wǎng)頁的時間;第一加入模塊,用于確定所述再次 抓取所述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將所述網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列;抓取 模塊,用于從所述待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取。
[0014] 可選地,所述獲取模塊包括:第一獲取單元,用于獲取第一次抓取到所述網(wǎng)頁距離 當(dāng)前時間的累積時間;第二獲取單元,用于獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容變更 的次數(shù);第一計(jì)算單元,用于通過計(jì)算所述累積時間與所述次數(shù)的比值得到所述抓取周期。
[0015] 可選地,所述獲取模塊還包括:第Ξ獲取單元,用于獲取上一次抓取所述網(wǎng)頁的抓 取時間;第二計(jì)算單元,用于將所述抓取時間與所述抓取周期進(jìn)行求和運(yùn)算,得到所述再次 抓取所述網(wǎng)頁的時間。
[0016] 可選地,所述裝置還包括:第二加入模塊,用于判斷所述再次抓取所述網(wǎng)頁的時間 是否早于當(dāng)前時間,在判斷結(jié)果為是的情況下,將所述再次抓取所述網(wǎng)頁的時間更新為一 個超大值,并將所述網(wǎng)頁重新加入所述待抓取的網(wǎng)頁隊(duì)列。
[0017] 可選地,所述第二獲取單元包括:獲取子單元,用于獲取此次抓取到所述網(wǎng)頁的第 一Sim化sh值和上次抓取到所述網(wǎng)頁的第二Sim化sh值;對比子單元,用于將所述第一 SimHash值和所述第二SimHash值使用海明距離算法進(jìn)行對比,得到對比結(jié)果;確定子單元, 用于判斷所述對比結(jié)果是否大于預(yù)定闊值,在判斷結(jié)果為是的情況下,確定所述網(wǎng)頁的內(nèi) 容發(fā)生了變更。
[0018] 可選地,所述獲取子單元還用于對所述網(wǎng)頁進(jìn)行分詞處理,得到一個η維向量的詞 數(shù)組;對所述詞數(shù)組進(jìn)行SimHash運(yùn)算得到所述網(wǎng)頁的SimHash值。
[0019] 通過本發(fā)明,采用獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取該網(wǎng)頁的時間;確定再 次抓取該網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將該網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列;從待抓 取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取,解決了現(xiàn)有技術(shù)中開源網(wǎng)絡(luò)爬蟲只能對網(wǎng)頁進(jìn)行單次 抓取的情況下,需要定時重新抓取網(wǎng)頁進(jìn)行網(wǎng)頁更新導(dǎo)致的無法自動適應(yīng)網(wǎng)頁更新頻率的 問題,從而可W不斷調(diào)整各個網(wǎng)頁的抓取周期,實(shí)現(xiàn)了網(wǎng)頁的及時更新,降低了重抓大量未 更新網(wǎng)頁而帶來的成本,提高了捜索引擎的及時性。
【附圖說明】
[0020] 為了更清楚地說明本發(fā)明【具體實(shí)施方式】或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對具體 實(shí)施方式或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的 附圖是本發(fā)明的一些實(shí)施方式,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前 提下,還可W根據(jù)運(yùn)些附圖獲得其他的附圖。
[0021] 圖1是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁抓取方法的流程圖;
[0022] 圖2是現(xiàn)有技術(shù)中網(wǎng)頁采集流程示意圖;
[0023] 圖3是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后網(wǎng)頁采集流程示意圖 (一);
[0024] 圖4是根據(jù)本發(fā)明實(shí)施例的自動增量更新調(diào)度組件內(nèi)部支撐結(jié)構(gòu)示意圖;
[0025] 圖5是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后網(wǎng)頁采集流程示意圖 (二);
[0026] 圖6是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后定期調(diào)度示意圖;
[0027] 圖7是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁抓取裝置的一個結(jié)構(gòu)框圖;
[0028] 圖8是根據(jù)本發(fā)明實(shí)施例的獲取模塊的一個結(jié)構(gòu)框圖;
[0029] 圖9是根據(jù)本發(fā)明實(shí)施例的獲取模塊的另一個結(jié)構(gòu)框圖;
[0030] 圖10是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁抓取裝置的另一個結(jié)構(gòu)框圖;
[0031] 圖11是根據(jù)本發(fā)明實(shí)施例的第二獲取單元的結(jié)構(gòu)框圖。
【具體實(shí)施方式】
[0032] 下面將結(jié)合附圖對本發(fā)明的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施 例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù) 人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0033] 術(shù)語"第一"、"第二"、"第僅用于描述目的,而不能理解為指示或暗示相對重要 性。
[0034] 實(shí)施例1
[0035] 在本實(shí)施例中提供了一種網(wǎng)頁抓取方法,圖1是根據(jù)本發(fā)明實(shí)施例的網(wǎng)頁抓取方 法的流程圖,如圖1所示,該流程包括如下步驟:
[0036] 步驟S102,獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取上述網(wǎng)頁的時間;
[0037] 步驟S104,確定再次抓取上述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將上述網(wǎng)頁重新 加入待抓取的網(wǎng)頁隊(duì)列;
[0038] 步驟S106,從待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取。
[0039] 通過上述步驟,在抓取網(wǎng)頁的過程中,獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取該 網(wǎng)頁的時間,在計(jì)算得到的時間早于當(dāng)前時間的情況下,將該網(wǎng)頁重新加入到待抓取的網(wǎng) 頁隊(duì)列中,準(zhǔn)備等待再次抓取,相比于現(xiàn)有技術(shù)中,定時將所有網(wǎng)頁重新抓取一遍,上述步 驟解決了現(xiàn)有技術(shù)中開源網(wǎng)絡(luò)爬蟲只能對網(wǎng)頁進(jìn)行單次抓取的情況下,需要定時重新抓取 網(wǎng)頁進(jìn)行網(wǎng)頁更新導(dǎo)致的無法自動適應(yīng)網(wǎng)頁更新頻率的問題,從而可W不斷調(diào)整各個網(wǎng)頁 的抓取周期,實(shí)現(xiàn)了網(wǎng)頁的及時更新,降低了重抓大量未更新網(wǎng)頁而帶來的成本,提高了捜 索引擎的及時性。
[0040] 其中,上述的當(dāng)前時間為預(yù)進(jìn)行網(wǎng)頁抓取的時間。
[0041] 此處按照網(wǎng)頁的周期性重新將網(wǎng)頁加入至待抓取的網(wǎng)頁隊(duì)列中,跟現(xiàn)有技術(shù)中定 時抓取有很大區(qū)別,本可選實(shí)施例中的周期性重新入隊(duì)可W定時進(jìn)行一次查詢,判斷是否 有需要再次入隊(duì)的URL,但不是定時將所有的m?L重新抓取一遍,此定時非彼定時,想要達(dá)到 的目的不一樣。
[0042] 上述步驟S102設(shè)及到獲取網(wǎng)頁的抓取周期,在一個可選實(shí)施例中,獲取第一次抓 取到網(wǎng)頁距離當(dāng)前時間的累積時間,并且獲取網(wǎng)頁在該累積時間內(nèi)發(fā)生內(nèi)容變更的次數(shù), 然后通過計(jì)算該累積時間與該次數(shù)的比值得到網(wǎng)頁的抓取周期。通過該可選實(shí)施例,網(wǎng)頁 的抓取周期越短說明該網(wǎng)頁的內(nèi)容發(fā)生變更的頻率越快,此時需要縮短對該網(wǎng)頁再次抓取 的時間;網(wǎng)頁的抓取周期越長說明該網(wǎng)頁的內(nèi)容發(fā)生變更的頻率越慢,此時需要加長對該 網(wǎng)頁再次抓取的時間。
[0043] 上述步驟S102中還設(shè)及到計(jì)算得出再次抓取該網(wǎng)頁的時間,在一個可選實(shí)施例 中,獲取上一次抓取網(wǎng)頁的抓取時間,將該抓取時間與該抓取周期進(jìn)行求和運(yùn)算,得到上述 再次抓取該網(wǎng)頁的時間。
[0044] 從待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取之后,在一個可選實(shí)施例中,根據(jù)再次 抓取該網(wǎng)頁的時間對網(wǎng)頁進(jìn)行正序排序;判斷再次抓取網(wǎng)頁的時間是否早于當(dāng)前時間,在 判斷結(jié)果為是的情況下,將再次抓取該網(wǎng)頁的時間更新為一個超大值,并將該網(wǎng)頁重新加 入待抓取的網(wǎng)頁隊(duì)列。將再次抓取該網(wǎng)頁的時間更新為一個超大值防止了下個周期再把該 網(wǎng)頁取出。
[0045] 在獲取網(wǎng)頁的抓取周期的過程中,需要獲取該網(wǎng)頁在該累積時間內(nèi)發(fā)生內(nèi)容變更 的次數(shù),需要說明的是,可W通過多種方式獲取網(wǎng)頁在一定時間內(nèi)發(fā)生內(nèi)容變更的次數(shù),下 面對此進(jìn)行舉例說明。在一個可選實(shí)施例中,獲取此次抓取到網(wǎng)頁的第一SimHash值和上次 抓取到該網(wǎng)頁的第二SimHash值,將第一 SimHash值和第二SimHash值使用海明距離算法進(jìn) 行對比,得到對比結(jié)果,判斷該對比結(jié)果是否大于預(yù)定闊值,在判斷結(jié)果為是的情況下,確 定該網(wǎng)頁的內(nèi)容發(fā)生了變更,從而可W在累積時間內(nèi)統(tǒng)計(jì)該頁面發(fā)生內(nèi)容變更的次數(shù)。該 預(yù)定闊值可W根據(jù)實(shí)際情況進(jìn)行調(diào)整,例如該預(yù)定闊值可W取值為5。
[0046] 在設(shè)及到獲取網(wǎng)頁的SimHash值的過程中,在一個可選實(shí)施例中,對網(wǎng)頁進(jìn)行分詞 處理,得到一個η維向量的詞數(shù)組,對該詞數(shù)組進(jìn)行SimHash運(yùn)算得到網(wǎng)頁的SimHash值。
[0047] 下面結(jié)合一種WRedis技術(shù)為依托,基于Sim化sh、海明距離算法的網(wǎng)頁自動增量 更新調(diào)度組件作為具體的可選實(shí)施例進(jìn)行說明。
[0048] 步驟1.網(wǎng)頁參數(shù)存儲設(shè)計(jì),使用Redis對每個抓取到的網(wǎng)頁保存如下幾個參數(shù):
[0049] 參數(shù)t:記錄第一次抓取該網(wǎng)頁的時間距離當(dāng)前時間經(jīng)過的時間;
[0050] 參數(shù)X:記錄該網(wǎng)頁在t時間內(nèi)發(fā)生內(nèi)容變更的次數(shù);
[0051 ] 參數(shù)las t:記錄上次抓取該網(wǎng)頁的時間;
[0052] 參數(shù)next:記錄下次應(yīng)該抓取該網(wǎng)頁的時間;
[0化3] 參數(shù)hash:記錄上次抓取時該網(wǎng)頁的SimHash值
[0054] 步驟2.每次抓取后,對W上參數(shù)進(jìn)行更新:
[0055] 步驟2.1:獲取抓取到的網(wǎng)頁的正文,進(jìn)入步驟2.2;
[0056] 步驟2.2:對該網(wǎng)頁正文進(jìn)行分詞,獲取一個η維向量,作為SimHash算法的輸入,輸 出SimHash值hi,進(jìn)入步驟2.3;
[0057] 步驟2.3:判斷該網(wǎng)頁是否是第一次抓取,如果是,進(jìn)入步驟2.4;如果不是,進(jìn)入步 驟2.5;
[0化引步驟2.4:設(shè)置參數(shù),1 = 0,義=1,1曰31 =當(dāng)前時間(單位自定),]1姑1 =當(dāng)前時間+臨 時值,hash = hl;
[0059] 步驟2.5:設(shè)置參數(shù),使用運(yùn)次算法的SimHash值hi,與上次抓取時生成的SimHash 值hash使用海明距離算法對比,如果超過某個固定閥值,認(rèn)為網(wǎng)頁更新過。如果更新過進(jìn)入 步驟2.6,如果未更新過進(jìn)入步驟2.7;
[0060] 步驟2.6:設(shè)置參數(shù),1 = 1+(當(dāng)前時間-1曰31:),義=義+1,1曰31 =當(dāng)前時間(單位自 定),next = last+t/x,hash = hl;
[0061 ]步驟2.7:設(shè)置參數(shù),1 = 1+(當(dāng)前時間-1曰31:),義=義,1曰31=當(dāng)前時間(單位自定), next = l3st+t/x,h3sh = hl。
[0062] 步驟3.周期性對已經(jīng)抓取過得網(wǎng)頁進(jìn)行再次入隊(duì):
[0063] 對抓取過的網(wǎng)頁根據(jù)next值進(jìn)行正序排序,每次獲取前m條,判斷是否小于或者等 于當(dāng)前時間,如果早于當(dāng)前時間,需要對next更新為一個超大值(防止下個周期再把該URL 取出,更新為超大值不會有影響,抓取后,next還會再賦值為新的下次抓取值),并重新入 隊(duì),進(jìn)行再次抓取,起到增量更新的目的。
[0064] 其中,作為示例而非限定,m可W在1000-10000之內(nèi)。
[0065] 也就是說,每次抓取網(wǎng)頁后都會計(jì)算出一個代表該網(wǎng)頁當(dāng)前狀態(tài)的兩個主要屬 性,next值和SimHash值,next值等于第一次抓取到該網(wǎng)頁到當(dāng)前時間的累積時間,除W該 網(wǎng)頁到當(dāng)前時間的變更次數(shù),再加上上次抓取該網(wǎng)頁的時間。SimHash值會通過分詞組件先 將網(wǎng)頁進(jìn)行中文分詞,分詞后形成詞數(shù)組,作為SimHash算法的輸入,經(jīng)過算法運(yùn)算,每個網(wǎng) 頁會輸出一個hash值作為當(dāng)前狀態(tài)的指紋。記錄運(yùn)兩個值后,就可W對next值進(jìn)行正序排 序,next值小的,就會排到前面,通過定時(或24小時輪詢)的方式每次把排在最前面的一部 分重新入隊(duì)進(jìn)行抓取。再次抓取時,會根據(jù)計(jì)算出的新的化sh指紋與之前的化sh指紋使用 海明距離算法進(jìn)行對比,海明距離算法可W計(jì)算兩個網(wǎng)頁是否相似(兩個simhash對應(yīng)二進(jìn) 審lJ(〇l串)取值不同的數(shù)量稱為運(yùn)兩個simhash的海明距離),換句話說可W計(jì)算同一個網(wǎng)頁 變更的比例,所W當(dāng)變更比例超過某個值時,可W對變更次數(shù)進(jìn)行加一,運(yùn)樣在系統(tǒng)的不斷 運(yùn)行中,next值就會不斷改變,而影響每個網(wǎng)頁的抓取頻率。
[0066] 本發(fā)明可選實(shí)施例的技術(shù)方案可使用Redis,作為ML存儲結(jié)構(gòu)進(jìn)行實(shí)施,Redis中 有豐富的數(shù)據(jù)結(jié)構(gòu)可被利用,并且有持久化功能,降低了數(shù)據(jù)丟失的風(fēng)險。Redis由鍵值對 組成,鍵-〉值(字符串)或者鍵-〉值結(jié)構(gòu)對象化set,Zset,List,Set)。
[0067] List數(shù)據(jù)結(jié)構(gòu)可W充當(dāng)ML隊(duì)列;
[006引Set數(shù)據(jù)結(jié)構(gòu)可W充當(dāng)U化去重集合;
[0069] 化et數(shù)據(jù)結(jié)構(gòu)可W保存網(wǎng)頁的狀態(tài);hset值結(jié)構(gòu)由field、value組成field代表值 結(jié)構(gòu)中的鍵,value代表值;
[0070] Zset數(shù)據(jù)結(jié)構(gòu)是一個有序集合,可W實(shí)現(xiàn)對不同更新頻率的網(wǎng)頁進(jìn)行排序。Zset 值結(jié)構(gòu)由score、value組成score代表分?jǐn)?shù)(排序的依據(jù)),value代表值。
[0071] 1. Redis 鍵值設(shè)計(jì):
[0072] zset 設(shè)計(jì)
[0073]
[0080]圖2是現(xiàn)有技術(shù)中網(wǎng)頁采集流程示意圖,如圖2所示,包括如下步驟:
[0081 ] 步驟S202,U化出隊(duì):從U化隊(duì)列(1 ist)中獲取待抓取U化作為輸入,輸出也為11化;
[0082] 步驟S204,根據(jù)步驟S202中輸出的URL,從互聯(lián)網(wǎng)抓取網(wǎng)頁作為二次輸入,輸出為 抓取到的網(wǎng)絡(luò)資源;
[0083] 步驟S206,網(wǎng)頁解析:根據(jù)步驟S204的輸出,進(jìn)行文檔類型解析,根據(jù)不同的文檔 類型,判斷是否需要進(jìn)行鏈接分析、正文抽取(非文本類型文檔不需要進(jìn)行鏈接分析);
[0084] 步驟S208,正文抽取:根據(jù)步驟S206的輸出,進(jìn)行文檔正文抽取,輸出為文檔正文, 作為網(wǎng)頁存儲;
[0085] 步驟S210,鏈接分析:根據(jù)步驟S206中的輸出結(jié)果,進(jìn)行鏈接分析,輸出鏈接集合;
[0086] 步驟S212,U化去重:根據(jù)步驟S210中的輸出的鏈接集合,進(jìn)行全局TOL去重,非重 復(fù)的將存儲到ML去重集合中,并輸出給下一步進(jìn)行入隊(duì)操作;
[0087] 步驟S212,U化入隊(duì):根據(jù)步驟S212去重后,輸出的U化集合,進(jìn)行入隊(duì)操作,存儲到 U化隊(duì)列中。
[0088] 此后該程序就會形成一個自閉環(huán),不斷的運(yùn)行下去,直到不再有待抓取的資源。
[0089] 圖3是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后網(wǎng)頁采集流程示意圖 (一),如圖3所示,該流程包括如下步驟:
[0090] 加入網(wǎng)頁自動增量更新調(diào)度組件后,會在附圖2中的步驟S208中,引入該組件。
[0091] 步驟S302,正文抽取:根據(jù)上一步的輸出,進(jìn)行文檔正文抽取,輸出為文檔正文,作 為網(wǎng)頁存儲,并同時輸出給增量更新調(diào)度組件;
[0092] 步驟S304,分詞、計(jì)算Sim化sh值、海明距離:對步驟S302中輸出的網(wǎng)頁正文,進(jìn)行 中文分詞,輸出的詞數(shù)組進(jìn)行計(jì)算Sim化sh值,如果不是第一次抓取該網(wǎng)頁,還需比較之前 的SimHash值,進(jìn)行計(jì)算海明距離。經(jīng)過運(yùn)些一系列算法,得出該組件需要保存的該網(wǎng)頁的 狀態(tài)值(t,X,last,hash,next),分別保存在ML狀態(tài)保持字典,與ML排序集合中;
[0093] 步驟S306,定期調(diào)度:定期主動根據(jù)U化排序集合中next值來判斷,將需要重新入 隊(duì)的抓L再次輸出給U化隊(duì)列,(如果需要獲取該鏈接其他的屬性,還需查詢U化狀態(tài)保持字 典);
[0094] 此后該程序就會形成一個自閉環(huán),不斷的運(yùn)行下去,不斷的進(jìn)行增量抓取。
[0095] U化隊(duì)列:見Redis鍵值設(shè)計(jì)、list設(shè)計(jì);IMy去重集合:見Redis鍵值設(shè)計(jì)、set設(shè)計(jì); 抓L排序集合:見Redis鍵值設(shè)計(jì)、zset設(shè)計(jì);U化狀態(tài)保持字典:見Redis鍵值設(shè)計(jì)、hset設(shè) 計(jì)。
[0096] 與現(xiàn)有技術(shù)相比,加入自動增量更新調(diào)度組件后,采集流程增加了保持網(wǎng)頁狀態(tài), 和定期將已經(jīng)過期的網(wǎng)頁,重新加入到TOL隊(duì)列的流程環(huán)節(jié)。該設(shè)計(jì)雖然額外引入了網(wǎng)頁 hash值的計(jì)算過程,但是節(jié)省了大量重復(fù)網(wǎng)頁的抓取計(jì)算,和抓取帶寬;同時通過動態(tài)調(diào)節(jié) 抓取頻率,也減輕了某些不經(jīng)常更新的小站點(diǎn)的訪問壓力。
[0097] 圖4是根據(jù)本發(fā)明實(shí)施例的自動增量更新調(diào)度組件內(nèi)部支撐結(jié)構(gòu)示意圖,通過 Redis提供的存儲服務(wù),圖4展示了該組件內(nèi)部的支撐關(guān)系。根據(jù)整體業(yè)務(wù)流程,程序執(zhí)行過 程中,根據(jù)整體業(yè)務(wù)流程,其他組件為SimHash、海明距離算法組件提供直接或間接的支撐 關(guān)系,分詞器組件為SimHash、海明距離組件提供支撐關(guān)系,它直接調(diào)用該組件進(jìn)行分詞, Redis客戶端組件為Sim化sh、海明距離組件提供支撐關(guān)系,它直接調(diào)用該組件獲取存儲數(shù) 據(jù),Redis客戶端組件為Redis存儲服務(wù)組件提供支撐關(guān)系,它通過遠(yuǎn)程接口獲取存儲數(shù)據(jù), 間接支撐SimHash、海明距離組件。
[0098] 圖5是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后網(wǎng)頁采集流程示意圖 (二),如圖5所示,該流程包括如下步驟:
[0099] 步驟S502,U化出隊(duì)。從U化隊(duì)列(1 ist)中獲取待抓取U化作為輸入,輸出也為11化;
[0100] 步驟S504,抓取網(wǎng)頁。根據(jù)步驟S502輸出的URL,從互聯(lián)網(wǎng)抓取網(wǎng)頁作為二次輸入, 輸出為抓取到的網(wǎng)絡(luò)資源;
[0101] 步驟S506,網(wǎng)頁解析。根據(jù)步驟S504進(jìn)行文檔類型解析,根據(jù)不同的文檔類型,判 斷是否進(jìn)行鏈接分析、正文提取(非文本類型文檔不需要進(jìn)行鏈接分析),在需要進(jìn)行鏈接 分析時,執(zhí)行步驟S508,在需要正文提取時,執(zhí)行步驟S514;
[0102] 步驟S508,鏈接分析。根據(jù)步驟S506中的輸出結(jié)果進(jìn)行鏈接分析,輸出鏈接集合;
[0103] 步驟S510,U化去重。根據(jù)步驟S508中的輸出的鏈接集合,進(jìn)行全局U化去重,非重 復(fù)的將存儲到ML去重集合中,并輸出給下一步進(jìn)行入隊(duì)操作;
[0104] 步驟S512,U化入隊(duì)。根據(jù)步驟S510去重后,輸出的U化集合,進(jìn)行入隊(duì)操作,存儲到 U化隊(duì)列中;
[0105] 步驟S514,正文提取。根據(jù)步驟S506的輸出結(jié)果進(jìn)行文檔提取,輸出為文檔正文, 作為網(wǎng)頁進(jìn)行存儲。
[0106] 此后該程序就會形成一個自閉環(huán),不斷的運(yùn)行下去,直到不再有待抓取的資源。
[0107] 圖6是根據(jù)本發(fā)明實(shí)施例的加入自動增量更新調(diào)度組件后定期調(diào)度示意圖,如圖6 所示,該流程包括如下步驟:
[0108] 步驟S602,網(wǎng)頁next值正序排列;
[0109] 步驟S604,篩選前m條;
[0110] 步驟S606,判斷next值是否早于當(dāng)前時間,在判斷結(jié)果為否的情況下,執(zhí)行步驟 S608,在判斷結(jié)果為是的情況下,結(jié)束執(zhí)行;
[0111] 步驟S608,將網(wǎng)頁重新加入隊(duì)列;
[0112] 步驟S610,將next值置為最大值。
[0113] 圖5和圖6分別為自動增量更新調(diào)度組件的兩個不同流程環(huán)節(jié),分為兩個部口,狀 態(tài)保持部分和定期調(diào)度部分。
[0114] 實(shí)施例2
[0115] 在本實(shí)施例中還提供了一種網(wǎng)頁抓取裝置,該裝置用于實(shí)現(xiàn)上述實(shí)施例及優(yōu)選實(shí) 施方式,已經(jīng)進(jìn)行過說明的不再寶述。如W下所使用的,術(shù)語"模塊"可W實(shí)現(xiàn)預(yù)定功能的軟 件和/或硬件的組合。盡管W下實(shí)施例所描述的裝置較佳地W軟件來實(shí)現(xiàn),但是硬件,或者 軟件和硬件的組合的實(shí)現(xiàn)也是可能并被構(gòu)想的。
[0116] 如圖7所示,該裝置包括:獲取模塊72,用于獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓 取該網(wǎng)頁的時間;第一加入模塊74,用于確定再次抓取該網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁, 將該網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列;抓取模塊76,用于從待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行 網(wǎng)頁抓取。
[0117] 如圖8所示,獲取模塊72包括:第一獲取單元722,用于獲取第一次抓取到該網(wǎng)頁距 離當(dāng)前時間的累積時間;第二獲取單元724,用于獲取該網(wǎng)頁在該累積時間內(nèi)發(fā)生內(nèi)容變更 的次數(shù);第一計(jì)算單元726,用于通過計(jì)算該累積時間與該次數(shù)的比值得到該抓取周期。
[0118] 如圖9所示,獲取模塊72還包括:第Ξ獲取單元728,用于獲取上一次抓取該網(wǎng)頁的 抓取時間;第二計(jì)算單元730,用于將該抓取時間與該抓取周期進(jìn)行求和運(yùn)算,得到再次抓 取該網(wǎng)頁的時間。
[0119] 如圖10所示,該裝置還包括:第二加入模塊104,用于判斷再次抓取該網(wǎng)頁的時間 是否早于當(dāng)前時間,在判斷結(jié)果為是的情況下,將再次抓取該網(wǎng)頁的時間更新為一個超大 值,并將該網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列。
[0120] 如圖11所示,第二獲取單元724包括:獲取子單元7242,用于獲取此次抓取到該網(wǎng) 頁的第一 SimHash值和上次抓取到該網(wǎng)頁的第二SimHash值;對比子單元7244,用于將該第 一SimHash值和該第二SimHash值使用海明距離算法進(jìn)行對比,得到對比結(jié)果;確定子單元 7246,用于判斷該對比結(jié)果是否大于預(yù)定闊值,在判斷結(jié)果為是的情況下,確定該網(wǎng)頁的內(nèi) 容發(fā)生了變更。
[0121] 可選地,獲取子單元7242還用于對該網(wǎng)頁進(jìn)行分詞處理,得到一個η維向量的詞數(shù) 組;對該詞數(shù)組進(jìn)行SimHash運(yùn)算得到該網(wǎng)頁的SimHash值。
[0122] 綜上所述,通過本發(fā)明的技術(shù)方案的持續(xù)運(yùn)行中,會通過時間的積累不斷調(diào)整各 個網(wǎng)頁的更新周期,從而不斷調(diào)整各個網(wǎng)頁的抓取周期,一方面能夠更及時的更新網(wǎng)頁,另 一方面降低了重抓大量未更新網(wǎng)頁而帶來的成本,間接的提高了捜索引擎的及時性。
[0123] 顯然,上述實(shí)施例僅僅是為清楚地說明所作的舉例,而并非對實(shí)施方式的限定。對 于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可W做出其它不同形式的變化或 變動。運(yùn)里無需也無法對所有的實(shí)施方式予W窮舉。而由此所引伸出的顯而易見的變化或 變動仍處于本發(fā)明創(chuàng)造的保護(hù)范圍之中。
【主權(quán)項(xiàng)】
1. 一種網(wǎng)頁抓取方法,其特征在于,包括: 獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取所述網(wǎng)頁的時間; 確定所述再次抓取所述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將所述網(wǎng)頁重新加入待抓取 的網(wǎng)頁隊(duì)列; 從所述待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取。2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,獲取網(wǎng)頁的抓取周期包括: 獲取第一次抓取到所述網(wǎng)頁距離當(dāng)前時間的累積時間; 獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容變更的次數(shù); 通過計(jì)算所述累積時間與所述次數(shù)的比值得到所述抓取周期。3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,計(jì)算得出再次抓取所述網(wǎng)頁的時間包括: 獲取上一次抓取所述網(wǎng)頁的抓取時間; 將所述抓取時間與所述抓取周期進(jìn)行求和運(yùn)算,得到所述再次抓取所述網(wǎng)頁的時間。4. 根據(jù)權(quán)利要求1所述的方法,其特征在于,從所述待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁 抓取之后包括; 判斷所述再次抓取所述網(wǎng)頁的時間是否早于當(dāng)前時間,在判斷結(jié)果為是的情況下,將 所述再次抓取所述網(wǎng)頁的時間更新為一個超大值,并將所述網(wǎng)頁重新加入所述待抓取的網(wǎng) 頁隊(duì)列。5. 根據(jù)權(quán)利要求2所述的方法,其特征在于,獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容 變更的次數(shù)包括: 獲取此次抓取到所述網(wǎng)頁的第一 SimHash值和上次抓取到所述網(wǎng)頁的第二SimHash值; 將所述第一SimHash值和所述第二SimHash值使用海明距離算法進(jìn)行對比,得到對比結(jié) 果; 判斷所述對比結(jié)果是否大于預(yù)定閾值,在判斷結(jié)果為是的情況下,確定所述網(wǎng)頁的內(nèi) 容發(fā)生了變更。6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,獲取所述網(wǎng)頁的SimHash值包括: 對所述網(wǎng)頁進(jìn)行分詞處理,得到一個η維向量的詞數(shù)組; 對所述詞數(shù)組進(jìn)行SimHash運(yùn)算得到所述網(wǎng)頁的SimHash值。7. -種網(wǎng)頁抓取裝置,其特征在于,包括: 獲取模塊,用于獲取網(wǎng)頁的抓取周期,計(jì)算得出再次抓取所述網(wǎng)頁的時間; 第一加入模塊,用于確定所述再次抓取所述網(wǎng)頁的時間早于當(dāng)前時間的網(wǎng)頁,將所述 網(wǎng)頁重新加入待抓取的網(wǎng)頁隊(duì)列; 抓取模塊,用于從所述待抓取的網(wǎng)頁隊(duì)列中再次進(jìn)行網(wǎng)頁抓取。8. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述獲取模塊包括: 第一獲取單元,用于獲取第一次抓取到所述網(wǎng)頁距離當(dāng)前時間的累積時間; 第二獲取單元,用于獲取所述網(wǎng)頁在所述累積時間內(nèi)發(fā)生內(nèi)容變更的次數(shù); 第一計(jì)算單元,用于通過計(jì)算所述累積時間與所述次數(shù)的比值得到所述抓取周期。9. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述獲取模塊還包括: 第三獲取單元,用于獲取上一次抓取所述網(wǎng)頁的抓取時間; 第二計(jì)算單元,用于將所述抓取時間與所述抓取周期進(jìn)行求和運(yùn)算,得到所述再次抓 取所述網(wǎng)頁的時間。10. 根據(jù)權(quán)利要求7所述的裝置,其特征在于,所述裝置還包括: 第二加入模塊,用于判斷所述再次抓取所述網(wǎng)頁的時間是否早于當(dāng)前時間,在判斷結(jié) 果為是的情況下,將所述再次抓取所述網(wǎng)頁的時間更新為一個超大值,并將所述網(wǎng)頁重新 加入所述待抓取的網(wǎng)頁隊(duì)列。11. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第二獲取單元包括: 獲取子單元,用于獲取此次抓取到所述網(wǎng)頁的第一 SimHash值和上次抓取到所述網(wǎng)頁 的第二SimHash值; 對比子單元,用于將所述第一 SimHash值和所述第二SimHash值使用海明距離算法進(jìn)行 對比,得到對比結(jié)果; 確定子單元,用于判斷所述對比結(jié)果是否大于預(yù)定閾值,在判斷結(jié)果為是的情況下,確 定所述網(wǎng)頁的內(nèi)容發(fā)生了變更。12. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述獲取子單元還用于對所述網(wǎng)頁進(jìn)行 分詞處理,得到一個η維向量的詞數(shù)組;對所述詞數(shù)組進(jìn)行SimHash運(yùn)算得到所述網(wǎng)頁的 SimHash 值。
【文檔編號】G06F17/30GK105824880SQ201610133041
【公開日】2016年8月3日
【申請日】2016年3月9日
【發(fā)明人】屈武
【申請人】樂視網(wǎng)信息技術(shù)(北京)股份有限公司