推荐几个优秀的java爬虫项目
2016-05-06 16:08
525 查看
java爬虫项目
大型的:
Nutch apache/nutch · GitHub
适合做搜索引擎,分布式爬虫是其中一个功能。
Heritrix internetarchive/heritrix3 · GitHub
比较成熟的爬虫。
小型的:
Crawler4j yasserg/crawler4j · GitHub
WebCollector CrawlScript/WebCollector · GitHub(国人作品)
目标是在让你在5分钟之内写好一个爬虫。参考了crawler4j,如果经常需要写爬虫,需要写很多爬虫,还是不错的,因为上手肯定不止5分钟。缺点是它的定制性不强。
WebMagic code4craft/webmagic · GitHub(国人作品,推荐)
垂直、全栈式、模块化爬虫。更加适合抓取特定领域的信息。它包含了下载、调度、持久化、处理页面等模块。每一个模块你都可以自己去实现,也可以选择它已经帮你实现好的方案。这就有了很强的定制性。
看看它的例子:
编写第一个爬虫
使用注解编写爬虫
两种方式,都可以实现对github项目的抓取。
原创:偉少
大型的:
Nutch apache/nutch · GitHub
适合做搜索引擎,分布式爬虫是其中一个功能。
Heritrix internetarchive/heritrix3 · GitHub
比较成熟的爬虫。
小型的:
Crawler4j yasserg/crawler4j · GitHub
WebCollector CrawlScript/WebCollector · GitHub(国人作品)
目标是在让你在5分钟之内写好一个爬虫。参考了crawler4j,如果经常需要写爬虫,需要写很多爬虫,还是不错的,因为上手肯定不止5分钟。缺点是它的定制性不强。
WebMagic code4craft/webmagic · GitHub(国人作品,推荐)
垂直、全栈式、模块化爬虫。更加适合抓取特定领域的信息。它包含了下载、调度、持久化、处理页面等模块。每一个模块你都可以自己去实现,也可以选择它已经帮你实现好的方案。这就有了很强的定制性。
看看它的例子:
编写第一个爬虫
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(); } }
使用注解编写爬虫
@TargetUrl("https://github.com/\\w+/\\w+") @HelpUrl("https://github.com/\\w+") public class GithubRepo { @ExtractBy(value = "//h1[@class='entry-title public']/strong/a/text()", notNull = true) private String name; @ExtractByUrl("https://github\\.com/(\\w+)/.*") private String author; @ExtractBy("//div[@id='readme']/tidyText()") private String readme; public static void main(String[] args) { OOSpider.create(Site.me().setSleepTime(1000) , new ConsolePageModelPipeline(), GithubRepo.class) .addUrl("https://github.com/code4craft").thread(5).run(); } }
两种方式,都可以实现对github项目的抓取。
原创:偉少
相关文章推荐
- Google Java编程风格指南
- 了解java回调方法
- springmvc+mybatis xml中SUM()方法返回NULL的解决办法
- Ajax与Java通过POST方式交互
- Spring MVC拦截器
- Javamail实现邮件发送
- Java 之 Annotation
- java 文件的过滤 FileFilter
- Spring PropertyPlaceholderConfigurer 简单使用
- 深入理解Java的4种引用类型
- Java类的反射机制
- Java 注解 拦截器
- Java多线程同步机制(synchronized)
- java html生成图片后保存
- java面向对象_抽象类和接口
- 负载均衡的几种算法Java实现代码
- RxJava入门[转载一篇很棒的文]
- Java基础-第四天作业
- 别人用Myeclipse没问题,到我的eclipse中跑不起来
- Java集合06--Vector源码详解