亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪(fǎng)問(wèn)板塊 發(fā)新帖
查看: 4421 | 回復(fù): 1
打印 上一主題 下一主題

快速構(gòu)建實(shí)時(shí)抓取集群 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2012-02-16 19:26 |只看該作者 |倒序?yàn)g覽
快速構(gòu)建實(shí)時(shí)抓取集群







本文轉(zhuǎn)載自淘寶搜索技術(shù)博客,描述了實(shí)時(shí)抓取集群的架構(gòu)。其架構(gòu)中使用Redis作為核心的LinkBase存儲(chǔ),包括了使用List結(jié)構(gòu)來(lái)存儲(chǔ)抓取隊(duì)列,使用Hash結(jié)構(gòu)來(lái)存儲(chǔ)鏈接表及使用Sorted Sets結(jié)構(gòu)來(lái)存儲(chǔ)已抓取集合。

注:原文中描述的已抓取集合是使用Set結(jié)構(gòu)來(lái)存儲(chǔ),應(yīng)該是不正確的,NoSQLFan進(jìn)行了修改,如果修改有問(wèn)題,歡迎指正。

定義
首先,我們定義一下定向抓取,定向抓取是一種特定的抓取需求,目標(biāo)站點(diǎn)是已知的,站點(diǎn)的頁(yè)面是已知的。本文的介紹里面,主要是側(cè)重于如何快速構(gòu)建一個(gè)實(shí)時(shí)的抓取系統(tǒng),并不包含通用意義上的比如鏈接分析,站點(diǎn)發(fā)現(xiàn)等等特性。

在本文提到的實(shí)例系統(tǒng)里面,主要用到linux+mysql+Redis+django+scrapy+webkit,其中scrapy+webkit作為抓取端,Redis作為鏈接庫(kù)存儲(chǔ),mysql作為網(wǎng)頁(yè)信息存儲(chǔ),django作為爬蟲(chóng)管理界面,快速實(shí)現(xiàn)分布式抓取系統(tǒng)的原型。

名詞解析
•1. 抓取環(huán):抓取環(huán)指的是spider在存儲(chǔ)中獲取url,從互聯(lián)網(wǎng)上下載網(wǎng)頁(yè),然后將網(wǎng)頁(yè)存儲(chǔ)到數(shù)據(jù)庫(kù)里面,最后在從存儲(chǔ)里面獲取下一個(gè)URL的一個(gè)流程。
•2. Linkbase:鏈接庫(kù)的存儲(chǔ)模塊,包含一般的鏈接信息;是抓取系統(tǒng)的核心,使用Redis存儲(chǔ)。
•3. XPATH:一門(mén)在 XML 文檔中查找信息的語(yǔ)言,XPath 可用來(lái)在 XML 文檔中對(duì)元素和屬性進(jìn)行遍歷, 是 W3C XSLT 標(biāo)準(zhǔn)的主要元素。使用XPATH以及相關(guān)工具lib進(jìn)行鏈接抽取和信息抽取。
•4. XPathOnClick:一個(gè)chrome的插件,支持點(diǎn)擊頁(yè)面元素,獲取XPATH路徑,用于編輯配置模板。
•5. Redis:一個(gè)開(kāi)源的KV的內(nèi)存數(shù)據(jù)庫(kù),具備很好的數(shù)據(jù)結(jié)構(gòu)的特征和很高的存取性能。用于存儲(chǔ)linkbase信息。
•6. Django:爬蟲(chóng)管理工具,用于模板配置,系統(tǒng)監(jiān)控反饋。Django在這里主要是用來(lái)管理一個(gè)數(shù)據(jù)庫(kù),使用Admin功能。
•7. Pagebase:頁(yè)面庫(kù),主要是存儲(chǔ)網(wǎng)頁(yè)抓取的結(jié)果,以及頁(yè)面抽取的結(jié)果,和dump交互,使用mysql實(shí)現(xiàn)。
•8. Scrapy:一個(gè)開(kāi)源的基于twisted框架的python的單機(jī)爬蟲(chóng),該爬蟲(chóng)實(shí)際上包含大多數(shù)網(wǎng)頁(yè)抓取的工具包,用于爬蟲(chóng)下載端以及抽取端。
•9. 列表頁(yè):指的商品頁(yè)面之外的所有頁(yè)面。
•10. 詳情頁(yè):比如商品B2C的抓取中,特指商品頁(yè)面,比如這里。
系統(tǒng)架構(gòu)
存儲(chǔ):Redis+mysql
鏈接庫(kù)(linkbase)是抓取系統(tǒng)的核心,基于性能和效率的考慮,本文采用基于內(nèi)存的Redis和磁盤(pán)的mysql為主,對(duì)于linkbase主要是存儲(chǔ)抓取必須的鏈接信息,比如url,anchor,等等;對(duì)于mysql,則是存放抓取的網(wǎng)頁(yè),便于后續(xù)的抽取和處理。

a. PageBase:使用Mysql分庫(kù)分表,存放網(wǎng)頁(yè),如下圖:



b. Linkbase 使用Redis集群,存儲(chǔ)linkbase信息。



幾個(gè)基本的數(shù)據(jù)結(jié)構(gòu)

1.抓取隊(duì)列 (candidate list)

分為待抓取的url隊(duì)列和更新的url隊(duì)列;隊(duì)列存放urlhash,使用Redis的list數(shù)據(jù)結(jié)構(gòu),對(duì)于新提取的url,push到對(duì)應(yīng)的列表里面,對(duì)于spider抓取模塊,從list pop得到。對(duì)于一個(gè)站點(diǎn)而言,抓取隊(duì)列有兩種類(lèi)型:列表頁(yè)抓取隊(duì)列和詳情頁(yè)抓取隊(duì)列。

