相信很多人对于爬虫应该不陌生,爬虫在大多数情况下可以帮助用户完成很多的自动化的操作,极大的提升了人工的效率。
当然目前市面上很多的爬虫都是使用Python语言开发的,但是作为一个Java程序员,我们怎么可以甘于人后呢?我们知道其实编程语言都是一样的,只是在某些领域中可能性能会更好一些。但是归根究底,Python语言可以完成的工作Java语言其实也可以完成的。下面我们就来为大家介绍两种Java环境下的爬虫方案。
Webmagic
在传统的Java解决方案中,通常使用的是JSONP的方式来进行爬虫,但是这里我们要介绍的就是下面这个框架。
http://webmagic.io/
中文文档链接:
http://webmagic.io/docs/zh/
源码地址链接:
https://github.com/code4craft/webmagic
简单来讲,WebMagic是一个简单灵活的Java爬虫框架。基于WebMagic,你可以快速开发出一个高效、易维护的爬虫。
它参考了比较成熟的Scrapy框架,使用了HttpClient、Jsoup等一些比较成熟的经过了Java程序验证的工具。可以基于微内核和高可用进行扩展。它提供了四大基础组件
- DownLoader:负责从互联网上下载页面,以便后续处理
- PageProcesser:负责解析页面,抽取有用信息,以及发现新的链接。
- Scheduler:负责管理待抓取的URL,以及一些去重的工作
- Pipeline:负责抽取结果的处理,包括计算、持久化到文件、数据库等。
WebMagic 整体架构如下。
通过Spider来启动项目并且来管理四大组件的整合。使用方式也比较简单,在POM中引入对应的依赖即可
us.codecraft
webmagic-core
0.7.3
us.codecraft
webmagic-extension
0.7.3
因为这其中引入了日志处理的实现,所以需要再使用的时候排除对应的日志依赖。如下所示。
us.codecraft
webmagic-extension
0.7.3
org.slf4j
slf4j-log4j12
这样就将webmagic引入到我们的项目中,编写如下的代码我们就可以运行第一个Java爬虫项目了
import us.codecraft.webmagic.Page;
import us.codecraft.webmagic.Site;
import us.codecraft.webmagic.Spider;
import us.codecraft.webmagic.processor.PageProcessor;
public class GithubRepoPageProcessor implements PageProcessor {
private Site site = Site.me().setRetryTimes(3).setSleepTime(100);
@Override
public void process(Page page) {
page.addTargetRequests(page.getHtml().links().regex("(https://github\\.com/\\w+/\\w+)").all());
page.putField("author", page.getUrl().regex("https://github\\.com/(\\w+)/.*").toString());
page.putField("name", page.getHtml().xpath("//h1[@class='entry-title public']/strong/a/text()").toString());
if (page.getResultItems().get("name")==null){
//skip this page
page.setSkip(true);
}
page.putField("readme", page.getHtml().xpath("//div[@id='readme']/tidyText()"));
}
@Override
public Site getSite() {
return site;
}
public static void main(String[] args) {
Spider.create(new GithubRepoPageProcessor()).addUrl("https://github.com/code4craft").thread(5).run();
}
}
总结
上面我们介绍了Webmagic爬虫框架,后续,我们还会继续介绍关于它的使用,并且还带着大家一起去解析一些爬虫网站。
本文暂时没有评论,来添加一个吧(●'◡'●)