一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Java爬蟲實戰系列——常用的Java網絡爬蟲庫

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

2023-09-25 03:20未知服務器之家 Java教程

常用的Java網絡爬蟲庫 Java 開發語言是業界使用最廣泛的開發語言之一,在互聯網從業者中具有廣泛的使用者,Java 網絡爬蟲可以幫助 Java 開發人員以快速、簡單但廣泛的方式為各種目的抓取數據。平常我們在討論網絡爬蟲的時候,

常用的Java網絡爬蟲庫

Java 開發語言是業界使用最廣泛的開發語言之一,在互聯網從業者中具有廣泛的使用者,Java 網絡爬蟲可以幫助 Java 開發人員以快速、簡單但廣泛的方式為各種目的抓取數據。平常我們在討論網絡爬蟲的時候,很多人都會想到使用 Python 語言,因為與 Python 相關的網絡爬蟲資料很多,框架也有不少,上手會方便不少。但實際上,Java 網絡爬蟲家族里面也有很多優秀的開源框架或者開源庫供大家使用。下圖是國外某個網站在某年度篩選出來的最受歡迎的 50 個網絡爬蟲開源框架或者開源庫,從這個排名中我們可以看出 Java 網絡爬蟲的應用也是很廣泛的。

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

接下來給大家介紹幾個常用的Java開源網絡爬蟲庫:

1.Heritrix

Heritrix 是一個完全由 Java 開發的、開源網絡爬蟲工具,用戶可以使用它從網絡上面抓取想要的資源。它的主要組件包括 Web Administrative Console、Crawl Order、Crawl Controller、Frontier、Scope、ToeThreads 和 Processor 等。在國內,Heritrix 也有著十分廣泛的使用者,很多開發人員和研究人員都在使用 Heritrix 來采集數據,為進一步的數據分析和數據挖掘工作做準備。Heritrix 的最出色之處在于開發者可以在現有框架的基礎上面對各個組件進行擴展,實現自己需要的抓取邏輯。其整體結構如下圖所示:

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

一個完整的網頁采集任務是從 CrawlOrder 開始的。用戶可以通過多種不同方法創建 一個網頁采集任務,例如復制已經存在的任務、手動創建新的任務等,其中最方便的方法 是利用默認的配置文件 order.xml 來創建一個任務。這個文件中記錄了抓取任務的所有屬 性,每次配置一個新的任務都會產生一個新的 order.xml 文件,Heritrix 中的 CrawlOrder 組件就是用來存儲 order.xml 文件中的內容。

Heritrix 采用了良好的模塊化設計,這些模塊由一個采集控制器類(CrawlerController)來協調調度,CrawlerController 在架構中處于核心地位,其主要工作結構如下圖所示:

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

接下來,給大家稍微介紹一下上圖中提到的各個工作組件。

CrawlController 在執行抓取任務的過程中,作為一個主線程在工作,CrawlController 決定著如何開始抓取工作,并決定著何時開始、何時結束數據采集工作。

Frontier 組件的任務是為線程提供鏈接,它借助一些算法來判斷采集到的 URI 是否會 被處理,同時它也負責記錄日志和報告爬蟲的運行狀態。

Frontier 組件中有一個屬性叫做 scope,它決定了當前抓取范圍的組件。通過配置抓取范圍,可以決定爬蟲是在一個域名下抓取還是在多個域名下抓取。

Heritrix 支持多線程運行,因此 Heritrix 內部維護了標準線程池 ToePool, 這個線程池用于管理爬蟲中的所有線程,每一個線程在處于運行狀態時只處理一個 URL。 采用多線程的技術可以提高爬蟲采集網頁的效率,以便更快速有效地抓取網頁內容。負責處理的線程叫做 ToeThread,ToeThread 從 Frontier 中請求待處理的 URL 后,發送給處理器進行處理。

