Skip to content

小而实用的 Java 爬虫框架,主要用于学习爬虫框架的运作原理

License

Notifications You must be signed in to change notification settings

Congregalis/tiny-crawler

Repository files navigation

Contributors Forks Stargazers Issues MIT License


Logo

Tiny-Crawler

小而实用的 Java 爬虫框架,主要用于学习爬虫框架的运作原理。
查看文档 »

演示 · 提交 Bug · 增加需求

目录
  1. 关于本项目
  2. 使用本项目
  3. 用法
  4. 下一步工作
  5. 参与贡献
  6. 开源协议
  7. 联系方式
  8. 感谢

关于本项目

特性:

  • 支持单机器上多线程高效爬取
  • 支持多机器分布式部署,进一步提高爬取速度
  • 支持自定义各组件,可扩展性强
  • 使用 Jsoup 解析
  • 代码易理解易学习,基于众多设计模式

Product Name Screen Shot

本项目采用如上图所示结构来设计,保证了爬取的完整性。以下这几篇文章可能能让您更了解它。

(back to top)

环境

  • Java
  • Maven

(back to top)

使用本项目

以下步骤帮助您在本地安装并运行本项目。

前置条件

  • java
  • maven

安装项目

  1. 通过 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>
  1. 通过源码使用,克隆该仓库
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();

结果

(back to top)

下一步工作

  • 加入自定义配置 爬取深度最大爬取页面数,见 issue#1
  • 引入 domain 来限制最主要的爬取范围,这不同于规则,见 issue#1

其实还有其他很多工作没完成,欢迎提 issue。

(back to top)

参与贡献

贡献使开源社区成为学习、启发和创造的绝佳场所。 非常感谢您做出的任何贡献

如果您有更好的建议,请 fork 存储库并创建拉取请求。您也可以简单地打开带有 “enhancement” 标签的 issue。

别忘了给项目打星星!谢谢您!

  1. Fork 这个项目
  2. 创建你的分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的修改 (git commit -m 'Add some AmazingFeature')
  4. 推到你创建的分支上 (git push origin feature/AmazingFeature)
  5. 提交PR (Pull Request)

(back to top)

开源协议

基于 MIT 协议。更多信息请查看 LICENSE.txt

(back to top)

联系方式

Congregalis - [email protected]

项目地址: https://github.com/Congregalis/tiny-crawler

(back to top)

感谢

(back to top)

About

小而实用的 Java 爬虫框架,主要用于学习爬虫框架的运作原理

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages