久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Java爬蟲框架的舉例分析

174次閱讀
沒有評論

共計(jì) 2734 個字符,預(yù)計(jì)需要花費(fèi) 7 分鐘才能閱讀完成。

本篇內(nèi)容介紹了“Java 爬蟲框架的舉例分析”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

一、架構(gòu)圖

那里搜網(wǎng)絡(luò)爬蟲框架主要針對電子商務(wù)網(wǎng)站進(jìn)行數(shù)據(jù)爬取,分析,存儲,索引。

爬蟲:爬蟲負(fù)責(zé)爬取,解析,處理電子商務(wù)網(wǎng)站的網(wǎng)頁的內(nèi)容

數(shù)據(jù)庫:存儲商品信息

索引:商品的全文搜索索引

Task 隊(duì)列:需要爬取的網(wǎng)頁列表

Visited 表:已經(jīng)爬取過的網(wǎng)頁列表

爬蟲監(jiān)控平臺:web 平臺可以啟動,停止爬蟲,管理爬蟲,task 隊(duì)列,visited 表。

二、爬蟲 1.  流程

1) Scheduler 啟動爬蟲器,TaskMaster 初始化 taskQueue

2) Workers 從 TaskQueue 中獲取任務(wù)

3) Worker 線程調(diào)用 Fetcher 爬取 Task 中描述的網(wǎng)頁

4) Worker 線程將爬取到的網(wǎng)頁交給 Parser 解析

5) Parser 解析出來的數(shù)據(jù)送交 Handler 處理,抽取網(wǎng)頁 Link 和處理網(wǎng)頁內(nèi)容

6) VisitedTableManager 判斷從 URLExtractor 抽取出來的鏈接是否已經(jīng)被爬取過,如果沒有提交到 TaskQueue 中

2. Scheduler

Scheduler 負(fù)責(zé)啟動爬蟲器,調(diào)用 TaskMaster 初始化 TaskQueue,同時創(chuàng)建一個 monitor 線程,負(fù)責(zé)控制程序的退出。

何時退出?

當(dāng) TaskQueue 為空,并且 Workers 中的所有線程都處于空閑狀態(tài)。而這種形勢在指定 10 分鐘內(nèi)沒有發(fā)生任何變化。就認(rèn)為所有網(wǎng)頁已經(jīng)全部爬完。程序退出。

3. Task Master

任務(wù)管理器,負(fù)責(zé)管理任務(wù)隊(duì)列。任務(wù)管理器抽象了任務(wù)隊(duì)列的實(shí)現(xiàn)。

l  在簡單應(yīng)用中,我們可以使用內(nèi)存的任務(wù)管理器

l  在分布式平臺,有多個爬蟲機(jī)器的情況下我們需要集中的任務(wù)隊(duì)列

在現(xiàn)階段,我們用 SQLLite 作為任務(wù)隊(duì)列的實(shí)現(xiàn)。可供替代的還有 Redis。

任務(wù)管理器的處理流程:

l  任務(wù)管理器初始化任務(wù)隊(duì)列,任務(wù)隊(duì)列的初始化根據(jù)不同的配置可能不同。增量式的情況下,根據(jù)指定的 URL List 初始化。而全文爬取的情況下只預(yù)先初始化某個或幾個電子商務(wù)網(wǎng)站的首頁。

l  任務(wù)管理器創(chuàng)建 monitor 線程,控制整個程序的退出

l  任務(wù)管理器調(diào)度任務(wù),如果任務(wù)隊(duì)列是持久化的,負(fù)責(zé)從任務(wù)隊(duì)列服務(wù)器 load 任務(wù)。需要考慮預(yù)取。

l  任務(wù)管理器還負(fù)責(zé)驗(yàn)證任務(wù)的有效性驗(yàn)證,爬蟲監(jiān)控平臺可以將任務(wù)隊(duì)列中的某些任務(wù)設(shè)為失效?

4. Workers

Worker 線程池,每個線程都會執(zhí)行整個爬取的流程。可以考慮用多個線程池,分割異步化整個流程。提高線程的利用率。

5. Fetcher

Fetcher 負(fù)責(zé)直接爬取電子商務(wù)網(wǎng)站的網(wǎng)頁。用 HTTP Client 實(shí)現(xiàn)。HTTP core 4 以上已經(jīng)有 NIO 的功能,  用 NIO 實(shí)現(xiàn)。

Fetcher 可以配置需不需要保存 HTML 文件

6. Parser

Parser 解析 Fetcher 獲取的網(wǎng)頁,一般的網(wǎng)頁可能不是完好格式化的(XHTML 是完美格式化的),這樣就不能利用 XML 的類庫處理。我們需要一款比較好的 HTML 解析器,可以修復(fù)這些非完好格式化的網(wǎng)頁。

熟悉的第三方工具有 TagSoup,nekohtml,htmlparser 三款。tagsoup 和 nekohtml 可以將 HTML 用 SAX 事件流處理,節(jié)省了內(nèi)存。

已知的第三方框架又使用了哪款作為他們的解析器呢?

l Nutch:正式支持的有 tagsoup,nekohtml,二者通過配置選擇

l Droids:用的是 nekohtml,Tika

l Tika:tagsoup

據(jù)稱,tagsoup 的可靠性要比 nekohtml 好,nekohtml 的性能比 tagsoup 好。nekohtml 不管是在可靠性還是性能上都比 htmlparser 好。具體結(jié)論我們還需要進(jìn)一步測試。

我們還支持 regex,dom 結(jié)構(gòu)的 html 解析器。在使用中我們可以結(jié)合使用。

進(jìn)一步,我們需要研究文檔比較器,同時需要我們保存爬取過的網(wǎng)站的 HTML. 可以通過語義指紋或者 simhash 來實(shí)現(xiàn)。在處理海量數(shù)據(jù)的時候才需要用上。如果兩個 HTML 被認(rèn)為是相同的,就不會再解析和處理。

7. Handler

Handler 是對 Parser 解析出來的內(nèi)容做處理。

回調(diào)方式(visitor):對于 SAX event 處理,我們需要將 handler 適配成 sax 的 content handler。作為 parser 的回調(diào)方法。不同事件解析出來的內(nèi)容可以存儲在 HandlingContext 中。最后由 Parser 一起返回。

主動方式:需要解析整個 HTML,選取自己需要的內(nèi)容。對 Parser 提取的內(nèi)容進(jìn)行處理。XML 需要解析成 DOM 結(jié)構(gòu)。方便使用,可以使用 Xpath,nodefilter 等,但耗內(nèi)存。

ContentHandler:它還包含組件 ContentFilter。過濾 content。

URLExtractor 負(fù)責(zé)從網(wǎng)頁中提取符合格式的 URL,將 URL 構(gòu)建成 Task,并提交到 Task queue 中。

8. VisitedTableManager

訪問表管理器,管理訪問過的 URLs。提取統(tǒng)一接口,抽象底層實(shí)現(xiàn)。如果 URL 被爬取過,就不會被添加到 TaskQueue 中。

三、 Task 隊(duì)列

Task 隊(duì)列存儲了需要被爬取的任務(wù)。任務(wù)之間是有關(guān)聯(lián)的。我們可以保存和管理這個任務(wù)關(guān)系。這個關(guān)系也是 URL 之間的關(guān)系。保存下來,有助于后臺形成 Web 圖,分析數(shù)據(jù)。

Task 隊(duì)列在分布式爬蟲集群中,需要使用集中的服務(wù)器存放。一些輕量級的數(shù)據(jù)庫或者支持列表的 NoSql 都可以用來存儲。可選方案:

l  用 SQLLite 存儲:需要不停地插入刪除,不知性能如何。

l  用 Redis 存儲

四、 Visited 表

Visited 表存儲了已經(jīng)被爬的網(wǎng)站。每次爬取都需要構(gòu)建。

l SQLLite 存儲:需要動態(tài)創(chuàng)建表,需要不停地查詢,插入,還需要后臺定期地清理,不知性能如何。

l Mysql  內(nèi)存表  hash index

l Redis: Key value,設(shè)過期時間

l Memcached: key value, value 為 bloomfilter 的值

針對目前的數(shù)據(jù)量,可以采用 SQLLite

五、  爬蟲監(jiān)控管理平臺

l  啟動,停止爬蟲,監(jiān)控各爬蟲狀態(tài)

l  監(jiān)控,管理 task 隊(duì)列,visited 表

l  配置爬蟲

l  對爬蟲爬取的數(shù)據(jù)進(jìn)行管理。在并發(fā)情況下,很難保證不重復(fù)爬取相同的商品。在爬取完后,可以通過爬蟲監(jiān)控管理平臺進(jìn)行手動排重。

“Java 爬蟲框架的舉例分析”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-08-25發(fā)表,共計(jì)2734字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 葵青区| 青龙| 鸡西市| 建阳市| 蓝山县| 浮山县| 丰宁| 渝中区| 湖南省| 浙江省| 泸水县| 安溪县| 班戈县| 双牌县| 凤冈县| 屯留县| 定日县| 津南区| 辽阳市| 吴川市| 罗平县| 玉屏| 台东县| 张家口市| 安义县| 卢氏县| 池州市| 海宁市| 开远市| 全州县| 惠安县| 虎林市| 收藏| 定襄县| 江川县| 蚌埠市| 丰原市| 澄迈县| 永新县| 青川县| 容城县|