在 Heritrix 中,處理器被分組為處理器鏈。每個處理器鏈都會對 URL 進行一些處理。當一個處理器處理完一個 URL 后,ToeThread 會將 URL 發送給下一個處理器,直到 URL 被所有處理器處理完畢。處理器可以選擇告訴 URL 跳轉到某個特定的鏈。此外,如果處理器出現致命錯誤,處理將跳至后處理鏈。處理器鏈的工作流程如下圖所示:

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

下面對各個處理鏈進行一下簡單介紹:

(1)Pre-fetch processing chain(預處理鏈)

預處理鏈負責檢查 URL 是否符合抓取規則,是否在抓取范圍內。在預處理鏈中,包含兩個主要的處理器,Preselector 和 PreconditionEnforcer。

PreSelector 用來檢查 URL 是否符合采集任務的需要,以便判斷是 否要繼續處理該 URL,它可以將一部分不滿足需求的 URL 過濾掉。這里主要是 通過正則表達式匹配 URL,如果一個 URL 滿足正則表達式,這個 URL 會進入 下一步的處理;否則就拋棄這個 URL。

PreconditionEnforcer 的作用是確保抓取一個 URL 的所有先 決條件都已經滿足,例如驗證 DNS 是否成功解析、robots 信息是否已經獲取等。

(2)Fetch processing chain(抓取處理鏈)

抓取處理鏈中的處理器中的處理器主要負責從服務器獲取數據,Heritrix 支持的 每個網絡協議都有一個與之對應的處理器,例如 HTTP 協議對應的是 FetchHTTP 處理器。

(3)Extractor processing chain(提取器處理鏈)

在提取器處理鏈中,URL 所引用的文檔內容處于可用的狀態,多個處理器將依次嘗試從中獲取新鏈接。與抓取處理鏈一樣,每個網絡協議都有一個與之對應的提取處理器,例如:ExtractorHTTP、ExtractorFTP 等。

(4)Write/index processing chain (存檔處理鏈)

該鏈負責將數據寫入歸檔文件。Heritrix 自帶的 ARCWriterProcessor 可將數據寫入 ARC 格式。還可以編寫新的處理器來支持其他格式,甚至創建索引。

(5)Post-processing chain(后處理鏈)

URL 應始終通過該處理鏈,即使在該鏈中較早的處理器已決定不抓取該 URL。后處理鏈必須包含以下處理器:

  1. CrawlStateUpdater: 用于更新每一臺可能在采集過程中受到爬蟲影響的主機的信 息,這里的信息包括 robots 信息和 IP 地址。
  2. LinksScoper:主要用于驗證鏈接的范圍。驗證從網頁中抽取出來的 URL 是否在 規定的范圍內,并過濾掉不在該范圍內的 URL。
  3. FrontierScheduler: 將提取到的鏈接放入到 Frontier 中,以便后續調度抓取。

優缺點

優點:開發者可以方便地在現有框架基礎上進行擴展

缺點:單實例的爬蟲,無法在分布式環境下進行工作;應對反爬蟲的機制比較薄弱

實戰篇:

安裝及配置

下載地址: https://github.com/internetarchive/heritrix3

我這里使用的版本是 3.4.0,安裝方法簡單,只要參考官方文檔就可以了。

啟動及運行

啟動的時候,我們可以選擇通過命令行啟動:

$HERITRIX_HOME/bin/heritrix -a admin:123456

也可以選擇將工程源代碼導入到 IDE 后,在 IDE 中啟動。無論選擇哪種啟動方式,都需要注意添加參數-a 來設置用戶名和密碼。

engine listening at port 8443
operator login set per command-line
NOTE: We recommend a longer, stronger password, especially if your web?interface will be internet-accessible.
Heritrix version: 3.4.0-20220727

運行之后看到上面的日志信息就代表啟動成功了。
在瀏覽器中訪問: https://localhost:8443 ,可以進入到管理界面。
Java爬蟲實戰系列——常用的Java網絡爬蟲庫

注意:一定要是 https 鏈接才可以,因為 Heritrix 在啟動 web 容器的時候只支持了 https 協議,而沒有支持 http 協議,因為本地沒有設置證書,所以會出現安全警告,忽略繼續訪問就可以的。

