中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java爬蟲框架的舉例分析

發布時間:2021-11-22 13:19:16 來源:億速云 閱讀:148 作者:iii 欄目:云計算

本篇內容介紹了“Java爬蟲框架的舉例分析”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一、架構圖

那里搜網絡爬蟲框架主要針對電子商務網站進行數據爬取,分析,存儲,索引。

爬蟲:爬蟲負責爬取,解析,處理電子商務網站的網頁的內容

數據庫:存儲商品信息

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

Task隊列:需要爬取的網頁列表

Visited表:已經爬取過的網頁列表

爬蟲監控平臺:web平臺可以啟動,停止爬蟲,管理爬蟲,task隊列,visited表。

二、爬蟲

1.      流程

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

2)       Workers從TaskQueue中獲取任務

3)       Worker線程調用Fetcher爬取Task中描述的網頁

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

5)       Parser解析出來的數據送交Handler處理,抽取網頁Link和處理網頁內容

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

2.      Scheduler

Scheduler負責啟動爬蟲器,調用TaskMaster初始化TaskQueue,同時創建一個monitor線程,負責控制程序的退出。

何時退出?

當TaskQueue為空,并且Workers中的所有線程都處于空閑狀態。而這種形勢在指定10分鐘內沒有發生任何變化。就認為所有網頁已經全部爬完。程序退出。

3.      Task Master

任務管理器,負責管理任務隊列。任務管理器抽象了任務隊列的實現。

l        在簡單應用中,我們可以使用內存的任務管理器

l        在分布式平臺,有多個爬蟲機器的情況下我們需要集中的任務隊列

在現階段,我們用SQLLite作為任務隊列的實現。可供替代的還有Redis

任務管理器的處理流程:

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

l        任務管理器創建monitor線程,控制整個程序的退出

l        任務管理器調度任務,如果任務隊列是持久化的,負責從任務隊列服務器load任務。需要考慮預取。

l        任務管理器還負責驗證任務的有效性驗證,爬蟲監控平臺可以將任務隊列中的某些任務設為失效?

4.      Workers

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

5.      Fetcher

Fetcher負責直接爬取電子商務網站的網頁。用HTTP Client實現。HTTP core 4以上已經有NIO的功能, 用NIO實現。

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

6.      Parser

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

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

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

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

l        Droids:用的是nekohtml,Tika

l        Tika:tagsoup

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

我們還支持regex,dom結構的html解析器。在使用中我們可以結合使用。

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

7.      Handler

Handler是對Parser解析出來的內容做處理。

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

主動方式:需要解析整個HTML,選取自己需要的內容。對Parser提取的內容進行處理。XML需要解析成DOM結構。方便使用,可以使用Xpath,nodefilter等,但耗內存。

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

URLExtractor負責從網頁中提取符合格式的URL,將URL構建成Task,并提交到Task queue中。

8.      VisitedTableManager

訪問表管理器,管理訪問過的URLs。提取統一接口,抽象底層實現。如果URL被爬取過,就不會被添加到TaskQueue中。

三、        Task隊列

Task隊列存儲了需要被爬取的任務。任務之間是有關聯的。我們可以保存和管理這個任務關系。這個關系也是URL之間的關系。保存下來,有助于后臺形成Web圖,分析數據。

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

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

l          用Redis存儲

四、        Visited表

Visited表存儲了已經被爬的網站。每次爬取都需要構建。

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

l          Mysql 內存表 hash index

l          Redis: Key value,設過期時間

l          Memcached: key value, value為bloomfilter的值

針對目前的數據量,可以采用SQLLite

五、        爬蟲監控管理平臺

l          啟動,停止爬蟲,監控各爬蟲狀態

l          監控,管理task隊列,visited表

l          配置爬蟲

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

“Java爬蟲框架的舉例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安新县| 宜宾县| 通山县| 武山县| 邯郸县| 嵩明县| 崇左市| 开平市| 辉南县| 平乐县| 宿迁市| 芒康县| 黄石市| 静乐县| 新密市| 威宁| 锡林郭勒盟| 嵊州市| 资阳市| 方山县| 华坪县| 丹巴县| 九龙城区| 印江| 巴里| 洪泽县| 常山县| 新巴尔虎左旗| 泸溪县| 如皋市| 博野县| 梁河县| 茶陵县| 石景山区| 新源县| 油尖旺区| 焦作市| 通河县| 平武县| 壶关县| 莱阳市|