专知内容生产基石-数据爬取采集利器WebCollector 介绍
今天给大家介绍下我们专知数据采集系统的基石-WebCollector。 作为主流JAVA开源爬虫框架(GitHub上1500+Stars),WebCollector 轻量级、便于二次开发的特点得到了众多数开发者的选取与喜爱。特别与大家分享的是WebCollector的作者Hujunxianligong大神就是我们专知团队的成员。下面开始给大家简单介绍下WebCollector的特性以及在专知的应用。
WebCollector简介
WebCollector 是一个无须配置、便于二次开发的 Java 爬虫框架(内核),它提供精简的的 API,只需编写配置少量代码即可实现一个功能强大的爬虫系统。WebCollector -Hadoop 是 WebCollector 的 Hadoop 版本,支持分布式爬取。
WebCollector入口:百度Google 直接搜索 WebCollector即刻获取。
Github上地址:https://github.com/CrawlScript/WebCollector
1)内核构架图
WebCollector的任务执行流程如上,包括爬取任务生成更新调度管理、任务执行数据爬取、爬取数据信息抽取以及持久化存储。
2)WebCollector 2.x 特性
WebCollector 现已经为2.71版本,基本特性有:
- 自定义遍历策略,可完成更为复杂的遍历业务,例如分页、AJAX
- 可以为每个 URL 设置附加信息(MetaData),利用附加信息可以完成很多复杂业务,例如深度获取、锚文本获取、引用页面获取、POST 参数传递、增量更新等。
- 使用插件机制,用户可定制自己的Http请求、过滤器、执行器等插件。
- 内置一套基于内存的插件(RamCrawler),不依赖文件系统或数据库,适合一次性爬取,例如实时爬取搜索引擎。
- 内置一套基于 Berkeley DB(BreadthCrawler)的插件:适合处理长期和大量级的任务,并具有断点爬取功能,不会因为宕机、关闭导致数据丢失。
- 集成 selenium,可以对 JavaScript 生成信息进行抽取
- 可轻松自定义 http 请求,并内置多代理随机切换功能。 可通过定义 http 请求实现模拟登录。
- 使用 slf4j 作为日志门面,可对接多种日志
- 使用类似Hadoop的Configuration机制,可为每个爬虫定制配置信息。
3)WebCollector 使用
- 官网: https://github.com/CrawlScript/WebCollector
- 镜像: http://git.oschina.net/webcollector/WebCollector
在Eclipse、Netbeans、Intellij等IDE参照Github配制Maven即可使用,或者使用Jar包。
<dependency>
<groupId>cn.edu.hfut.dmic.webcollector</groupId>
<artifactId>WebCollector</artifactId>
<version>2.71</version>
</dependency>
自动爬取新闻网站的例子通过简单配制即可完成:
更多实用请访问WebCollector 主页或者
WebCollector项目主页 http://datahref.com/
WebCollector在专知的使用
我们基于WebCollector构建了实时定点数据采集系统,针对全网的AI内容进行精选采集。基本框架如下图所示。
数据采集系统包含代理配置管理、下载器、调度器、内容解析、控制器等,来可扩展性地可配置化采集内容。
感兴趣的同学加入专知——数据采集交流群(请先加微信小助手weixinhao: Rancho_Fang)或者是QQ群专知-人工智能交流群 426491390
- 使用序列的问题ORA-02287(r5笔记第19天)
- Java多线程详解2
- Java多线程详解3
- SpringMVC处理multipart请求.
- 一条简单的sql语句运行15天的原因分析(r5笔记第17天)
- 巧用flashback database实现灵活的数据回滚(r5笔记第16天)
- Spring Cache For Redis.
- css重写checkbox样式
- 通过shell脚本同时监控多个数据库负载(r5笔记第14天)
- Java 定时器 Timer 的使用.
- 通过shell脚本来统计段大小(r5笔记第14天)
- Linux下配置MySQL主从复制(r5笔记第13天)
- Final 关键字
- ArrayList 和 LinkedList的执行效率比较
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 快速学习UML类图查看
- 设计模式 | 抽象工厂模式
- 设计模式 | 单例模式
- macOS 安装软件已损坏无法打开解决办法 (真好用!)
- nginx 配置反向代理
- ES6新特性速查表
- React-Native Android打包
- React-Native iOS打包
- Webpack+Babel手把手带你搭建开发环境(内附配置文件)
- Redux 异步解决方案2. Redux-Saga中间件
- Redux异步解决方案 1. Redux-Thunk中间件
- 深度学习Pytorch检测实战 - Notes - 第1&2章 基础知识
- Java多线程编程在JMeter中应用
- Kubernetes 升级填坑指南(一)
- 根据 PID 获取 K8S Pod名称 - 反之 POD名称 获取 PID