特性:
- 支持单机器上多线程高效爬取
- 支持多机器分布式部署,进一步提高爬取速度
- 支持自定义各组件,可扩展性强
- 使用 Jsoup 解析
- 代码易理解易学习,基于众多设计模式
本项目采用如上图所示结构来设计,保证了爬取的完整性。以下这几篇文章可能能让您更了解它。
- Java
- Maven
以下步骤帮助您在本地安装并运行本项目。
- java
- maven
- 通过 maven 使用,
pom.xml
中加入
<repositories>
<repository>
<id>github-tiny-crawler-repo</id>
<name>Tiny-Crawler on Github</name>
<url>https://congregalis.github.io/tiny-crawler/maven-repo/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github</groupId>
<artifactId>tiny-crawler</artifactId>
<version>0.2.0</version>
</dependency>
</dependencies>
- 通过源码使用,克隆该仓库
git clone https://github.com/Congregalis/tiny-crawler.git
Crawler
作为启动类,首先通过 build()
方法构造,然后添加种子 addSeed(String url)
,之后使用一系列的自定义配置方法,最后调用 run()
方法开启爬虫。
*注:支持链式调用
自定义配置方法:
- thread(int num): 指定需要开启的线程
- setExitSleepTime(int time): 指定爬虫没有获取新链接时,再过多少时间退出,单位为秒
- setScheduler(Scheduler scheduler): 指定自定义 Scheduler
- setDownloader(Downloader downloader): 指定自定义 Downloader
- setProcessor(Processor processor): 指定自定义 Processor
- setSaver(Saver saver): 指定自定义 Saver
- addRule(String rule): 添加自定义规则,
rule
为匹配链接的正则表达式
爬取我博客中的所有文章对应的标题和正文示例如下:
// 种子url
String seed = "https://congregalis.github.io/";
// 匹配任何“年月日”形式的日期,连接符可以没有或是 . / - 之一
String dateRegex = "(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\\1(?:29|30)|(?:0?[13578]|1[02])\\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\\2(?:29))";
Crawler.build().addSeed(seed).addRule("https://congregalis.github.io/" + dateRegex + "/.*/").run();
其实还有其他很多工作没完成,欢迎提 issue。
贡献使开源社区成为学习、启发和创造的绝佳场所。 非常感谢您做出的任何贡献。
如果您有更好的建议,请 fork 存储库并创建拉取请求。您也可以简单地打开带有 “enhancement” 标签的 issue。
别忘了给项目打星星!谢谢您!
- Fork 这个项目
- 创建你的分支 (
git checkout -b feature/AmazingFeature
) - 提交你的修改 (
git commit -m 'Add some AmazingFeature'
) - 推到你创建的分支上 (
git push origin feature/AmazingFeature
) - 提交PR (Pull Request)
基于 MIT 协议。更多信息请查看 LICENSE.txt
。
Congregalis - [email protected]