爬蟲框架整理匯總

整理了Node.js、PHP坎吻、Go缆蝉、JAVA、Ruby瘦真、Python等語(yǔ)言的爬蟲框架刊头。不知道讀者們都用過(guò)什么爬蟲框架?爬蟲框架的哪些點(diǎn)你覺(jué)得好诸尽?哪些點(diǎn)覺(jué)得不好原杂?


Node.js

  1. node-crawler

https://github.com/bda-research/node-crawler

Github stars = 3802

北京bda資訊公司數(shù)據(jù)團(tuán)隊(duì)的作品

優(yōu)點(diǎn):

  • 天生支持非阻塞異步IO
  • 支持對(duì) DOM 快速選擇
  • 符合jQuery語(yǔ)法的選擇器功能(默認(rèn)使用Cheerio)
  • 支持連接池模式,并發(fā)數(shù)和重連數(shù)均可配置
  • 支持請(qǐng)求隊(duì)列的優(yōu)先權(quán)(即不同URL的請(qǐng)求能有不同的優(yōu)先級(jí))
  • 支持延時(shí)功能(某些服務(wù)器對(duì)每分鐘內(nèi)連接數(shù)有限制)
  • 支持 forceUTF8 模式以應(yīng)對(duì)復(fù)雜的編碼問(wèn)題您机,當(dāng)然你也可以自己為不同的連接設(shè)置編碼

關(guān)于V8引擎

  • 一個(gè)完整JavaScript引擎的執(zhí)行過(guò)程大致流程如下:源代碼-→抽象語(yǔ)法樹-→字節(jié)碼-→JIT(JIT編譯器)-→本地代碼
  • 在V8引擎中穿肄,源代碼先被解析器轉(zhuǎn)變?yōu)槌橄笳Z(yǔ)法樹(AST)年局,然后使用JIT編譯器的全代碼生成器從AST直接生成本地可執(zhí)行代碼。

PHP

  1. QueryList

https://github.com/jae-jae/QueryList

Github stars = 1016

特點(diǎn)

  • 擁有與jQuery完全相同的CSS3 DOM選擇器
  • 擁有與jQuery完全相同的DOM操作API
  • 擁有通用的列表采集方案
  • 擁有強(qiáng)大的HTTP請(qǐng)求套件咸产,輕松實(shí)現(xiàn)如:模擬登陸某宪、偽造瀏覽器、HTTP代理等意復(fù)雜的網(wǎng)絡(luò)請(qǐng)求
  • 擁有亂碼解決方案
  • 擁有強(qiáng)大的內(nèi)容過(guò)濾功能锐朴,可使用jQuey選擇器來(lái)過(guò)濾內(nèi)容
  • 擁有高度的模塊化設(shè)計(jì)兴喂,擴(kuò)展性強(qiáng)
  • 擁有富有表現(xiàn)力的API
  • 擁有高質(zhì)量文檔
  • 擁有豐富的插件
  • 擁有專業(yè)的問(wèn)答社區(qū)和交流群

Go

  1. Colly

https://github.com/gocolly/colly

Github stars = 5065

Features

  • Clean API
  • Fast (>1k request/sec on a single core)
  • Manages request delays and maximum concurrency per domain
  • Automatic cookie and session handling
  • Sync/async/parallel scraping
  • Distributed scraping
  • Caching
  • Automatic encoding of non-unicode responses
  • Robots.txt support
  • Google App Engine support

  1. Pholcus

https://github.com/henrylee2cn/pholcus

GitHub stars = 4089

支持單機(jī)、服務(wù)端焚志、客戶端三種運(yùn)行模式衣迷,擁有Web、GUI酱酬、命令行三種操作界面壶谒;規(guī)則簡(jiǎn)單靈活、批量任務(wù)并發(fā)膳沽、輸出方式豐富(mysql/mongodb/kafka/csv/excel等)汗菜、有大量Demo共享;另外它還支持橫縱向兩種抓取模式挑社,支持模擬登錄和任務(wù)暫停陨界、取消等一系列高級(jí)功能。

框架特點(diǎn)

  • 為具備一定Go或JS編程基礎(chǔ)的用戶提供只需關(guān)注規(guī)則定制痛阻、功能完備的重量級(jí)爬蟲工具菌瘪;
  • 支持單機(jī)、服務(wù)端阱当、客戶端三種運(yùn)行模式俏扩;
  • GUI(Windows)、Web弊添、Cmd 三種操作界面录淡,可通過(guò)參數(shù)控制打開方式;
  • 支持狀態(tài)控制油坝,如暫停嫉戚、恢復(fù)、停止等免钻;
  • 可控制采集量彼水;
  • 可控制并發(fā)協(xié)程數(shù);
  • 支持多采集任務(wù)并發(fā)執(zhí)行极舔;
  • 支持代理IP列表凤覆,可控制更換頻率;
  • 支持采集過(guò)程隨機(jī)停歇拆魏,模擬人工行為盯桦;
  • 根據(jù)規(guī)則需求慈俯,提供自定義配置輸入接口
  • 有mysql、mongodb拥峦、kafka贴膘、csv、excel略号、原文件下載共五種輸出方式刑峡;
  • 支持分批輸出,且每批數(shù)量可控玄柠;
  • 支持靜態(tài)Go和動(dòng)態(tài)JS兩種采集規(guī)則突梦,支持橫縱向兩種抓取模式,且有大量Demo羽利;
  • 持久化成功記錄宫患,便于自動(dòng)去重;
  • 序列化失敗請(qǐng)求这弧,支持反序列化自動(dòng)重載處理娃闲;
  • 采用surfer高并發(fā)下載器,支持 GET/POST/HEAD 方法及 http/https 協(xié)議匾浪,同時(shí)支持固定UserAgent自動(dòng)保存cookie與隨機(jī)大量UserAgent禁用cookie兩種模式皇帮,高度模擬瀏覽器行為,可實(shí)現(xiàn)模擬登錄等功能户矢;
  • 服務(wù)器/客戶端模式采用Teleport高并發(fā)SocketAPI框架玲献,全雙工長(zhǎng)連接通信,內(nèi)部數(shù)據(jù)傳輸格式為JSON梯浪。

JAVA

  1. webmagic

https://github.com/code4craft/webmagic

Github stars = 6643

webmagic的主要特色:

  • 完全模塊化的設(shè)計(jì),強(qiáng)大的可擴(kuò)展性瓢娜。
  • 核心簡(jiǎn)單但是涵蓋爬蟲的全部流程挂洛,靈活而強(qiáng)大,也是學(xué)習(xí)爬蟲入門的好材料眠砾。
  • 提供豐富的抽取頁(yè)面API虏劲。
  • 無(wú)配置,但是可通過(guò)POJO+注解形式實(shí)現(xiàn)一個(gè)爬蟲褒颈。
  • 支持多線程柒巫。
  • 支持分布式。
  • 支持爬取js動(dòng)態(tài)渲染的頁(yè)面谷丸。
  • 無(wú)框架依賴堡掏,可以靈活的嵌入到項(xiàng)目中去。
架構(gòu)

WebMagic的四個(gè)組件:

1.Downloader

Downloader負(fù)責(zé)從互聯(lián)網(wǎng)上下載頁(yè)面刨疼,以便后續(xù)處理泉唁。WebMagic默認(rèn)使用了Apache HttpClient作為下載工具鹅龄。

2.PageProcessor

PageProcessor負(fù)責(zé)解析頁(yè)面,抽取有用信息亭畜,以及發(fā)現(xiàn)新的鏈接扮休。WebMagic使用Jsoup作為HTML解析工具,并基于其開發(fā)了解析XPath的工具Xsoup拴鸵。

在這四個(gè)組件中玷坠,PageProcessor對(duì)于每個(gè)站點(diǎn)每個(gè)頁(yè)面都不一樣,是需要使用者定制的部分劲藐。

3.Scheduler

Scheduler負(fù)責(zé)管理待抓取的URL侨糟,以及一些去重的工作。WebMagic默認(rèn)提供了JDK的內(nèi)存隊(duì)列來(lái)管理URL瘩燥,并用集合來(lái)進(jìn)行去重秕重。也支持使用Redis進(jìn)行分布式管理。

除非項(xiàng)目有一些特殊的分布式需求厉膀,否則無(wú)需自己定制Scheduler溶耘。

4.Pipeline

Pipeline負(fù)責(zé)抽取結(jié)果的處理,包括計(jì)算服鹅、持久化到文件凳兵、數(shù)據(jù)庫(kù)等。WebMagic默認(rèn)提供了“輸出到控制臺(tái)”和“保存到文件”兩種結(jié)果處理方案企软。

Pipeline定義了結(jié)果保存的方式庐扫,如果你要保存到指定數(shù)據(jù)庫(kù),則需要編寫對(duì)應(yīng)的Pipeline仗哨。對(duì)于一類需求一般只需編寫一個(gè)Pipeline形庭。


  1. crawler4j

https://github.com/yasserg/crawler4j

GitHub stars = 2944

沒(méi)有文檔,只有g(shù)it

優(yōu)點(diǎn)

  • 多線程采集
  • 內(nèi)置了Url 過(guò)濾機(jī)制厌漂,采用的是BerkeleyDB 進(jìn)行url的過(guò)濾萨醒。
  • 可擴(kuò)展為支持結(jié)構(gòu)化提取網(wǎng)頁(yè)字段,可作為垂直采集用

  1. WebCollector

https://github.com/CrawlScript/WebCollector

GitHub stars = 1883

沒(méi)有文檔苇倡,只有g(shù)it

WebCollector是一個(gè)無(wú)須配置富纸、便于二次開發(fā)的JAVA爬蟲框架,它提供精簡(jiǎn)的的API旨椒,只需少量代碼即可實(shí)現(xiàn)一個(gè)功能強(qiáng)大的爬蟲晓褪。WebCollector-Hadoop是WebCollector的Hadoop版本,支持分布式爬取综慎。


  1. Nutch

https://github.com/apache/nutch

GitHub stars = 1703

Features

  • Fetching and parsing are done separately by default, this reduces the risk of an error corrupting the fetch parse stage of a crawl with Nutch.
  • Plugins have been overhauled as a direct result of removal of legacy Lucene dependency for indexing and search.
  • The number of plugins for processing various document types being shipped with Nutch has been refined. Plain text, XML, OpenDocument (OpenOffice.org), Microsoft Office (Word, Excel, Powerpoint), PDF, RTF, MP3 (ID3 tags) are all now parsed by the Tika plugin. The only parser plugins shipped with Nutch now are Feed (RSS/Atom), HTML, Ext, JavaScript, SWF, Tika & ZIP.
  • MapReduce ;
  • Distributed filesystem (via Hadoop)
  • Link-graph database

Nutch的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):
Nutch支持分布式抓取涣仿,并有Hadoop支持,可以進(jìn)行多機(jī)分布抓取寥粹,存儲(chǔ)和索引变过。另外很吸引人的一點(diǎn)在于埃元,它提供了一種插件框架,使得其對(duì)各種網(wǎng)頁(yè)內(nèi)容的解析媚狰、各種數(shù)據(jù)的采集岛杀、查詢、集群崭孤、過(guò)濾等功能能夠方便的進(jìn)行擴(kuò)展类嗤,正是由于有此框架,使得 Nutch 的插件開發(fā)非常容易辨宠,第三方的插件也層出不窮遗锣,極大的增強(qiáng)了 Nutch 的功能和聲譽(yù)。
缺點(diǎn):
Nutch的爬蟲定制能力比較弱


  1. heritrix3

https://github.com/internetarchive/heritrix3

GitHub stars = 1192

特點(diǎn)

  1. 能夠同時(shí)運(yùn)行多個(gè)抓取任務(wù),唯一的限制是要給并行運(yùn)行的抓取任務(wù)分配內(nèi)存.
  2. 基于Spring框架去管理XML配置.并且只用這一個(gè)XML配置就替換Hertrix1.X的order.xml和其他配置文件.
  3. 可以通過(guò)瀏覽器工具很方便易用的瀏覽和修改Spring Bean.
  4. 增強(qiáng)擴(kuò)展了Spring框架.可以配置得很細(xì)致.具體見Sheets.
  5. 更安全的控制臺(tái)限制.通過(guò)HTTPS去訪問(wèn)和操作控制臺(tái).
  6. 增強(qiáng)了擴(kuò)展性.以前的版本,如果有千萬(wàn)級(jí)以上的種子都會(huì)先載入內(nèi)存,如此有可能使得超過(guò)分配給Heritrix的內(nèi)存導(dǎo)致內(nèi)存溢出.Heririx3.0則解決了這個(gè)問(wèn)題.允許這種大規(guī)模抓取.
  7. 可以靈活的修改一個(gè)正在運(yùn)行的抓取任務(wù).通過(guò)修改Bean和Action Directory兩種方式來(lái)修改.
  8. 引入了并行隊(duì)列.當(dāng)抓取指定的站點(diǎn)以前只有一個(gè)隊(duì)列,如此會(huì)導(dǎo)致該隊(duì)列的過(guò)于龐大.和抓取緩慢.并行隊(duì)列的話,會(huì)將同一個(gè)站點(diǎn)的URL分成多個(gè)隊(duì)列去并行抓取.
  9. 增加了腳本控制臺(tái),可以通過(guò)輸入各種各樣的腳本,如AppleScript,ECMAScript,Python,JS去控制和訪問(wèn)Heritrix的基本組件運(yùn)行情況(很有意思).

  1. Gecco

https://github.com/xtuhcy/gecco

GitHub stars = 1171

主要特征

  • 簡(jiǎn)單易用嗤形,使用jquery風(fēng)格的選擇器抽取元素
  • 支持爬取規(guī)則的動(dòng)態(tài)配置和加載
  • 支持頁(yè)面中的異步ajax請(qǐng)求
  • 支持頁(yè)面中的javascript變量抽取
  • 利用Redis實(shí)現(xiàn)分布式抓取,參考gecco-redis
  • 支持結(jié)合Spring開發(fā)業(yè)務(wù)邏輯,參考gecco-spring
  • 支持htmlunit擴(kuò)展,參考gecco-htmlunit
  • 支持插件擴(kuò)展機(jī)制
  • 支持下載時(shí)UserAgent隨機(jī)選取
  • 支持下載代理服務(wù)器隨機(jī)選取

Ruby

Wombat

https://github.com/felipecsl/wombat

Github stars = 1083

Wombat is a simple ruby DSL to scrape webpages on top of the cool Mechanize and Nokogiri gems. It is aimed to be a more high level abstraction if you dont want to dig into the specifics of getting the page and parsing it into your own data structure, which can be a decent amount of work, depending on what you need.


最后精偿,Python

  1. Scrapy

https://github.com/scrapy/scrapy

GitHub stars = 27682

  • 內(nèi)建的CSS選擇器和XPath表達(dá)式
  • 基于IPython交互式shell,方便編寫爬蟲和debug
  • 內(nèi)建的文件導(dǎo)出和保存方法赋兵,格式多樣JSON笔咽、CSV、XML
  • 健壯的編碼支持
  • 擴(kuò)展性強(qiáng)霹期,可以使用signals和API(中間件叶组、插件、管道)添加自定義功能
  • 多種用于處理session历造、cookies甩十、HTTP認(rèn)證、user-agent吭产、robots.txt侣监、抓取深度限制的中間件和插件
  • Scrapy內(nèi)建Telnet console,可用于debug
