網絡爬蟲 又稱網頁蜘蛛、網絡機器人、在 FOAF 社區常稱網頁追逐者。網絡爬蟲 是一種按照必定規則,自動抓取萬維網信息的程序或腳本。另一些不常使用名稱還有螞蟻、自動索引、模擬程序或蠕蟲。php
隨着網絡的迅速發展,萬維網成爲大量信息的載體,如何有效提取並利用這些信息成爲一個巨大挑戰。搜索引擎 (Search Engine),譬如:傳統搜索引擎 AltaVista、Yahoo!、Google、百度、360 搜索、好搜、搜狗、Bing 等做爲輔助人們檢索信息的工具,已成爲用戶訪問萬維網的入口和指南。可是,這些通用搜索引擎也存在必定侷限性。譬如:html
0一、不一樣領域、不一樣背景的用戶每每具備不一樣的檢索目的和需求,通用搜索引擎所返回的結果包含大量用戶不關心網頁;java
0二、通用搜索引擎的目標是儘量大的網絡覆蓋率,有限的搜索引擎服務器資源與無限的網絡數據資源之間的矛盾將進一步加深;git
0三、萬維網數據形式豐富和網絡技術的不斷髮展,圖片、數據庫、音頻、視頻多媒體等不一樣數據大量出現,通用搜索引擎每每對這些信息含量密集且具備必定結構的數據無能爲力,不能很好地發現和獲取;web
0四、通用搜索引擎大多提供基於關鍵字的檢索,難以支持根據語義信息提出的查詢。正則表達式
爲解決上述問題,定向抓取相關網頁資源的聚焦爬蟲應運而生。聚焦爬蟲是一個自動下載網頁的程序,它根據既定的抓取目標,有選擇的訪問萬維網上的網頁與相關連接,獲取所須要的信息。與通用爬蟲 (general purpose web crawler) 不一樣,聚焦爬蟲並不追求大的覆蓋率,而將目標定爲抓取與某一特定主題內容相關的網頁,爲面向主題的用戶查詢準備數據資源。算法
網路爬蟲是搜索引擎的核心,他們的算法和結構上的細節被看成商業機密。當爬蟲的設計發佈時,總會有一些爲了阻止別人複製工做而缺失的細節。人們也開始關注主要用於阻止主要搜索引擎發佈他們的排序算法的 「搜索引擎垃圾郵件」。sql
URL通常化數據庫
爬蟲一般會執行幾種類型的 URL 規範化來避免重複抓取某些資源。URL 通常化也被稱爲 URL 標準化,指的是修正 URL 並使其先後一致的過程。這裏有幾種通常化方法,包括轉化 URL 爲小寫的,去除逗號(如 ‘.’ ‘..’ 等),對非空的路徑,在末尾加反斜槓。網頁爬蟲
爬蟲身份識別
網絡爬蟲經過使用 http 請求的用戶代理 (User Agent) 字段來向網絡服務器代表他們的身份。網絡管理員則經過檢查網絡服務器的日誌,使用用戶代理字段來辨認哪個爬蟲曾經訪問過以及它訪問的頻率。
用戶代理字段可能會包含一個可讓管理員獲取爬蟲更多信息的 URL。郵件抓取器和其餘懷有惡意的網絡爬蟲一般不會留任何的用戶代理字段內容,或者他們也會將他們的身份假裝成瀏覽器或其餘知名爬蟲。
對於網路爬蟲,留下用戶標誌信息十分重要;這樣,網絡管理員在須要的時候就能夠聯繫爬蟲主人。有時,爬蟲可能會陷入爬蟲陷阱或使一個服務器超負荷,這時,爬蟲主人須要使爬蟲中止。對那些有興趣瞭解特定爬蟲訪問時間網絡管理員來說,用戶標識信息是十分重要的。
開源爬蟲
開發語言
|
軟件名稱
|
軟件介紹
|
許可證
|
Java
|
Arachnid | 微型爬蟲框架,含有一個小型 HTML 解析器。 | GPL |
crawlzilla | 安裝簡易,擁有中文分詞功能。 | Apache2 | |
Ex-Crawler | 由守護進程執行,使用數據庫存儲網頁信息。 | GPLv3 | |
Heritrix | 一個互聯網檔案館級的爬蟲,設計的目標是對大型網絡的大部份內容的按期存檔快照,用 java 編寫。嚴格遵守 robots 文件的排除指示和 META robots 標籤。 | LGPL | |
heyDr | 輕量級開源多線程垂直檢索爬蟲框架。 | GPLv3 | |
ItSucks | 提供 swing GUI 操做界面。 | 不詳 | |
jcrawl | 輕量、性能優良,能夠從網頁抓取各類類型的文件。 | Apache | |
JSpider | 在 GPL 許可下發行,高度可配置、可定製、功能強大、容易擴展的網絡爬蟲引擎。 | LGPL | |
Leopdo | 包括全文和分類垂直搜索,以及分詞系統。 | Apache | |
MetaSeeker | 網頁抓取、信息提取、數據抽取工具包,操做簡單。 | 不詳 | |
Playfish | 經過 XML 配置文件實現高度可定製性與可擴展性。 | MIT | |
Spiderman | 靈活、擴展性強,微內核+插件式架構,經過簡單的配置就能夠完成數據抓取,無需編寫一句代碼。 | Apache | |
webmagic | 功能覆蓋整個爬蟲生命週期,使用 Xpath 和正則表達式進行連接和內容的提取。 | Apache | |
Web-Harvest | 運用 XSLT、XQuery、正則表達式等技術來實現對 Text 或 XML 的操做,具備可視化的界面。 | BSD | |
WebSPHINX | (Miller and Bharat, 1998) 由 java 類庫構成,基於文本的搜索引擎。它使用多線程進行網頁檢索,html 解析,擁有一個圖形用戶界面用來設置開始的種子 URL 和抽取下載的數據;WebSPHINX 由兩部分組成:爬蟲工做平臺和 WebSPHINX 類包。 | Apache | |
YaCy | 基於 P2P 網絡的免費分佈式 Web 搜索引擎(在 GPL 許可下發行)。 | GPL | |
Nutch | 用 java 編寫,在 Apache 許可下發行的爬蟲。它能夠用來鏈接 Lucene 的全文檢索套件。 | Apache | |
Agent Kernel | 當一個爬蟲抓取時,用來進行安排,併發和存儲的 java 框架。 | / | |
Dine | 一個多線程的 java 的 http 客戶端。它能夠在 LGPL 許可下進行二次開發。 | LGPL | |
Python
|
QuickRecon | 具備查找子域名名稱、收集電子郵件地址並尋找人際關係等功能。 | GPLv3 |
PyRailgun | 簡潔、輕量、高效的網頁抓取框架。 | MIT | |
Scrapy | 基於 Twisted 的異步處理框架,文檔齊全。 | BSD | |
Ruya | 一個在廣度優先方面表現優秀,基於等級抓取的開放源代碼的網絡爬蟲。在英語和日語頁面的抓取表現良好,它在 GPL 許可下發行,而且徹底用 Python 編寫。按照 robots.txt 有一個延時的單網域延時爬蟲。 | GPL | |
PySipder | PySipder 是一個 Python 爬蟲程序。演示地址:http://demo.pyspider.org/。使用 Python 編寫腳本,分佈式架構,提供強大的 API,支持 Python 2&3、支持 JavaScript 頁面。強大的 WebUI 和腳本編輯器、任務監控和項目管理和結果查看。後端系統支持:MySQL、MongoDB、SQLite、Postgresql。支持任務優先級、重試、按期抓取等。 | ||
C
|
GNU Wget | 一個在 GPL 許可下用 C 語言編寫的命令行式的爬蟲。主要用於網絡服務器和 FTP 服務器的鏡像。 | GPL |
HTTrack | HTTrack 用網絡爬蟲建立網絡站點鏡像,以便離線觀看。它使用 C 語言編寫,在 GPL 許可下發行。 | GPL | |
Methabot | 用 C 語言編寫,高速優化,可以使用命令行方式運行,在 2-clause BSD 許可下發布的網頁檢索器。它的主要的特性是高可配置性,模塊化;它檢索的目標能夠是本地文件系統,HTTP 或者 FTP。 | BSD | |
Pavuk | 在 GPL 許可下發行,使用命令行的 WEB 站點鏡像工具,能夠選擇使用 X11 的圖形界面。與 wget 和 httprack 相比,他有一系列先進特性,如以正則表達式爲基礎的文件過濾規則和文件建立規則。 | GPL | |
C++
|
hispider | 支持多機分佈式下載,支持網站定向下載。 | BSD |
larbin | 高性能的爬蟲軟件,只負責抓取不負責解析。 | GPL | |
ICDL Crawler | 用 C++ 編寫,跨平臺的網絡爬蟲。它僅僅使用空閒 CPU 資源,在 ICDL 標準上抓取整個站點。 | / | |
Methanol | 模塊化、可定製的網頁爬蟲,速度快。 | 不詳 | |
WIRE | 網絡信息檢索環境 (Baeza-Yates 和 Castillo, 2002) 用 C++ 編寫,在 GPL 許可下發行的爬蟲,內置了幾種頁面下載安排的策略,還有一個生成報告和統計資料的模塊,因此,它主要用於網絡特徵的描述。 | GPL | |
C#
|
NWebCrawler | 統計信息、執行過程可視化。 | GPLv2 |
Sinawler | 國內第一個針對微博數據的爬蟲程序,功能強大。 | GPLv3 | |
spidernet | 以遞歸樹爲模型的多線程 web 爬蟲程序,支持以 GBK (gb2312) 和 utf8 編碼的資源,使用 sqlite 存儲數據。 | MIT | |
Web Crawler | 爲 .net 準備的開放源代碼的網絡檢索器。多線程,支持抓取 PDF/DOC/EXCEL 等文檔來源。 | LGPL | |
網絡礦工 | 功能豐富,絕不遜色於商業軟件。 | BSD | |
PHP
|
OpenWebSpider | 開源多線程網絡爬蟲,有許多有趣的功能。 | 不詳 |
PhpDig | 適用於專業化強、層次更深的個性化搜索引擎。 | GPL | |
Snoopy | 具備採集網頁內容、提交表單功能。 | GPL | |
ThinkUp | 採集推特、臉譜等社交網絡數據的社會媒體視角引擎,可進行交互分析並將結果以可視化形式展示。 | GPL | |
微購 | 可採集淘寶、京東、噹噹、等 300 多家電子商務數據。 | GPL | |
ErLang
|
Ebot | 可伸縮的分佈式網頁爬蟲。 | GPLv3 |
Ruby
|
Spidr | 可將一個或多個網站、某個連接徹底抓取到本地。 | MIT |
Perl
|
LWP:RobotUA | (Langheinrich, 2004) 是一個在 Perl5 許可下發行的,能夠優異的完成並行任務的 Perl 類庫構成的機器人。 | Perl5 |
其它
|
DataparkSearch | 一個在 GNU GPL 許可下發布的爬蟲搜索引擎。 | GPL |
Ht://Dig | 在它和索引引擎中包括一個網頁爬蟲。 | / | |
LLarbin | LLarbin 由 Sebastien Ailleret 開發。 | / | |
Webtools4larbin | Webtools4larbin 由 Andreas Beder 開發。 | / | |
WebVac | 斯坦福 WebBase 項目使用的一個爬蟲。 | / | |
Sherlock Holmes | 收集和檢索本地和網絡上的文本類數據(文本文件,網頁),該項目由捷克門戶網站中樞(Czech web portal Centrum)贊助而且主要用於商用。 | / | |
Universal Information Crawler | 快速發展的網絡爬蟲,用於檢索存儲和分析數據。 | / |
網絡爬蟲的組成
在網絡爬蟲系統框架中,主過程由控制器、解析器、資源庫 3 部分組成。控制器的主要工做是負責給多線程中的各個爬蟲線程分配工做任務。解析器的主要工做是下載網頁,進行頁面的處理,主要是將一些 JS 腳本標籤、CSS 代碼內容、空格字符、HTML 標籤等內容處理掉,爬蟲的基本工做由解析器完成。資源庫是用來存放下載的網頁資源,通常採用大型數據庫存儲,如 Oracle 數據庫,並對其創建索引。
0一、控制器
控制器是網絡爬蟲的中央控制器,它主要是負責根據系統傳過來的 URL 連接,分配一線程,而後啓動線程調用爬蟲爬取網頁的過程。
0二、解析器
解析器是負責網絡爬蟲的主要部分,其負責的工做主要有:下載網頁功能,對網頁文本進行處理;譬如:過濾功能、抽取特殊 HTML 標籤的功能、分析數據功能。
0三、資源庫
主要是用來存儲網頁中下載下來的數據記錄的容器,並提供生成索引的目標源。中大型的數據庫產品有:Oracle、Sql Server 等。
其它爬蟲
開發語言
|
軟件名稱
|
做者 | 發佈時間 |
軟件介紹
|
許可證
|
/ | RBSE | Eichmann | 1994 年 | 第一個發佈的爬蟲。它有 2 個基礎程序。第一個是 「spider」,抓取隊列中的內容到一個關係數據庫中,第二個程序是 「mite」,是一個修改後的 www 的 ASCII 瀏覽器,負責從網絡上下載頁面。 | |
/ | Web Crawler | Pinkerton | 1994 年 | 是第一個公開可用的用來創建全文索引的一個子程序,他使用庫 www 來下載頁面;另一個程序使用廣度優先來解析獲取 URL 並對其排序;它還包括一個根據選定文本和查詢類似程度爬行的實時爬蟲。 | |
/ | World Wide Web Worm | McBryan | 1994 年 | 用來爲文件創建包括標題和URL 簡單索引的爬蟲。索引能夠經過 grep 式的 Unix 命令來搜索。 | |
C++、Python | Google Crawler | Brin and Page | 1998 年 | 用了一些細節來描述,可是這些細節僅僅是關於使用 C++ 和 Python 編寫的、一個早期版本的體系結構。由於文本解析就是全文檢索和 URL 抽取的過程,因此爬蟲集成了索引處理。這裏擁有一個 URL 服務器,用來給幾個爬蟲程序發送要抓取的 URL 列表。在解析文本時,新發現的 URL 傳送給 URL 服務器並檢測這個 URL 是否是已經存在,若是不存在的話,該URL 就加入到 URL 服務器中。 | |
Perl | CobWeb | da Silva et al. | 1999 年 | 使用了一箇中央 「調度者」 和一系列的 「分佈式蒐集者」。蒐集者解析下載的頁面並把找到的 URL 發送給調度者,而後調度者反過來分配給蒐集者。調度者使用深度優先策略,而且使用平衡禮貌策略來避免服務器超載。爬蟲是使用 Perl 語言編寫的。 | |
Java | Mercator | Heydon and Najork | 1999 年 | 一個分佈式的,模塊化的使用 java 編寫的網絡爬蟲。它的模塊化源自於使用可互換的 「協議模塊」 和 「處理模塊」。協議模塊負責怎樣獲取網頁(譬如:使用 HTTP),處理模塊負責怎樣處理頁面。標準處理模塊僅僅包括瞭解析頁面和抽取 URL,其餘處理模塊能夠用來檢索文本頁面,或者蒐集網絡數據。 | |
Java | Mercator | Najork and Heydon | 2001 年 | 一個分佈式的,模塊化的使用 java 編寫的網絡爬蟲。它的模塊化源自於使用可互換的 「協議模塊」 和 「處理模塊」。協議模塊負責怎樣獲取網頁(譬如:使用 HTTP),處理模塊負責怎樣處理頁面。標準處理模塊僅僅包括瞭解析頁面和抽取 URL,其餘處理模塊能夠用來檢索文本頁面,或者蒐集網絡數據。 | |
C++ | WebFountain | Edwards et al. | 2001 年 | 一個與 Mercator 相似的分佈式的模塊化的爬蟲,但使用 C++ 編寫。它的特色是一個管理員機器控制一系列的螞蟻機器。通過屢次下載頁面後,頁面的變化率能夠推測出來,這時,一個非線性的方法必須用於求解方程以得到一個最大的新鮮度的訪問策略。做者推薦在早期檢索階段使用這個爬蟲,而後用統一策略檢索,就是全部的頁面都使用相同的頻率訪問。 | |
C++、Python | PolyBot | Shkapenyuk and Suel | 2002 年 | 一個使用 C++ 和 Python 編寫的分佈式網絡爬蟲。它由一個爬蟲管理者,一個或多個下載者,一個或多個 DNS 解析者組成。抽取到的 URL 被添加到硬盤的一個隊列裏面,而後使用批處理的模式處理這些 URL。平衡禮貌方面考慮到了第 二、3 級網域,由於第 3 級網域一般也會保存在同一個網絡服務器上。 | |
Java | WebRACE | Zeinalipour-Yazti and Dikaiakos | 2002 年 | 一個使用 java 實現的,擁有檢索模塊和緩存模塊的爬蟲,它是一個很通用的稱做 eRACE 的系統的一部分。系統從用戶獲得下載頁面請求,爬蟲行爲有點像一個聰明的代理服務器。系統還監視訂閱網頁請求,當網頁發生改變時,它必須使爬蟲下載更新這個頁面而且通知訂閱者。WebRACE 最大的特點是,當大多數的爬蟲都從一組 URL 開始時,WebRACE 可連續接收抓取開始的 URL 地址。 | |
/ | FAST Crawler | Risvik and Michelsen | 2002 年 | 一個分佈式爬蟲,在 Fast Search & Transfer 中使用,關於其體系結構的一個大體的描述能夠在 [citation needed] 找到。 | |
/ | Cho | Cho and Garcia-Molina | 2002 年 | 通常爬蟲體系結構。 | |
/ | Chakrabarti | Chakrabarti | 2003 年 | 通常爬蟲體系結構。 | |
Java | Ubicrawe | Boldi et al. | 2004 年 | 一個使用 java 編寫的分佈式爬蟲。它沒有中央程序。它有一組徹底相同的代理組成,分配功能經過主機先後一致的散列計算進行。這裏沒有重複的頁面,除非爬蟲崩潰了(而後,另一個代理就會接替崩潰的代理從新開始抓取)。爬蟲設計爲高伸縮性和容許失敗的。 | |
/ | Labrador | / | / | 一個工做在開源項目 Terrier Search Engine 上的非開源爬蟲。 | |
/ | eezirCrawler | / | / | 一個非開源的可伸縮的網頁抓取器,在 Teezir 上使用。該程序被設計爲一個完整的能夠處理各類類型網頁的爬蟲,包括各類 JavaScript 和 HTML 文檔。爬蟲既支持主題檢索也支持非主題檢索。 | |
Java | Spinn3r | / | / | 一個經過博客構建反饋信息的爬蟲。 Spinn3r 基於 java,它的大部分的體系結構都是開源的。 | |
C、PHP | HotCrawler | / | / | 一個使用 C 語言和 php 編寫的爬蟲。 | |
/ | ViREL Microformats Crawler | / | / | 搜索公衆信息做爲嵌入到網頁的一小部分。 |