抓取任務創建與配置

啟動成功以后,我們就可以創建和配置抓取任務了。
Java爬蟲實戰系列——常用的Java網絡爬蟲庫

在創建任務的過程中,最重要的就是通過 configuration 選項配置抓取任務。通過一個名為 crawler-beans.cxml 的配置文件控制整個抓取過程。crawler-beans.cxml 采用 Spring 來管理,里面的配置都是 spring bean。下面對 crawler-beans.cxml 文件中涉及到的 spring bean 進行簡單介紹。

bean id class 作用
simpleOverrides和longerOverrides org.springframework.beans.factory.config.PropertyOverrideConfigurer 屬性資源配置器覆蓋應用程序上下文定義中的 bean 屬性值。它將屬性文件中的值推送到 bean 定義中。
metadata org.archive.modules.CrawlMetadata 該bean的主要作用是記錄抓取job的基本屬性,名稱、抓取地址和robots協議規則的遵循。
seeds org.archive.modules.seeds.TextSeedModule 該bean的主要作用是設置種子地址的讀取位置
acceptSurts org.archive.modules.deciderules.surt.SurtPrefixedDecideRule surtprefixeddeciderule是Heritrix3中的一個決策規則(DecideRule),它的作用是允許或禁止基于URL前綴的抓取。
scope org.archive.modules.deciderules.DecideRuleSequence Deciderulesequence的作用是定義和控制抓取流程中的決策規則序列。
candidateScoper org.archive.crawler.prefetch.CandidateScoper Candidatescoper會根據一系列的規則或算法,對網頁進行判斷和打分。例如,它可以根據網頁的URL結構、網頁內容的關鍵詞匹配、鏈接的可用性等因素,來評估網頁的重要性和質量。根據這些評估標準,Candidatescoper會給每個網頁打上一個分數,分數高的網頁將被優先保留。
preparer org.archive.crawler.prefetch.FrontierPreparer FrontierPreparer主要作用是設置URL的抓取深度,隊列,成本控制等。
candidateProcessors org.archive.modules.CandidateChain 主要作用是管理待爬取的URL,CandidateChain引用了candidateScoper來決定相關的URL是否會保留并生成CrawlURI,同時還引用了prepare bean來控制抓取的深度并進行成本控制等。
preselector org.archive.crawler.prefetch.Preselector 預先選擇器,這里會過濾掉一部分URL.如blockByRegex為拒絕正則,allowByRegex為允許正則
preconditions org.archive.crawler.prefetch.PreconditionEnforcer 先決條件設置,如設置IP有效期,爬蟲協議文件robots.txt有效期
fetchDns org.archive.modules.fetcher.FetchDNS FetchDNS主要用于處理域名解析功能
extractorHttp org.archive.modules.extractor.ExtractorHTTP URL提取器
extractorRobotsTxt org.archive.modules.extractor.ExtractorRobotsTxt 查看Robots協議
ExtractorSitemap org.archive.modules.extractor.ExtractorSitemap extractorsitemap是heritrix中的一個用來處理網站地圖(sitemap)的抽取器。
ExtractorHTML org.archive.modules.extractor.ExtractorHTML HTML內容提取器

配置好各個選項之后,我們就可以開始真正執行抓取任務了。因為篇幅的關系這里就不展開描述了,感興趣的讀者可以自行實踐。

2.Norconex?Web Crawler

官方地址: https://opensource.norconex.com/crawlers/web/

