这里将它的文档翻译一下,期待更多的实用案例。
目标打造成Node社区最强大和流行的爬虫/内容抽取工具库,且支持生产环境。
特性:
更新日志: https://github.com/bda-research/node-crawler/blob/master/CHANGELOG.md
当你在流量网站时,使用 rateLimit 控制间隔时间。
你可以将这些配置发给 Crawler() 构造器,让它们成为全局配置,或者自定义 queue() 的请求已覆盖全局配置。
这个配置列表在mikeal的 request项目配置 的基础上做了扩展,并且会直接发送给 request() 方法。
基本请求配置项:
回调:
计划任务选项:
重试选项:
服务端DOM配置:
字符集编码:
缓存:
其它:
当一个任务被加到计划时触发.
当limiter改变时触发.
当爬虫准备好发送请求时触发.
如果你想在发出请求之前的最后阶段改变配置,可以监听这个事件。
当队列为空时触发。
将任务加入队列并等待执行。
队列数量,该属性为只读。
使用limiter控制爬取频率。所有提交到limiter的任务都需要遵守 rateLimit 和 maxConnections 的限制。 rateLimit 是两个任务之间的最小间隔, maxConnections 是最大的并发数。limiters之间是互相独立的。一个通常的用例是为不同的代理设置不同的limiter。另外值得一提的是,当 rateLimit 设置为非0的值时, maxConnections 的值将被强制为1.
爬虫默认使用 Cheerio ,并将 JSDOM 作为可选的替代。JSDOM更稳定,如果你想使用JSDOM,你需要引入该依赖 require('jsdom') ,并配置爬虫。
这些解析配置从 htmlparser2 里继承而来。你可以使用所有可用的配置。默认的配置为:
需要所有的配置项和它们的效果,查看 这里 以及
htmlparser2的配置项 。 来源
要使用JSDOM,你需要先在项目目录下 npm install jsdom ,然后配置爬虫。
爬虫使用本地的httpbin来测试。你可以从PyPI安装httpbin并将其作为WSGI应用来允许。比如,使用Gunicorn:
在安装 Docker 之后, 你可以执行:
网络爬虫的抓取策略有很多种,按照系统结构和实现技术,大致可以分为以下几种:通用网络爬虫(GeneralPurposeWebCrawler)、聚焦网络爬虫(FocusedWebCrawler)、增量式网络爬虫(IncrementalWebCrawler)、深层网络爬虫(DeepWebCrawler)。增量式网络爬虫是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。
一般网络爬虫的爬行范围和数量很大,爬行速度和存储空间要求很高,爬行页面的顺序也比较低。同时,由于需要刷新的页面太多,通常采用并行工作,但刷新一页需要很长时间。
聚焦网络爬虫是指选择性地爬行与预定义主题相关的网络爬虫。与普通网络爬虫相比,聚焦爬虫只需爬行与主题相关的网页,大大节省了硬件和网络资源,保存的网页也因数量少而更新快,还能很好地满足一些特定人群对特定领域信息的需求。
DeepWeb爬虫,也就是深层网页爬虫,在深层网页容量是表层网页的数百倍,是互联网上最大、发展最快的新信息资源。
Node.js当然适合做爬虫,当然Python同样也适合。你所遭遇的问题充其量只是个程序逻辑问题,而不是语言问题。Nodejs做爬虫最大的优势大概在于更容易接入诸如下类的phantomjs/casperjs来搞一些更自动化的针对动态加载内容的爬取(当然Python也行,只不过没那么原生)。单纯只是爬个数据,解析一下DOM,无论Php还是Java还是C++还是C#甚至是VBS都一样能玩得顺溜,代码量也不见得就会特别大。目前,Python做爬虫更多一些,一方面可能是因为诸如Scrapy这样的总体分布框架更加完善而久经考验,而另一方面,爬下来的数据若不是自己做玩具,更多的情况下还需要做清洗、分析等相关工作,而不是闭眼存文件/数据库。这些数据处理相关环节中,Python的生态要比Node好太多。从头写一个原始的爬虫,Node.js 确实很方便,不过其它语言驱动浏览器也没复杂到哪里。写一个能工程实用的,比的其实是现有工具的成熟度,目前 Crawler 虽然已经很像 Scrapy 了,上手很快,但还是需要自己找个 cheerio 之类的来分析 dom,Scrapy 则是全集成的,当然 Crawler 也可随便换熟悉的 dom 处理框架也算一个好处啦。而搞一个24x7运行的分布式爬虫系统,Scrapy 成熟度强的就不是一星半点儿logging/stats/telnet/email什么的都标配了,节点任务分配、调度都现成的,相信假以时日,总会有人拿 Node.js 搞出一套同样强大的。简单的爬虫用啥都能写,python和js区别很小,选个自己喜欢的足够熟练的即可。复杂的爬虫语言不是关键问题,架构做大了之后也不是一种语言能很好解决的。