SeimiCrawler
An agile,powerful,standalone,distributed crawler framework.
SeimiCrawler的目标是成为Java世界最好用最实用的爬虫框架。
简介
SeimiCrawler是一个敏捷的,支持分布式的爬虫开发框架,希望能在最大程度上降低新手开发一个可用性高且性能不差的爬虫系统的门槛,以及提升开发爬虫系统的开发效率。在SeimiCrawler的世界里,绝大多数人只需关心去写抓取的业务逻辑就够了,其余的Seimi帮你搞定。设计思想上SeimiCrawler受Python的爬虫框架Scrapy启发很大,同时融合了Java语言本身特点与Spring的特性,并希望在国内更方便且普遍的使用更有效率的XPath解析HTML,所以SeimiCrawler默认的HTML解析器是JsoupXpath(独立扩展项目,非jsoup自带),默认解析提取HTML数据工作均使用XPath来完成(当然,数据处理亦可以自行选择其他解析器)。
社区讨论
大家有什么问题或建议现在都可以选择通过下面的邮件列表讨论,首次发言前需先订阅并等待审核通过(主要用来屏蔽广告宣传等)
- 订阅:请发邮件到
seimicrawler+subscribe@googlegroups.com
- 发言:请发邮件到
seimicrawler@googlegroups.com
- 退订:请发邮件至
seimicrawler+unsubscribe@googlegroups.com
原理示例
基本原理
集群原理
快速开始
添加maven依赖(中央maven库最新版本0.2.5):
<dependency> <groupId>cn.wanghaomiao</groupId> <artifactId>SeimiCrawler</artifactId> <version>0.2.5</version> </dependency>
在包crawlers
下添加爬虫规则,例如:
@Crawler(name = "basic") public class Basic extends BaseSeimiCrawler { @Override public String[] startUrls() { return new String[]{"http://www.cnblogs.com/"}; } @Override public void start(Response response) { JXDocument doc = response.document(); try { List<Object> urls = doc.sel("//a[@class='titlelnk']/@href"); logger.info("{}", urls.size()); for (Object s:urls){ push(new Request(s.toString(),"getTitle")); } } catch (Exception e) { e.printStackTrace(); } } public void getTitle(Response response){ JXDocument doc = response.document(); try { logger.info("url:{} {}", response.getUrl(), doc.sel("//h1[@class='postTitle']/a/text()|//a[@id='cb_post_title_url']/text()")); //do something } catch (Exception e) { e.printStackTrace(); } } }
然后随便某个包下添加启动Main函数,启动SeimiCrawler:
public class Boot { public static void main(String[] args){ Seimi s = new Seimi(); s.start("basic"); } }
以上便是一个最简单的爬虫系统开发流程。
更多文档
目前可以参考demo工程中的样例,基本包含了主要的特性用法。更为细致的文档移步SeimiCrawler主页中进一步查看
Change log
v0.2.5
- 增加请求遭遇严重异常时重新打回队列处理机制 当一个请求在经历网络请求异常的重试机制后依然出现非预期异常,那么这个请求会在不超过开发者设置的或是默认的最大重新处理次数的情况下被打回队列重新等待被处理,如果被打回次数达到了最大限制,那么seimi会调用开发者自行覆盖实现的
BaseSeimiCrawler.handleErrorRequest(Request request)
来处理记录这个异常的请求。重新打回等待处理机制配合delay功能使用可以在很大程度上避免因访问站点的反爬虫策略引起的请求处理异常,并丢失请求的记录的情况。 - 优化去重判断
- 优化不规范页面的编码获取方式
v0.2.4
- 自动跳转增强,除301,302外增加支持识别通过meta refresh方式的页面跳转
-
Response
对象增加通过getRealUrl()
获取内容对应重定向以及跳转后的真实连接 - 通过注解@Crawler中'useUnrepeated'属性控制是否启用系统级去重机制,默认开启
v0.2.3
- 支持自定义动态代理 开发者可以通过覆盖
BaseSeimiCrawler.proxy()
来自行决定每次请求所使用的代理,覆盖该方法并返回有效代理地址则@Crawler
中proxy
属性失效。 - 添加动态代理,动态User-Agent使用demo
v0.2.2
- 增强对不规范网页的编码识别与兼容能力
v0.2.1
- 优化黑白名单正则过滤机制
v0.2.0
- 增加支持内嵌http服务API提交json格式的Request请求
- 增加针对请求URL进行校验的
allowRules
和denyRules
的自定义设置,即白名单规则和黑名单规则,格式均为正则表达式。默认为null不进行检查 - 增加对Request的合法性的统一校验
- 增加支持请求间的delay时间设置
相关推荐
SeimiCrawler是一个敏捷的,支持分布式的Java爬虫开发框架,希望能在最大程度上降低新手开发一个可用性高且性能不差的爬虫系统的门槛,以及提升开发爬虫系统的开发效率。在SeimiCrawler的世界里,绝大多数人只需...
java毕业设计——商品供应管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——商品供应管理系统的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——商品供应管理系统的设计与实现...
java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源代码).zip java毕业设计——基于Vue+Node的外卖系统设计与实现(答辩PPT+源...
java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip java毕业设计——基于java的五子棋游戏的设计与开发(源代码+论文).zip ...
在"javaSSH框架——学生学籍管理系统"中,我们可以看到一个典型的SSH框架应用,主要用于实现学生学籍的管理。 一、设计目的 该设计旨在让学生通过实际操作加深对J2EE框架技术的理解,特别是在Struts2、Spring和...
Java毕业设计——基于Java的飞机大战游戏的设计与实现(论文+源代码+讲解视频).zip Java毕业设计——基于Java的飞机大战游戏的设计与实现(论文+源代码+讲解视频).zip Java毕业设计——基于Java的飞机大战游戏的...
java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计——java作业管理系统的设计与实现(源代码+论文).zip java毕业设计...
java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip java毕业设计——java游戏设计打飞机程序设计与开发(源代码+论文).zip ...
java毕业设计——java班主任管理系统(源代码+论文).zip java毕业设计——java班主任管理系统(源代码+论文).zip java毕业设计——java班主任管理系统(源代码+论文).zip java毕业设计——java班主任管理系统(源代码+...
java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计——java公共资源模块的设计与开发(源代码+论文).zip java毕业设计...
java毕业设计——打飞机游戏设计与实现(论文+源代码).zip java毕业设计——打飞机游戏设计与实现(论文+源代码).zip java毕业设计——打飞机游戏设计与实现(论文+源代码).zip java毕业设计——打飞机游戏设计与实现...
java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计与实现(源码+数据库).zip java毕业设计——学校管理系统设计...
java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的汽车租赁网站设计与实现(源码+数据库).zip java...
java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+数据库).zip java毕业设计——基于ssm的流浪猫狗救助网站设计与实现(源码+...
java毕业设计——搜索引擎的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——搜索引擎的设计与实现(论文+答辩PPT+源代码+数据库).zip java毕业设计——搜索引擎的设计与实现(论文+答辩PPT+源代码+...
java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业设计——java+mysql crm客户关系管理系统的设计与实现.zip java毕业...
Java毕业设计——基于java的雷电游戏(论文+答辩PPT+源代码+讲解视频).zip Java毕业设计——基于java的雷电游戏(论文+答辩PPT+源代码+讲解视频).zip Java毕业设计——基于java的雷电游戏(论文+答辩PPT+源代码+...
java毕业设计——java物业管理系统设计与实现(论文+源代码).zip java毕业设计——java物业管理系统设计与实现(论文+源代码).zip java毕业设计——java物业管理系统设计与实现(论文+源代码).zip java毕业设计——java...
java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——基于ssm的兼职论坛设计与实现(源码+数据库).zip java毕业设计——...
java毕业设计——基于Misty1算法的加密软件(java)的实现(源代码+论文).zip java毕业设计——基于Misty1算法的加密软件(java)的实现(源代码+论文).zip java毕业设计——基于Misty1算法的加密软件(java)的实现(源代码+...