Python編寫的開源Web爬蟲
1. Scrapy
- 實現語言:Python
- GitHub星標數:28660
- 官方支持鏈接
簡介:
- Scrapy是一種高速的高層Web爬取和Web采集框架,可用於爬取網站頁面,並從頁面中抽取結構化數據。
- Scrapy的用途廣泛,適用於從數據挖掘、監控到自動化測試。
- Scrapy設計上考慮了從網站抽取特定的信息,它支持使用CSS選擇器和XPath表達式,使開發人員可以聚焦於實現數據抽取。
- 對於熟悉Python的開發人員,只需幾分鍾就能建立並運行Scrapy。
- 支持運行在Linux、Mac OS和Windows系統上。
特性:
- 內置支持從HTML和XML抽取數據、使用擴展的CSS選擇器(Selector)和XPath表達式等特性。
- 支持以多種格式(JSON、CSV、XML)生成輸出。
- 基於Twisted構建。
- 穩健的支持,自動檢測編碼方式。
- 快速,功能強大。
– 官方文檔:https://docs.scrapy.org/en/latest/
– 官方網站:https://scrapy.org/
2. Cola
- 實現語言:Python
- GitHub星標數:1274
- 官方支持鏈接
簡介:
- Cola是一種高層分布式爬取框架,實現從網站爬取網頁,並從中抽取結構化數據。
- 它提供了一種實現目標數據獲取的簡單且靈活的方式。
- 用戶只需要編寫其中一部分代碼,就可在本地和分布式環境下運行。
特性:
- 高層分布式爬取框架。
- 簡單且高速。
- 靈活。
– 官方文檔:https://github.com/chineking/cola
– 官方網站:https://pypi.org/project/Cola/
3. Crawley
- 實現語言 Python
- GitHub星標數: 144
- 官方支持鏈接
簡介:
- Crawley是一種Python爬取和采集框架,意在簡化開發人員從Web網頁抽取數據到數據庫等結構化存儲中。
特性:
- 基於Eventlet構建的高速Web爬蟲。
- 支持MySQL、PostgreSQL、Oracle、Sqlite等關系數據庫引擎。
- 支持MongoDB、CouchDB等NoSQL數據庫(最新特性!)。
- 支持導出數據為JSON、XML和CSV格式(最新特性!)。
- 命令行工具。
- 支持開發人員使用自己喜好的工具,例如XPath或Pyquery(一種類似於JQuery的Python軟件庫)等。
- 支持Cookie處理器(Handler)。
– 官方文檔:https://pythonhosted.org/crawley/
– 官方網站:http://project.crawley-cloud.com/
4. MechanicalSoup
- 實現語言: Python
- GitHub星標數: 2803
- 官方支持鏈接
簡介:
- MechanicalSoup是一種設計模擬人類使用Web瀏覽器行為的Python軟件庫,它基於解析軟件庫BeautifulSoup構建。
- 如果開發人員需要從單個站點采集數據,或是不需要大量數據采集,那么使用MechanicalSoup是一種簡單高效的方法。
- MechanicalSoup自動存儲和發送Cookie、跟蹤重定向、支持鏈接跟隨和提交表單。
特性:
- 輕量級。
- 支持Cookie處理器。
– 官方文檔: https://mechanicalsoup.readthedocs.io/en/stable/
– 官方網站:https://mechanicalsoup.readthedocs.io/
5. PySpider
- 實現語言: Python
- GitHub星標數: 11803
- 官方支持鏈接
簡介:
- PySpider是一種Python編寫的強大Web爬蟲。
- 它支持JavaScript網頁,並具有分布式架構。
- PySpider支持將爬取數據存儲在用戶選定的后台數據庫,包括MySQL, MongoDB, Redis, SQLite, Elasticsearch等。
- 支持開發人員使用RabbitMQ、Beanstalk和Redis等作為消息隊列。
特性:
- 提供強大Web界面,具有腳本編輯器、任務監控、項目管理器和結果查看器。
- 支持對重度Ajax網站的爬取。
- 易於實現適用、快速的爬取。
– 官方文檔: http://docs.pyspider.org/
– 官方網站:https://github.com/binux/pyspider
6. Portia
- 實現語言: Python
- GitHub星標數: 6250
- 官方支持鏈接
簡介:
- Portia是由Scrapinghub創建的一種可視化爬取工具,它不需要用戶具有任何程序開發知識。
- 如果用戶並非開發人員,最好直接使用Portia實現Web爬取需求。
- 用戶無需任何安裝就可免費試用Portia,只需要在Scrapinghub注冊一個賬戶,就可使用托管版本。
- 即便用戶沒有編程技能,在Portia中創建爬蟲並抽取Web內容也是非常易於實現的。
- 用戶無需安裝任何程序,因為Portia是運行在Web頁面上的。
- 用戶可以使用Portia的基本點擊工具標注需要爬取的數據,然后Portia就會根據這些標注理解如何爬取類似頁面中的數據。
- 一旦檢測到需要爬取的頁面,Portia會形成一個用戶已創建結構的實例。
特性:
- 通過記錄並回放用戶在頁面上的操作,實現點擊、拖動和等待等動作。
- Portia可以很好地爬取基於Ajax構建的網站(基於Splash),也適用於爬取Backbone、Angular和Ember等重度JavsScript框架。
– 官方文檔:https://portia.readthedocs.io/en/latest/index.html
– 官方網站: https://github.com/scrapinghub/portia
7. Beautifulsoup
- 實現語言: Python
- 官方支持鏈接
簡介:
- Beautiful Soup一種設計用於實現Web爬取等快速數據獲取項目的Python軟件庫。
- 它在設計上處於HTML或XML解析器之上,提供用於迭代、搜索和修改解析樹等功能的Python操作原語。往往能為開發人員節省數小時乃至數天的工作。
特性:
- Beautiful Soup自動將輸入文檔轉換為Unicode編碼,並將輸出文檔轉換為UTF-8編碼。
- Beautiful Soup處於一些廣為采用的Python解析器(例如,lxml和html5lib)之上,支持用戶嘗試使用多種不同的解析策略,並在速度和靈活性上做出權衡。
– 官方文檔:https://www.crummy.com/software/BeautifulSoup/bs4/doc/
– 官方網站: https://www.crummy.com/software/BeautifulSoup/
8. Spidy爬蟲
- 實現語言: Python
- GitHub星標數: 152
- 官方支持鏈接
簡介:
- Spidy是一種從命令行運行的Web爬蟲。易於使用。用戶只需提供Web網頁的URL鏈接,Spidy就可以開始爬取!Spidy無疑是一種整體爬取Web的簡單有效的方式。
- Spidy使用Python請求查詢Web頁面,並使用lxml抽取頁面中的所有鏈接。非常簡單!
特性:
- 錯誤處理。
- 跨平台兼容性。
- 頻繁時間戳日志。
- 可移植性。
- 用戶友好的日志。
- 保存Web頁面。
- 支持文件壓縮。
– 官方文檔:https://github.com/rivermont/spidy
– 官方網站: http://project.crawley-cloud.com/
9. Garb
- 實現語言: Python
- GitHub星標數: 1627
- 官方支持鏈接
簡介:
- Grab是一種用於構建爬蟲的Python框架。
- 使用Grab可構建出各種復雜度的Web爬蟲,從只有五行代碼的腳本,到可處理百萬量級Web頁面的復雜異步爬蟲。
- Grab提供了執行網絡請求、處理接收內容的API。例如,實現與HTML文檔的DOM樹進行交互。
特性:
- 支持HTTP和SOCKS代理,可使用也可不使用認證。
- 自動字符集檢測。
- 強大的API,支持使用XPath查詢從HTML文檔的DOM樹中抽取數據。
- 自動Cookie(或會話)支持。
– 官方文檔:https://grablib.org/en/latest/
– 官方網站: https://github.com/lorien/grab
Java編寫的開源Web爬蟲
10. Apache Nutch
- 實現語言: Java
- GitHub星標數: 1743
- 官方支持鏈接
簡介:
- Apache Nutch是一種高度可擴展、可伸縮的開源Web爬蟲軟件項目。
- 如果要列出最好的開源Web爬蟲列表,Apache Nutch無疑金榜題名。
- 作為一種用於數據挖掘的高度可擴展、可伸縮的開源代碼Web數據抽取軟件項目,Apache Nutch得到了廣泛的使用。
- Nutch支持單機運行,但是在Hadoop集群上運行可最大化地發揮其強大能力。
- 全球范圍內很多數據分析人員和科研人員、應用開發人員和Web文本挖掘工程師都在使用Apache Nutch。
- Apache Nutch是一種Java編寫的跨平台解決方案。
特性:
- 默認情況下,爬取數據和分析數據是獨立的過程。
- 廣泛支持多種文檔格式,包括純文本、HTML/XHTML+XML、XML、PDF、ZIP等。
- 使用XPath和命名空間實現映射。
- 通過Hadoop支持分布式文件系統。
- 鏈接圖形式的數據庫。
- 支持NTLM認證。
– 官方文檔: https://wiki.apache.org/nutch/
– 官方網站: http://nutch.apache.org/
11. Heritrix
- 實現語言: Java
- GitHub星標數: 1236
- 官方支持鏈接
簡介:
- 在使用Java編寫的免費開源Web爬蟲中,Heritrix是其中一種得到廣泛使用的工具。事實上,它是一種可擴展、Web規模、存檔質量(archival-quality)的Web爬取項目。
- Heritrix是一種擴展能力和性能很好的解決方案,支持用戶即刻爬取並歸檔一組網站。此外,它在設計上考慮了robots.txt禁止規則和META機器人標簽。
- Heritrix可運行在Linux/Unix和Windows系統上。
特性:
- HTTP認證。
- NTLM認證。
- 鏈接抽取中的XSL轉換。
- 獨立於搜索引擎。
- 是一種成熟並穩定的平台。
- 高度可配置。
- 支持在任一機器上運行。
– 官方文檔: https://github.com/internetarchive/heritrix3/wiki/Heritrix%203.0%20and%203.1%20User%20Guide
– 官方網站: https://github.com/internetarchive/heritrix3b
12. ACHE爬蟲
- 實現語言: Java
- GitHub星標數: 154
- 官方支持鏈接
簡介:
- ACHE是一種專用於特定用途的Web爬蟲。
- ACHE爬取滿足特定標准的Web頁面。例如,屬於特定領域並包含用戶指定模式的頁面。
- 不同於通用爬蟲,ACHE使用頁面分類器遴選特定領域中的相關和無關頁面。
- 頁面分類器可以是基本的正則表達式(例如,匹配所有包含給定單詞的頁面),也可以基於機器學習的分類模型。ACHE也可以自動學習如何對鏈接做優先處理,實現高效地定位相關內容,避免檢索無關的頁面內容。
特性:
- 對固定網站列表的正常爬取。
- 通過自動鏈接優先處理,發現並爬取新的相關網站。
- 可配置不同類型的頁面分類器(例如,機器學習、正則表達式等)。
- 持續重新爬取站點,實現頁面更新的發現。
- 使用ElasticSearch對爬取頁面做索引。
- 實時搜索爬取頁面的Web接口。
- 用於監控爬蟲的REST API和基於Web的用戶接口。
- 使用TOR代理爬取隱含服務。
– 官方文檔: http://ache.readthedocs.io/en/latest/
– 官方網站: https://github.com/ViDA-NYU/ache
13. Crawler4j
- 實現語言: Java
- GitHub星標數: 3039
- 官方支持鏈接
簡介:
- crawler4j是一種Java編寫的開源Web爬蟲,提供了爬取Web網站的基本接口。
- 開發人員可以使用crawler4j在數分鍾內建立一個多線程Web爬蟲。
– 官方文檔: https://github.com/yasserg/crawler4j
– 官方網站: https://github.com/yasserg/crawler4j
14. Gecco
- 實現語言: Java
- GitHub星標數: 1245
- 官方支持鏈接
簡介:
- Gecco是一種使用Java開發的輕量級Web爬蟲,易於使用。
- Gecco集成了jsoup、httpclient、fastjson、spring、htmlunit、redission等優秀框架。用戶只需要配置一系列jQuery風格選擇器,就能很快地建立一個爬蟲。
- Gecco框架具有優秀的擴展能力。框架基於一些開放式和封閉式設計原則,對改進封閉,對擴展開放。
特性:
- 易於使用,使用jQuery風格選擇器抽取元素。
- 支持頁面中的異步Ajax請求。
- 支持頁面JavaScript變量抽取。
- 使用Redis實現分布式爬取(參見gecco-redis文檔)。
- 支持使用Spring開發業務邏輯(參見gecco-spring文檔)。
- 支持htmlunit擴展(參見gecco-htmlunit文檔)。
- 支持多種擴展機制。
- 支持下載UserAgent的隨機選擇。
- 支持下載代理服務器的隨機選取。
– 官方文檔: https://github.com/xtuhcy/gecco
– 官方網站: https://github.com/xtuhcy/gecco
15. BUbiNG
- 實現語言: Java
- GitHub星標數:24
- 官方支持鏈接
簡介:
- BUbiNG令人驚喜,它可稱為下一代的開源Web爬蟲。BUbiNG是一種Java開發的完全分布式爬蟲(無需中央協調),每秒可爬取數千個網頁,並支持采集大規模數據集。
- BUbiNG的分布式是基於高速協議實現的,因此可以獲得非常高的通量。
- BUbiNG提供對海量數據的大規模爬取。它完全可配置、易於擴展,並可集成垃圾信息檢測。
特性:
- 高度並行。
- 完全分布式。
- 使用JAI4J。JAI4J是一種基於JGroups實現的瘦功能層,實現任務指派。
- (當前)使用剝離網頁的指紋,檢測近似的重復內容。
- 快速。
- 大規模爬取。
– 官方文檔: http://law.di.unimi.it/software/bubing-docs/index.html
– 官方網站: http://law.di.unimi.it/software.php#bubing
16. Narconex
- 實現語言:Java
- 官方支持鏈接
簡介:
- 對於尋求可滿足企業級需求的開源Web爬蟲的用戶而言,Narconex是一種很好的工具。
- Norconex支持用戶爬取任何Web內容。用戶可以獨立運行這種全功能數據采集器,或是將其集成在自己的應用中。
- 支持所有操作系統。可在具有一般容量的單體服務器上爬取數百萬信息。此外,Narconex提供多種內容和元數據操作特性,還可以抽取頁面中特定的圖像。
特性:
- 多線程。
- 支持按各種計划任務,抽取不同時間段的數據。
- 從HTML、Word、PDF等多種文件格式中抽取文本內容。
- 抽取文檔相關的元數據。
- 支持抽取使用用JavaScript渲染的頁面。
- 檢測語言。
- 支持翻譯。
- 可配置爬取速度。
- 可檢測發生修改或已被刪除的文檔。
- 支持使用外部命令分析或操作文檔。
– 官方文檔: http://www.norconex.com/collectors/collector-http/getting-started
– 官方網站: http://www.norconex.com/collectors/collector-http/
17. WebSPHINX
- 實現語言: Java
- 當前尚不提供官方支持。
簡介:
- WebSphinix是一種非常易於使用的可定制Web爬蟲。它設計用於高級Web用戶和Java編程人員,支持他們自動爬取小部分Web。
- WebSphinix數據抽取解決方案也提供了一種全面的Java類庫和交互式軟件開發環境。WebSphinix包括兩部分:爬蟲基准測試(Crawler Workbench),WebSPHINX類庫。
- 爬蟲基准測試提供了很好的用戶圖形接口,支持用戶配置並控制定制的Web爬蟲。
- WebSPHINX類庫為使用Java編寫Web爬蟲提供支持。
- WebSphinix支持運行在Windows、Linux、Mac和Android IOS上。
特性:
- 以圖的方式可視化Web頁面采集。
- 將多個頁面組合為單個文檔,以供查看和打印。
- 支持抽取所有滿足設定模式的文本。
- 支持HTML解析。
- 支持robot.txt禁止標准。
- 通用HTML轉換。
- 多線程Web頁面檢索。
– 官方文檔: https://www.cs.cmu.edu/~rcm/websphinx/doc/index.html
– 官方網站: https://www.cs.cmu.edu/~rcm/websphinx/#about
18. Spiderman
- 實現語言: Java
- GitHub星標數: 2400
- 官方支持鏈接
簡介:
- Spiderman是一種Java開源Web數據抽取工具。它采集特定的Web頁面,並從中抽取有用數據。
- Spiderman主要使用XPath和正則表達式等技術抽取實際數據。
特性:
- 更高的性能。
- 持久化集合狀態。
- 分布式。
- 支持JavaScript。
-
– 官方文檔: https://gitee.com/l-weiwei/spiderman
– 官方網站: https://gitee.com/l-weiwei/spiderman
19. WebCollector :
- 實現語言: Java
- GitHub星標數: 1986
- 官方支持鏈接
簡介:
- WebCollector是一種基於Java的開源Web爬蟲框架。
- 它為實現Web爬取功能提供了一下基本的接口。用戶可以使用它在五分鍾內建立起一個多線程爬蟲。
特性:
- 快速。
– 官方文檔: https://github.com/CrawlScript/WebCollector
– 官方網站: https://github.com/CrawlScript/WebCollector
20. Webmagic
- 實現語言: Java
- GitHub星標數: 6891
- 官方支持鏈接
簡介:
- WebMagic是一種可擴展的爬蟲框架。
- WebMagic涵蓋了爬蟲的整個生命周期,包括下載、URL管理、內容抽取和持久化。
- 可用於簡化一些特定爬蟲的開發。
特性:
- 高度靈活的簡單內核。
- 提供實現HTML抽取的簡單API。
- 使用POJO標注定制爬蟲,無需配置。
- 支持多線程和分布式。
- 易於集成。
– 官方文檔: http://webmagic.io/docs/en/
– 官方網站: https://github.com/code4craft/webmagic
21. StormCrawler
- 實現語言: Java
- GitHub星標數:437
- 官方支持鏈接
簡介:
- StormCrawler是一種基於Apache Storm構架分布式Web爬蟲的開源SDK。
- StormCrawler為開發人員構建爬蟲提供了軟件庫和一系列資源。
- StormCrawler完全適用於以數據流提供需獲取和解析的URL的情況,也非常適用於大規模遞歸性爬取,尤其是需要低延遲的情況。
特性:
- 可擴展。
- 有彈性。
- 低延遲。
- 易於擴展。
- 運行良好且高效。
– 官方文檔: http://stormcrawler.net/docs/api/
– 官方網站: http://stormcrawler.net/
JavaScript編寫的開源Web爬蟲
22. NodeCrawler
- 實現語言: JavaScript
- GitHub星標數: 3999
- 官方支持鏈接
簡介:
- NodeCrawler是一種廣為使用的Web爬蟲,它基於NodeJS實現,具有非常快的爬取速度。
- Nodecrawler非常適用於偏愛使用JavaScript編程或者致力於JavaScript項目的開發人員。其安裝也非常簡單。
- JSDOM和Cheerio(用於HTML解析)實現服務器端渲染。其中,JSDOM更為穩定。
特性:
- 使用 Cheerio(默認)或JSDOM實現服務端DOM和自動jQuery插入。
- 可配置池子規模和重試次數。
- 控制爬取率限制。
- 請求的優先隊列。
- 支持forceUTF8模式,使得爬蟲可以檢測並轉換字符集。
- 與4.x乃至更新版本兼容。
– 官方文檔:https://github.com/bda-research/node-crawler
– 官方網站:http://nodecrawler.org/
23. Simplecrawler
- 實現語言: JavaScript
- GitHub星標數:1764
- 官方支持鏈接
簡介:
- Simplecrawler設計提供基本的、靈活且穩定的網站爬取API。
- Simplecrawler在實現上考慮了針對特大型Web站點的歸檔、分析和搜索。它可爬取上百萬頁面,並毫無問題地向磁盤寫入數十GB數據。
特性:
- 提供了用於自動檢測鏈接資源的一些簡單邏輯,用戶可自行替換和添加。
- 自動請求任何robots.txt禁止規則。
- 具有靈活的隊列系統,可在磁盤上凍結和解凍。
– 官方文檔: https://github.com/simplecrawler/simplecrawler
– 官方網站: https://www.npmjs.com/package/simplecrawler
24. Js-crawler :
- 實現語言: JavaScript
- GitHub星標數: 167
- 官方支持鏈接)
簡介:
- 使用NodeJS實現的Web爬蟲,支持HTTP和HTTPS
– 官方文檔: https://github.com/antivanov/js-crawler
– 官方網站: https://github.com/antivanov/js-crawler
25. Webster
- 實現語言: JavaScript
- GitHub星標數: 201
- 官方支持鏈接
簡介:
- Webster是一種使用NodeJS編寫的可靠Web爬取和采集框架,用於爬取Web站點並從頁面中抽取結構化數據。
- 與其他爬取框架的不同之處在於,Webster可以抓取瀏覽器客戶端的JavaScript和Ajax請求呈現的內容。
– 官方文檔: http://webster.zhuyingda.com/
– 官方網站: https://github.com/zhuyingda/webster
26. Node-osmosis
- 實現語言:JavaScript
- GitHub星標數: 3630
- **官方支持鏈接
簡介:
* 一種使用NodeJS實現的HTML/XML解析器和Web爬蟲。
特性:
- 使用原生libxml的C綁定。
- 干凈的Promise類接口。
- 支持CSS 3.0和XPath 1.0選擇器的混合。
- Sizzle選擇器、Slick選擇器以及更多。
- 不具有像jQuery、cheerio或jsdom那樣的大型依賴。
- 構成深度和復雜的數據結構。
- HTML解析器特性:
- 快速解析;
- 高速搜索;
- 內存占用小。
- HTML DOM特性:
- 加載和搜索ajax內容;
- DOM交互和事件;
- 執行嵌入和遠程腳本;
- 在DOM中執行代碼。
- HTTP請求特性:
- 日志記錄URL,重定向和錯誤;
- Cookie的jar包,以及自定義Cookie/頭部/用戶代理;
- 登錄/表單提交、會話Cookie,基本的認證;
- 單代理、多代理,處理代理失敗情況;
- 限制重試和重定向。
– 官方文檔: https://rchipka.github.io/node-osmosis/global.html
– 官方網站: https://www.npmjs.com/package/osmosis
27. Supercrawler
- 實現語言:JavaScript
- GitHub星標數: 4341
- 官方支持鏈接
簡介:
- Supercrawler是一種使用NodeJS實現的Web爬蟲,在設計上支持高度可配置和易用性。
- 一旦成功爬取一個網頁(可以是圖像、文本文檔或其他任何文件),Supercrawler將會觸發用戶自定義的內容類型(content-type)處理器,處理頁面解析、保存數據以及其它一些用戶定義的功能。
特性:
- 鏈接檢測:Supercrawler會解析所爬取的HTML文檔,識別其中鏈接並添加到隊列中。
- 機器人解析:在爬取前Supercrawler會請求robots.txt並檢查其中的禁止規則。它也可識別站點地圖。
- 站點地圖解析:Supercrawler可以從XML站點地圖文件中讀取鏈接,並將鏈接添加到隊列中。
- 並發限制:Supercrawler可限制在任一時間發出的請求數。
- 速率限制:Supercrawler可添加請求的時延,以免對服務器產生轟炸。
- 指數補償(Exponential backoff)重試:Supercrawler將依此在一小時、兩小時、四小時乃至更多時間后重試請求。要使用該特性,爬取隊列必須使用數據庫或Redis作為后端。
- 主機名均衡:Supercrawler可在不同主機名間平均分割請求量。要使用該特性,爬取隊列必須以Redis為后端。
– 官方文檔: https://github.com/brendonboshell/supercrawler
– 官方網站: https://github.com/brendonboshell/supercrawler
28. Web scraper的Chrome擴展
- 實現語言:JavaScript
- GitHub星標數: 775
- 官方支持鏈接
簡介:
- Web Scraper是一種Chrome瀏覽器擴展,構建用於從Web頁面抽取數據。
- 用戶可以使用該擴展創建計划(站點地圖),定義如何遍歷一個Web網站,以及如何從中抽取數據。
- Web Scraper使用站點地圖相應地遍歷網站,並從中抽取數據。
- 支持以CSV格式導出所抽取的數據。
特性:
- 抽取多個頁面。
- 站點地圖和抽取的數據存儲在瀏覽器的本地存儲,也可存儲在CouchDB中。
- 多種數據類型選取。
- 支持從動態網頁(JavaScript+AJAX)抽取數據。
- 瀏覽抽取的數據。
- 以CSV格式導出抽取的數據。
- 導入、導出站點地圖。
- 只依賴於Chrome瀏覽器。
– 官方文檔: https://www.webscraper.io/documentation
– 官方網站: https://www.webscraper.io
29. Headless Chrome爬蟲
- 實現語言:JavaScript
- GitHub星標數: 3256
- 官方支持鏈接
簡介:
- 使用基本HTML文件請求的爬蟲,通常速度很快。但這樣的爬蟲往往會抽取到空白內容,尤其是在爬取使用AngularJS、React和Vue.js等現代前端框架構建的網站時。
特性:
- 分布式爬取。
- 可配置並發、延遲和重試。
- 支持深度優先搜索和廣度優先搜索算法。
- 支持插拔緩存存儲,例如Redis。
- 支持導出CSV和JSON。
- 在達到最大請求時暫停爬取,並可在任一時刻恢復。
- 自動插入用於抽取的jQuery。
- 保存屏幕截圖,用於證實爬取過程。
- 模擬設備和用戶代理。
- 具有優先隊列,可提高爬取效率。
– 官方文檔: https://github.com/yujiosaka/headless-chrome-crawler/blob/master/docs/API.md
– 官方網站: https://github.com/yujiosaka/headless-chrome-crawler
30. X-ray
- 實現語言:JavaScript
- GitHub星標數: 4464
- 官方支持鏈接
特性:
- 模式靈活:支持字符串、數組、對象以及嵌套對象結構。模式並非綁定於所抽取的頁面結構,支持用戶獲取選定結構中的數據。
- 可組合(Composable):API是完全可組合的,賦予用戶抽取每個頁面的極大靈活性。
- 分頁支持:爬取頁面在Web站點上的所有分頁。X-ray還支持請求延遲和分頁限制,並支持將爬取頁面導入到單個文件中。這樣一旦單個頁面產生錯誤,用戶不會失去所有已爬取的數據。
- 爬蟲支持:從一個頁面開始,輕易跳轉另一個頁面。頁面跳轉是可預測的,按深度優先爬取所有頁面。
- 負責任的爬取:X-ray支持並發、限制、延遲、超時和限制,實現負責任地爬取任何頁面。
- 可插拔驅動:可按用戶需求置換不同的爬蟲。
– 官方文檔: https://github.com/matthewmueller/x-ray
– 官方網站: https://www.npmjs.com/package/x-ray-scraper
C編寫的開源Web爬蟲
31. Httrack
- 實現語言:C
- GitHub星標數: 747
- 官方支持鏈接
簡介:
- HTTracks是一項免費(GPL、Libre/自由軟件)且易於使用的離線瀏覽器功能。
- 支持用戶將Web站點下載到本地目錄,遞歸構建全部目錄,以及獲取HTML、圖像和其它文件到本地計算機。
- HTTrack會維持原站點的相對鏈接結構。用戶可以用瀏覽器打開本地的“鏡像”頁面,並逐個鏈接瀏覽,與在線瀏覽無異。
- HTTrack也支持對已有鏡像站點的更新,以及從中斷點恢復下載。
- HTTrack高度可配置,並提供幫助文檔。
特性:
- 多語言窗口,提供對Linux/UNIX的接口。
- 鏡像單個站點,或是一並鏡像多個站點。
- 支持按文件類型、鏈接位置、結構深度、文件大小過濾,接受或拒絕站點或文件名。
- 支持代理,可最大化速度,並可選認證。
– 官方文檔: http://www.httrack.com/html/index.html
– 官方網站: http://www.httrack.com/
32. GNU Wget
- 實現語言:C
- GitHub星標數: 22
- 官方支持鏈接
簡介:
- GNU Wget是一種免費軟件包,它使用HTTP、HTTPS、FTP、FTPS等廣為使用的互聯網協議檢索文件。
- Wget是一種非交互式命令行工具,易於從腳本、Cron任務、不具有X窗口支持的終端等處調用。
特性:
- 使用REST和RANGE支持從中斷處恢復下載。
- 基於NLS的消息文件,可使用多種語言。
- 可運行於大多數類UNIX操作系統上,也支持Windows.
- 支持HTTP代理。
- 支持HTTP Cookie。
– 官方文檔: https://www.gnu.org/software/wget/manual/
– 官方網站: https://www.gnu.org/software/wget/
C++編寫的開源Web爬蟲
33. gigablast
- 實現語言:C++
- GitHub星標數: 912
- **官方支持鏈接
簡介:
- Gigablast是一種開源的Web和企業搜索引擎,也是一種爬蟲。
- Gigablast是自身維護數十億頁面檢索索引的數家美國搜索引擎之一。
特性:
- 大規模。
- 高性能。
- 實時信息檢索技術。
– 官方文檔: http://www.gigablast.com/api.html
– 官方網站: http://www.gigablast.com/
C#編寫的開源Web爬蟲
34. Arachnode.net
- 實現語言:C#
- GitHub星標數: 9
- 官方支持鏈接
簡介:
- Arachnode.net適用於尋求開源Web爬蟲的C#開發人員。
- Arachnode.net軟件類庫從因特網下載內容、對內容做索引,並對過程做定制。
- 用戶可使用該工具做個人內容聚合,也可用於將下載的內容抽取、采集和解析為多個表單。
- Arachnode.net索引所發現的內容,並存儲在Lucene.NET索引中。
- Arachnode.net非常適用於文本挖掘,也適用於學習高級爬取技術。
特性:
- 可配置規則和行為。
- 集成Lucene.NET。
- 支持SQL Server和全文本索引。
- 支持對.DOC/.PDF/.PPT/.XLS等文件類型的索引。
- 支持將HTML轉化為XML和XHTML。
- 支持全部JavaScript/AJAX功能。
- 支持多線程和節流(Throttling)。
- 行為適當(Respectful)的爬取。
- 分析服務。
– 官方文檔: https://documentation.arachnode.net/index.html
– 官方網站: http://arachnode.net/
35. Abot
- 實現語言:C#
- GitHub星標數: 1392
- 官方支持鏈接
簡介:
- Abot是一種C#實現的開源Web爬蟲,主要側重於速度和靈活性。
- Abot在實現中考慮了底層技術細節,包括多線程、HTTP請求、調度、鏈接解析等。
- 用戶只需注冊事件,就可以處理分頁數據。
- 支持用戶插入自己的核心接口實現,實現對整個爬取過程的完全控制。
特性:
- 高速!
- 易於定制(可插拔架構,支持用戶定義爬取內容和方式)。
- 經過大量的單元測試(高代碼覆蓋率)。
- 非常輕量級(並非過度工程化)。
- 無過程之外的依賴,例如對數據庫、所安裝服務等的依賴。
– 官方文檔: https://github.com/sjdirect/abot
– 官方網站: https://github.com/sjdirect/abot
36. Hawk
- 實現語言:C#
- GitHub星標數: 1875
- 官方支持鏈接
簡介:
- HAWK無需用戶做任何編程,提供圖形可視化數據獲取和清理工具,並以GPL協議開源。
特性:
- 無需編程,即可實現對Web內容的智能分析。
- 所見即所得(WYSIWYG),可視化拉拽,支持對數據轉換和過濾等的快速處理。
- 支持從多種數據庫和文件中導入和導出。
- 任務可保存並可重用。
- 尤其適用於爬取和數據清理,但其功能並不僅局限於此。
– 官方文檔: https://github.com/ferventdesert/Hawk
– 官方網站: https://ferventdesert.github.io/Hawk/
37. SkyScraper
- 實現語言:C#
- GitHub星標數: 39
- 官方支持鏈接
簡介:
- 一種異步Web獲取和爬蟲,使用了async/await和響應式擴展。
– 官方文檔: https://github.com/JonCanning/SkyScraper
– 官方網站: https://github.com/JonCanning/SkyScraper
.NET編寫的Web爬蟲
38. DotnetSpider
- 實現語言:.NET
- GitHub星標數: 1382
- 官方支持鏈接
簡介:
- DotnetSpider是一種使用.NET Standard實現的Web爬取軟件庫,類似於WebMagic和Scrapy。
- 它是一種適用於.NET的輕量級、高效和高速的高層Web爬取和獲取框架。
– 官方文檔: https://github.com/dotnetcore/DotnetSpider/wiki
– 官方網站: https://github.com/dotnetcore/DotnetSpider
PHP編寫的開源Web爬蟲
39. Goutte
- 實現語言:PHP
- GitHub星標數: 6574
- 官方支持鏈接
簡介:
- Goutte是一種PHP實現的屏幕抓取和Web爬取軟件庫。
- Goutte為爬取Web站點和從HTML/XML響應中抽取數據提供了很好的API。
– 官方文檔: https://goutte.readthedocs.io/en/latest/
– 官方網站: https://github.com/FriendsOfPHP/Goutte
40. Dom-crawler
- 實現語言:PHP
- GitHub星標數: 1340
- 官方支持鏈接
簡介:
- DomCrawler組件簡化了對HTML和XML文檔的DOM瀏覽。
– 官方文檔: https://symfony.com/doc/current/components/dom_crawler.html
– 官方網站: https://github.com/symfony/dom-crawler
41. Pspider
- 實現語言:PHP
- GitHub星標數: 249
- 官方支持鏈接
簡介:
- Pspider是最近完全使用PHP實現的一種並行爬取框架,它基於hightman/httpclient組件。
– 官方文檔: https://github.com/hightman/pspider
– 官方網站: https://github.com/hightman/pspider
42. Php-spider
- 實現語言:PHP
- GitHub星標數: 1023
- 官方支持鏈接
簡介:
- 一種可配置、可擴展的Web爬蟲。
特性:
- 可限制爬取深度、隊列大小和最大下載數。
- 支持基於XPath、CSS選擇器或普通(Plain old)PHP添加自定義的URI發現邏輯。
- 提供了一系列有用的URI過濾器,例如域限制等。
- 收集爬取統計信息,用於形成報告。
– 官方文檔: https://github.com/mvdbos/php-spider
– 官方網站: https://github.com/mvdbos/php-spider
43. Spatie / Crawler
- 實現語言:PHP
- GitHub星標數: 740
- **官方支持鏈接
簡介:
- 該軟件包提供了從Web站點爬取鏈接的類。在實現的底層機制上,使用了GuzzleHttp/Promise並發爬取多個URL。
- 該爬蟲支持執行JavaScript,可以爬取使用JavaScript渲染的站點。從實現的底層機制看,該特性使用了Chrome和Puppeteer。
– 官方文檔: https://github.com/spatie/crawler
– 官方網站: https://github.com/spatie/crawler
Ruby實現的開源Web爬蟲
44. Mechanize
- 實現語言:Ruby
- GitHub星標數: 3728
- 官方支持鏈接
簡介:
- Mechanize軟件庫用於實現於Web站點的自動交互。
- Mechanize自動按重定向存儲並發送Cookie。可以根據鏈接提交表單,支持填寫和提交表單域。
- Mechanize也可跟蹤用戶訪問過站點的歷史記錄。
– 官方文檔: http://docs.seattlerb.org/mechanize/
– 官方網站: https://github.com/sparklemotion/mechanize
GO編寫的開源Web爬蟲
45. Colly
- 實現語言:Go
- GitHub星標數: 5439
- 官方支持鏈接
簡介:
- 為Go愛好者提供了一種快速且適用的爬取框架。
- Colly提供了非常清晰的接口,可用於編寫任何類型的爬蟲和數據獲取工具。
- Colly使得用戶可以輕易地從站點抽取結構化數據。這些數據適用於大范圍的應用,例如數據挖掘、數據處理和歸檔。
特性:
- 清晰的API。
- 高速(支持單核每秒處理一千次以上的請求)。
- 按域管理請求延遲和最大並發。
- 自動Cookie和會話管理。
- 同步/異步/並行爬取。
- 支持緩存。
- 對非unicode響應的自動編碼。
- 支持robots.txt禁止規則。
- 分布式爬取。
- 可通過環境變量配置。
- 支持擴展。
– 官方文檔: http://go-colly.org/docs/
– 官方網站: http://go-colly.org/
46. Gopa
- 實現語言:Go
- GitHub星標數: 169
- 官方支持鏈接
特性:
- 輕量級,低資源占用,小於100MB的內存需求。
- 易於部署,無需任何運行時和依賴關系。
- 易於使用,不需要用戶具有任何編程和腳本技能,提供開箱即可用特性。
– 官方文檔: https://github.com/infinitbyte/gopa
– 官方網站: https://github.com/infinitbyte/gopa
47. Pholcus
- 實現語言:Go
- GitHub星標數: 4341
- 官方支持鏈接
簡介:
- Pholcus是一種完全使用Go語言實現的高並發性、重量級爬蟲軟件。
- 它針對因特網數據采集,為只具有基本Go或JavaScript編程基礎的用戶提供了一種只需要關注自定義功能的特性。
- 規則簡單靈活,並發批處理任務,提供豐富的輸出方式,包括MySQL、MongoDB、Kafka、CSV、Exvel等。
- 用戶共享了大量的演示。此外,Pholcus支持兩種水平和垂直爬取模式,支持模擬登陸、暫停任務、取消任務等一系列高級特性。
特性:
- 一種強大的爬取工具。
- 支持三種運行模式:單機、服務器和客戶。
- 提供三種操作接口:Web、GUI和命令行。
– 官方文檔: https://pholcus.gitbooks.io/docs/
– 官方網站: https://github.com/henrylee2cn/pholcus
R編寫的開源Web爬蟲
48. Rvest
- 實現語言:R
- GitHub星標數: 969
- 官方支持鏈接
簡介:
- Rvest為用戶從Web頁面抽取信息提供幫助。它在設計上使用了magrittr軟件包,易於表達通用Web抽取。
– 官方文檔: https://cran.r-project.org/web/packages/rvest/rvest.pdf
– 官方網站: https://github.com/hadley/rvest
Scala編寫的開源Web爬蟲
49. Sparkler
- 實現語言: Scala
- GitHub星標數: 198
- 官方支持鏈接
簡介:
- Web爬蟲是一種機器人程序,它從Web網站采集資源,用於構建搜索引擎、知識庫等應用。
- Sparkler(“Spark-Crawler”的縮寫)是一種新型的Web爬蟲,它通過整合Spark、Kafka、Lucene/Solr、Tika、pf4j等多種Apache項目,使用了分布式計算和信息檢索領域的最新進展。
特性:
- 提供更高的性能,具有更好的容錯。
- 支持復雜和近實時分析。
- 實時輸出數據流。
- 可擴展的插件框架。
- 通用解析器。
– 官方文檔: http://irds.usc.edu/sparkler/dev/development-environment-setup.html#contributing-source
– 官方網站: http://irds.usc.edu/sparkler/
Perl編寫的開源Web爬蟲
50. Web-scraper
- 實現語言:Perl
- GitHub星標數: 91
- 官方支持鏈接
簡介:
- Web Scraper是一種使用HTML、CSS選擇器或XPath表達式的Web采集工具集。
– 官方文檔: https://github.com/miyagawa/web-scraper
– 官方網站: https://github.com/miyagawa/web-scraper
總結
開源Web爬取應用紛繁多樣,在此難以一一枚舉。每種爬取應用分別各具特長,適用於不同用戶的需求。
用戶可根據自己的需求和技術要求選取適用的工具。也許用戶會從上述工具中做出選擇,也許會選擇本文列表之外的工具。在實踐中,用戶只需根據任務的不同做出一個合理的選擇,這完全取決於最終用戶。其中至關重要的是,用戶必須要了解每種工具的獨特優勢,並利用這些優勢服務於用戶自身的業務,或是自身所承擔的其它任何任務。
歡迎與我們就此開展交流!
查看英文原文: 50 Best Open Source Web Crawlers