Norconex 也是一款非常優秀的開源爬蟲工具,與之相關的中文資料比較少。但是,如果你正在尋找一個開源的企業級爬蟲工具,那你一定不能錯過它。作者認為 Norconex Web Crawler 有兩個功能最值得關注:

  1. 支持多種類型的 HTML 文檔下載器。當我們要采集網頁中的特定信息時,我們首先要能夠下載網頁的內容,Norconex 提供了 GenericHttpFetcher 來滿足大部分場景下的需求,但是在某些情況下,可能需要更專業的方式來獲取網絡資源。例如:通過 Javascript 異步加載的網頁內容,則通過 WebDriverHttpFetcher 來獲取網頁內容更加合理。當然,你也可以開發自定義的 HTML 文檔下載器。
  2. 提供了 HTTP 請求頭和 HTTP 響應頭監聽器和修改器。Norconex 基于 BrowserMobProxy 實現了 HTTP 請求頭和 HTTP 響應頭監聽器和修改器(HttpSniffer)。HttpSniffer 使得對 HttpFetcher 請求和響應內容的監控更加方便,也可以使 HTTP 的請求更加規范化,而且可以多一種方式獲取到 web 服務響應的內容。
    接下來,我們重點介紹一下 BrowserMobProxy(簡稱 BMP),它是一款由 Java 編寫開源的網絡訪問代理工具,在后面我們自己編寫的 Java 網絡爬蟲中也會用到該工具。通過 BMP,我們可以修改、設置和捕獲到網絡的請求和響應,BMP 甚至可以將網絡請求的所有細節記錄到 HAR 文件中。Har 是一種用于導出 HTTP 跟蹤信息的開放格式,稱為 HTTP 存檔 (HAR)。數據存儲格式為 JSON 文檔。具體信息可以參見( RFC 4627 )。BMP 有兩種工作模式,嵌入式模式和獨立啟動模式。嵌入式模式是通過 Java 代碼調用使用。嵌入式模式是利用 Java 代碼來啟動代理,并通過 Java 代碼來捕獲修改請求信息和響應信息。另一種是獨立啟動模式,可以通過命令行來啟動,通過 RestAPI 來進行操作。

3. Crawler4j

Crawler4j是用Java編寫的開源項目,它支持多線程方式采集網站信息,并利用正則表達式限制采集對象。Crawler4j具有完整的爬蟲功能框架,小巧靈活并可以獨立運行。因此,易于集成到項目中,或者將第三方業務邏輯嵌入工作流中自定義爬行。其主要工作流程如下所示:

Java爬蟲實戰系列——常用的Java網絡爬蟲庫

Crawler4j最主要的缺點是不支持動態網頁的抓取,但是我們可以基于Crawler4j進行二次開發對WebCrawlerFactory進行擴展使其支持動態網頁內容的抓取。

總結

本章中,我們介紹了幾個目前仍然比較活躍的爬蟲開源框架,Heritrix,Norconex和Crawler4j。在后面的章節里面,我們會參考這些開源的框架和軟件,開發一套屬于我們自己的Java爬蟲軟件。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产欧美亚洲精品第一页青草 | 日产精品卡一卡2卡三卡乱码工厂 | 国产精品1页 | 韩国情事伦理片观看地址 | 无遮无挡免费视频 | 成人嗯啊视频在线观看 | 亚洲精品国产自在现线最新 | 91精品国产高清久久久久久91 | 91国语自产拍在线观看 | 亚洲成av人影院 | 国产美女亚洲精品久久久综合 | 美女口述又粗又大感觉 | 青草娱乐极品免费视频 | 四虎免费永久观看 | 关晓彤被调教出奶水的视频 | 久久精品无码人妻无码AV蜜臀 | 我被黄总征服的全过程 | 99视频全部看免费观 | 女子校生下媚药在线观看 | 国产激情久久久久影院小草 | 亚洲欧美专区精品久久 | 国产成人一区二区三区影院免费 | 国产66| 亚洲是图你懂的 | 美女脱了内裤打开腿让人羞羞软件 | 亚洲久草 | 欧美日韩va | 国产一卡2卡3卡四卡国色天香 | 性xxxx欧美高清| 美国69xxxx59 | 国产成人精品一区二三区 | 欧美色图亚洲 | 亚洲一欧洲中文字幕在线 | 亚洲欧美日韩天堂在线观看 | 亚洲一区二区福利视频 | 亚洲人和日本人hd | 亚洲国产成人综合 | 香蕉eeww99国产精选播放 | 好男人免费高清在线观看2019 | 欧美人shou交在线播放 | 国产久视频 |