2.鏈接庫(kù) (linkbase)

鏈接庫(kù)實(shí)際上是存儲(chǔ)鏈接信息的DB;Key是urlhash,Value是linkinfo,包含url,purl,anchor,xpath…;在Redis使用hash存儲(chǔ),直接存放在Redis的里面。KV鏈接庫(kù),不區(qū)分頁(yè)面類(lèi)型。

3.已抓取集合(crawled_set)

已抓取集合指的是當(dāng)前已經(jīng)下載的頁(yè)面的urlhash,存放已經(jīng)抓取的網(wǎng)頁(yè),使用Redis的sorted sets實(shí)現(xiàn),sorted sets的key是urlhash,score是時(shí)間戳,已抓取集合主要是用來(lái)記錄哪一些頁(yè)面已經(jīng)抓取和抓取的時(shí)間,用于后續(xù)的更新頁(yè)面調(diào)度以及抓取信息的統(tǒng)計(jì)。同抓取隊(duì)列一樣,每一個(gè)站點(diǎn)有兩種類(lèi)型的已抓取集合,詳情頁(yè)和列表頁(yè)

調(diào)度模塊
調(diào)度模塊是抓取系統(tǒng)的關(guān)鍵,調(diào)度系統(tǒng)的好壞決定了抓取系統(tǒng)的效率;這塊是主要是在Redis linkbase之上的數(shù)據(jù)結(jié)構(gòu),主要有抓取隊(duì)列、抓取集合、抓取優(yōu)先級(jí)等等數(shù)據(jù)結(jié)構(gòu)組成;對(duì)于一個(gè)抓取循環(huán)來(lái)說(shuō):獲取URL,提交到抓取模塊的待抓取隊(duì)列,啟動(dòng)抓取,抓取完成之后對(duì)新鏈接進(jìn)行抽取,最后進(jìn)入等待抓取的隊(duì)列里面。

調(diào)度系統(tǒng)的基本配置:

a) 頻率(間隔多少秒)

b) 各個(gè)抓取列表的選取比例:get_detail,mod_detail,get_list,mod_list

鏈接抽。撼槿№(yè)面的鏈接,進(jìn)行除重,對(duì)于新的鏈接,插入到待抓取列表里。

內(nèi)容抽。喊凑漳K的配置XPATH,抽取頁(yè)面信息,并寫(xiě)入到pagebase中。

離線(xiàn)調(diào)度:按照更新的比例,從crawled_set里面,定期選取url進(jìn)入Mod隊(duì)列里面進(jìn)行刷新。

抓取模塊
抓取模塊是抓取的必要條件,抓取模塊來(lái)說(shuō),重要的是應(yīng)付互聯(lián)網(wǎng)上各式的問(wèn)題,以及如何實(shí)現(xiàn)對(duì)對(duì)方站點(diǎn)的ip平衡,當(dāng)然,這塊是和調(diào)度系統(tǒng)的緊密結(jié)合的,對(duì)于抓取模塊而言,本文主要使用scrapy工具包里面的下載模塊。

首先,抓取模塊從linkbase獲取對(duì)應(yīng)站點(diǎn)的抓取url,進(jìn)行頁(yè)面下載,然后將頁(yè)面信息寫(xiě)回到pipeline中,并完成鏈接抽取和頁(yè)面抽取,同時(shí)調(diào)用調(diào)度模塊,插入到linkbase和pagebase中。

下載端設(shè)計(jì):

IP:每臺(tái)機(jī)器需要配置多個(gè)物理公網(wǎng)IP,下載的時(shí)候,隨機(jī)選擇一個(gè)IP下載

抓取頻度調(diào)整:讀取配置文件,按照配置文件的抓取頻率進(jìn)行選取url

配置界面
配置界面主要是對(duì)抓取系統(tǒng)的管理和配置,包括:站點(diǎn)feed、頁(yè)面模塊抽取、報(bào)表系統(tǒng)的反饋等等。

類(lèi)似于通用的抓取架構(gòu),本文提到的抓取系統(tǒng)架構(gòu)如下圖:



一個(gè)完整的抓取數(shù)據(jù)流:

•1:用戶(hù)提供種子URL
•2:種子URL進(jìn)入linkbase中新URL隊(duì)列中
•3:調(diào)度模塊選取url進(jìn)入到抓取模塊的待抓取隊(duì)列中
•4:抓取模塊讀取站點(diǎn)的配置文件,按照?qǐng)?zhí)行的頻率進(jìn)行抓取
•5:抓取的結(jié)果返回到pipeline接口中,并完成連接的抽取
•6:新發(fā)現(xiàn)的連接在linkbase里面進(jìn)行dedup,并push到linkbase的新URL模塊里面
•7:調(diào)度模塊選取url進(jìn)入抓取模塊的待抓取隊(duì)列,goto 4
•8:end
系統(tǒng)擴(kuò)展
本文提到的抓取系統(tǒng),核心是調(diào)度和存儲(chǔ)模塊;其中,抓取,存儲(chǔ),調(diào)度都是通過(guò)數(shù)據(jù)進(jìn)行交互的,因此,模塊之間可以任意平行擴(kuò)展,對(duì)于系統(tǒng)規(guī)模來(lái)說(shuō),只需要平行擴(kuò)展mysql和Redis存儲(chǔ)服務(wù)集群以及抓取集群即可。當(dāng)然,簡(jiǎn)單的擴(kuò)展會(huì)帶來(lái)一些問(wèn)題:比如垃圾列表頁(yè)的泛濫,鏈接庫(kù)的膨脹等等問(wèn)題,這些問(wèn)題后續(xù)在討論吧。

來(lái)源:www.searchtb.com

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2012-02-17 22:35 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專(zhuān)區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP