整理了Node.js、PHP坎吻、Go缆蝉、JAVA、Ruby瘦真、Python等語(yǔ)言的爬蟲框架刊头。不知道讀者們都用過(guò)什么爬蟲框架?爬蟲框架的哪些點(diǎn)你覺(jué)得好诸尽?哪些點(diǎn)覺(jué)得不好原杂?
Node.js
- 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
- 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
- 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
- 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
- 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)目中去。
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形庭。
- 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è)字段,可作為垂直采集用
- 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版本,支持分布式爬取综慎。
- 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的爬蟲定制能力比較弱
- heritrix3
https://github.com/internetarchive/heritrix3
GitHub stars = 1192
特點(diǎn)
- 能夠同時(shí)運(yùn)行多個(gè)抓取任務(wù),唯一的限制是要給并行運(yùn)行的抓取任務(wù)分配內(nèi)存.
- 基于Spring框架去管理XML配置.并且只用這一個(gè)XML配置就替換Hertrix1.X的order.xml和其他配置文件.
- 可以通過(guò)瀏覽器工具很方便易用的瀏覽和修改Spring Bean.
- 增強(qiáng)擴(kuò)展了Spring框架.可以配置得很細(xì)致.具體見Sheets.
- 更安全的控制臺(tái)限制.通過(guò)HTTPS去訪問(wèn)和操作控制臺(tái).
- 增強(qiáng)了擴(kuò)展性.以前的版本,如果有千萬(wàn)級(jí)以上的種子都會(huì)先載入內(nèi)存,如此有可能使得超過(guò)分配給Heritrix的內(nèi)存導(dǎo)致內(nèi)存溢出.Heririx3.0則解決了這個(gè)問(wèn)題.允許這種大規(guī)模抓取.
- 可以靈活的修改一個(gè)正在運(yùn)行的抓取任務(wù).通過(guò)修改Bean和Action Directory兩種方式來(lái)修改.
- 引入了并行隊(duì)列.當(dāng)抓取指定的站點(diǎn)以前只有一個(gè)隊(duì)列,如此會(huì)導(dǎo)致該隊(duì)列的過(guò)于龐大.和抓取緩慢.并行隊(duì)列的話,會(huì)將同一個(gè)站點(diǎn)的URL分成多個(gè)隊(duì)列去并行抓取.
- 增加了腳本控制臺(tái),可以通過(guò)輸入各種各樣的腳本,如AppleScript,ECMAScript,Python,JS去控制和訪問(wèn)Heritrix的基本組件運(yùn)行情況(很有意思).
- 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
- 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
- PySpider
https://github.com/binux/pyspider
GitHub star = 11418
特點(diǎn)
- Powerful WebUI with script editor, task monitor, project manager and result viewer
- MySQL, MongoDB, Redis, SQLite, Elasticsearch; PostgreSQL with SQLAlchemy as database backend
- RabbitMQ, Beanstalk, Redis and Kombu as message queue
- Task priority, retry, periodical, recrawl by age, etc...
- Distributed architecture, Crawl Javascript pages, Python 2.{6,7}, 3.{3,4,5,6} support, etc...
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.
- 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, …)