Scrapy架構(gòu)

  1. PySpider

https://github.com/binux/pyspider

GitHub star = 11418

特點(diǎn)

Scheduler

The Scheduler receives tasks from newtask_queue from processor. Decide whether the task is new or requires re-crawl. Sort tasks according to priority and feeding them to fetcher with traffic control (token bucket algorithm). Take care of periodic tasks, lost tasks and failed tasks and retry later.

Note that in current implement of scheduler, only one scheduler is allowed.

Scheduler

The Scheduler receives tasks from newtask_queue from processor. Decide whether the task is new or requires re-crawl. Sort tasks according to priority and feeding them to fetcher with traffic control (token bucket algorithm). Take care of periodic tasks, lost tasks and failed tasks and retry later.

Processor

The Processor is responsible for running the script written by users to parse and extract information. Your script is running in an unlimited environment. Although we have various tools(like PyQuery) for you to extract information and links, you can use anything you want to deal with the response. You may refer to Script Environment and API Reference to get more information about script.

Result Worker (optional)

Result worker receives results from Processor. Pyspider has a built-in result worker to save result to resultdb. Overwrite it to deal with result by your needs.

WebUI

WebUI is a web frontend for everything. It contains:

  • script editor, debugger
  • project manager
  • task monitor
  • result viewer, exporter

Maybe webui is the most attractive part of pyspider. With this powerful UI, you can debug your scripts step by step just as pyspider do. Starting or stop a project. Finding which project is going wrong and what request is failed and try it again with debugger.


  1. Newspaper

https://github.com/codelucas/newspaper

GitHub star = 6386

下面這個(gè)demo站垮刹,可以展示提取標(biāo)題达吞、正文、關(guān)鍵詞等信息荒典。
http://newspaper-demo.herokuapp.com

Features

  • Multi-threaded article download framework
  • News url identification
  • Text extraction from html
  • Top image extraction from html
  • All image extraction from html
  • Keyword extraction from text
  • Summary extraction from text
  • Author extraction from text
  • Google trending terms extraction
  • Works in 10+ languages (English, Chinese, German, Arabic, …)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市吞鸭,隨后出現(xiàn)的幾起案子寺董,更是在濱河造成了極大的恐慌,老刑警劉巖刻剥,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遮咖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡造虏,警方通過(guò)查閱死者的電腦和手機(jī)御吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門麦箍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人陶珠,你說(shuō)我怎么就攤上這事挟裂。” “怎么了揍诽?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵诀蓉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我暑脆,道長(zhǎng)渠啤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任添吗,我火速辦了婚禮沥曹,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘碟联。我一直安慰自己妓美,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布玄帕。 她就那樣靜靜地躺著部脚,像睡著了一般。 火紅的嫁衣襯著肌膚如雪裤纹。 梳的紋絲不亂的頭發(fā)上委刘,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音鹰椒,去河邊找鬼锡移。 笑死,一個(gè)胖子當(dāng)著我的面吹牛漆际,可吹牛的內(nèi)容都是我干的淆珊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼奸汇,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼施符!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起擂找,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤戳吝,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后贯涎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體听哭,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了陆盘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片普筹。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隘马,靈堂內(nèi)的尸體忽然破棺而出太防,到底是詐尸還是另有隱情,我是刑警寧澤祟霍,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布杏头,位于F島的核電站,受9級(jí)特大地震影響沸呐,放射性物質(zhì)發(fā)生泄漏醇王。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一崭添、第九天 我趴在偏房一處隱蔽的房頂上張望寓娩。 院中可真熱鬧,春花似錦呼渣、人聲如沸棘伴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)焊夸。三九已至,卻和暖如春蓝角,著一層夾襖步出監(jiān)牢的瞬間阱穗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工使鹅, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留揪阶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓患朱,卻偏偏與公主長(zhǎng)得像鲁僚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子裁厅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345