# j2crawler
**Repository Path**: romantichjw/j2crawler
## Basic Information
- **Project Name**: j2crawler
- **Description**: j2crawler是一个通用的、最小化依赖第三方组件、灵活扩展组件、开箱即用,简单易用性、支持目前主流的通用的解析语法、灵活多变的实时/离线抓取方式、遵循Springboot规范、并且支持分布式部署的Java爬虫引擎,能够最大程度的提高一个爬虫新手构建一个高可用性、高性能的爬虫应用的门槛,并且提升开发爬虫系统的开发效率,只需要具备一些简单的网页解析语法同时遵循j2crawler少量开发约束即可。
- **Primary Language**: Java
- **License**: AGPL-3.0
- **Default Branch**: master
- **Homepage**: https://gitee.com/romantichjw/jplogiccloud
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 2
- **Created**: 2020-04-30
- **Last Updated**: 2022-03-31
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# j2crawler
#### 一、简介
j2crawler是一个通用的、最小化依赖第三方组件、灵活扩展组件、开箱即用,简单易用性、支持目前主流的通用的解析语法、灵活多变的实时/离线抓取方式、遵循Springboot规范、并且支持分布式部署的Java爬虫引擎,能够最大程度的提高一个爬虫新手构建一个高可用性、高性能的爬虫应用的门槛,并且提升开发爬虫系统的开发效率,只需要具备一些简单的网页解析语法同时遵循j2crawler少量开发约束即可。
#### 二、爬虫引擎特性:
* 抓取请求灵活定制(定制请求参数、抓取上下文、Cookies、Header)
* 定制抓取任务正则匹配URL白名单/黑名单列表;
* 抓取失败重试机制;
* 最小化依赖第三方组件;
* 灵活扩展各个内部组件;
* 开箱即用,简单易用性;
* 支持目前主流的通用的解析语法;
* 灵活多变的实时/离线抓取方式;
* 遵循Springboot规范;
* 只需要遵循引擎极少约束即可应用应用至生产环境;
* 整个引擎需要环境和依赖已完成镜像打包;
* 支持简单静态页面抓取;
* 复杂的动态渲染(浏览器级别)抓取(模拟浏览器级别操作行为以及复杂渲染的数据抓取);
* Web自动化测试;
#### 三、引擎架构
J2crawler爬虫引擎架构图:

J2crawler爬虫引擎内部组件架构图:

Java微信公众号文章抓取实例:

抓取的公众号文章展示:
#### 四、Quik Start
1. 添加starter依赖
```javascript
com.saas.jplogiccloud
jplogiccloud-starter-j2crawler
```
2. 在springboot应用配置实例demo
按照引擎的规范创建FetchJob即可(具体原理详见以上架构图),引擎启动时自动添加Job到引擎上下文中并按照自己的定制调度该FetchJob;
```java
package com.saas.jplogiccloud.crawler.jobs;
import com.saas.jplogiccloud.starter.j2crawler.annotation.FetchJob;
import com.saas.jplogiccloud.starter.j2crawler.core.*;
import lombok.extern.slf4j.Slf4j;
import java.util.ArrayList;
import java.util.List;
@FetchJob(fetchTimeOut = 60000, jobName = "demoFetchJob")
@Slf4j
public class DemoFetchJob extends BaseFetchJob {
@Override
public List initFetchReqs() {
List fetchReqs = new ArrayList<>();
FetchReq fetchReq = FetchReq.builder()
.reqUrl("http://www.ip3366.net/?stype=1&page=1")
.onFetchBack("onFetch")
.fetcherType(FetcherType.WEBDRIVER)
.build();
fetchReqs.add(fetchReq);
return fetchReqs;
}
@Override
public String[] initFetchUrls() {
return null;
}
@Override
public void onFetch(FetchResp resp) {
try {
} catch (Exception e) {
log.info(">>>> demoFetchJob-> 抓取数据异常:{}", e.getMessage());
e.printStackTrace();
}
}
private void getCloudProxyIp(FetchResp resp, JXDocument doc) {
}
}
```
3. 配置springboot引擎配置application.yml
```java
j2crawler:
application:
enabled: true
jobnames: "poxyIpFetchJob"
threadunit: 2
driver:
driverKey: "webdriver.chrome.driver"
driverPath: "C://Users//Administrator//AppData//Local//Google//Chrome//Application//chromedriver.exe"
```
剩下的就是springboot应用的其他配置了,在这里省略;
#### 五、爬虫实例Demo
1、PoxyIpFetchJob ===> 免费代理IP抓取;



2、NCoVFetchJob ===> 2019NCov新型冠状疫情信息实时抓取;





3、CsdnBlogFetchJob ===> 我的博客信息实时抓取;

4、PicShowFetchJob ===> 博客头像实时抓取;


以上案例服务清单列表:

#### 五、技术群交流

#### 六、其他交流
* 我的csdn博客地址:https://blog.csdn.net/romantichjwhjwhjw/
* 我的gitee地址:https://gitee.com/romantichjw