缘由
起初打算找个爬虫框架写点自己用的爬虫,但并没有在github上找到合适的(以crawler作为关键词)。 看过stack overflow上的一个问答之后,明白了原来crawler(通用爬虫)和scraper(数据提取)其实各有分工,所以很多crawler项目都只是通用爬虫,而几乎没有我想要的定向爬虫,scraper又只专注于页面数据的提取,无奈之下决定结合两者做出一个用于提取页面数据的爬虫,也就是定向爬虫(也有垂直爬虫的叫法,与通用的爬虫的区别可前往百度)。
依赖
- bluebird,用于任务的队列化与流程控制,可并发请求
- cheerio,用于页面数据的提取,主要是提供了一些常用函数,如getLinks()
- request-promise(request的bluebird版本),用于发起http/https请求
- lodash(鲁大师)
概要说明
- 任务(url)队列化,任务置于队列中依次执行,可设置并发数量
- 任务队列可暂停/继续
- 任务驱动型,任务全部执行完毕会进入超时等待(
drainAwait
,默认0),超时时间内爬虫收到任务(url)就会继续运作,否则停止 - 以url的分类(正则)来制定不同页面的数据提取规则
- 支持所有request的请求option,默认自解压gzip
- 为任务指定
downloadTask: true
即可便捷地下载资源 - 支持自定义logger,默认是控制台输出log(可控制颜色)
具体使用详见中文文档 https://github.com/zhang2333/light-crawler/blob/master/README_zh_CN.md
写了有一段时间了,功能也比较完善了,自己用着写了些非常实用的爬虫(相信我,爬虫能做很多有趣的事),比如这个 爬取一个大型的BT站(有很多广告,也不能按大小排序),自定义排序并批量提取相关资源的磁链。截图在最下面
最后,毕竟这是一个人写的,肯定有些错误和不合理的地方,欢迎大家的建议与指正。
项目地址https://github.com/zhang2333/light-crawler
(截图是基于light-crawler的一个实现,顺便问一下截图的位置是如何确定的)