前言
在项目中碰到需要进行爬虫收集数据的需求。因此找了一下Java爬虫框架,对比了之后发现 WebMagic 相对而言比较简单易用。
一、关于 WebMagic
webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发。webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料。
webmagic的主要特色:
- 完全模块化的设计,强大的可扩展性。
- 核心简单但是涵盖爬虫的全部流程,灵活而强大,也是学习爬虫入门的好材料。
- 提供丰富的抽取页面API。
- 无配置,但是可通过POJO+注解形式实现一个爬虫。
- 支持多线程。
- 支持分布式。
- 支持爬取js动态渲染的页面。
- 无框架依赖,可以灵活的嵌入到项目中去。
WebMagic也有相关中文文档,还有详细的开发步骤,本篇也是在此基础上进行实践练习(第一个爬虫项目,编写基本的爬虫)。
二、需求说明
- 爬虫内容 该网页所有文章内容页面
三、操作步骤
1.引入 Maven 依赖
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-core</artifactId>
<version>0.7.4</version>
</dependency>
<dependency>
<groupId>us.codecraft</groupId>
<artifactId>webmagic-extension</artifactId>
<version>0.7.4</version>
</dependency>
2.编写处理器
核心:实现 PageProcessor,重写 process 方法
@Override
public void process(Page page) {
// news_box是新闻页面的标签
// .links().all() 表示获取所有链接
// addTargetRequests() 加入爬虫页
page.addTargetRequests(page.getHtml().xpath("[@class='news_box']").links().all());
// 此处是保存文章的本地路径
String path = "";
// 将页面获取 byte[] 转为文件输出
FileUtils.getFile(path, page.getBytes());
}
public static void main(String[] args) {
long startTime, endTime;
System.out.println("【爬虫开始】...");
startTime = System.currentTimeMillis();
Spider.create(new GithubRepoPageProcessor())
// 爬虫开始页面
.addUrl("http://www.gov.cn/zhengce/zuixin.htm")
.thread(5)
.run();
endTime = System.currentTimeMillis();
System.out.println("【爬虫结束】共抓取" + size + "篇文章,耗时约" + ((endTime - startTime) / 1000) + "秒,请查收!");
}