亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久

高拓展性的Java多線(xiàn)程爬蟲(chóng)框架reptile(個(gè)人開(kāi)源項目)

優(yōu)采云 發(fā)布時(shí)間: 2020-05-07 08:03

  Reptile是一個(gè)具有高拓展性的可支持單機與集群布署Java多線(xiàn)程爬蟲(chóng)框架,該框架可簡(jiǎn)化爬蟲(chóng)的開(kāi)發(fā)流程。該框架各個(gè)組件高內聚松耦合的特點(diǎn)使用戶(hù)可以對不同組件進(jìn)行訂制來(lái)滿(mǎn)足不同的需求。

  

  Reptile.png

  Reptile作為爬蟲(chóng)主體可在主線(xiàn)程運行也可以異步運行,爬蟲(chóng)主要有四個(gè)核心組件:

  Downloader 執行懇求下載與解析響應ResponseHandler 由使用者提供實(shí)現來(lái)對響應處理,生成Result結果與新的爬取懇求RequestConsumer 來(lái)對處理的結果Result進(jìn)行消費,例如持久化儲存java單機爬蟲(chóng)框架,用戶(hù)可自定義其具體實(shí)現

  四個(gè)組件之間的關(guān)系如構架圖所示,它們之間的相互調用產(chǎn)生一個(gè)完整的工作流并在Workflow線(xiàn)程中運行,Reptile爬蟲(chóng)會(huì )依照配置的線(xiàn)程數目通過(guò)線(xiàn)程池創(chuàng )建指定數目的工作流線(xiàn)程并發(fā)執行工作流任務(wù)。

  clone項目并建立發(fā)布到本地庫房

  git clone git@github.com:xiepuhuan/reptile.git

cd reptile

mvn -Dmaven.test.skip=true

  在項目中使用Maven引入對應的依賴(lài)

  <dependency>

<groupId>com.xiepuhuan</groupId>

<artifactId>reptile</artifactId>

<version>0.3</version>

</dependency>

  實(shí)現ResponseHandler插口,重寫(xiě)isSupport與handle技巧。實(shí)現Consumer插口java單機爬蟲(chóng)框架,重寫(xiě)consume方式,執行對數據的消費,可在該方式中對響應處理結果進(jìn)行持久化等操作,目前提供了ConsoleConsumer,JsonFileConsumer, MongoDBConsumer等實(shí)現,默認使用ConsoleConsumer。

  public class ZhihuPageHandler implements ResponseHandler {

private static final String[] URLS = new String[] {

"https://www.zhihu.com/api/v4/search_v3?t=general&q=java"

};

@Override

public List<Request> handle(Response response, Result result) {

Content content = response.getContent();

JSONObject jsonObject = JSON.parseObject(content.getContent(), JSONObject.class);

result.setResults(jsonObject.getInnerMap());

JSONObject paging = jsonObject.getJSONObject("paging");

if (!paging.getBoolean("is_end")) {

List<Request> requests = new ArrayList<>();

requests.add(new Request(paging.getString("next")));

return requests;

}

return null;

}

@Override

public boolean isSupport(Request request, Response response) {

return true;

}

public static void main(String[] args) {

// 構建Reptile爬蟲(chóng)配置類(lèi),

ReptileConfig config = ReptileConfig.Builder.cutom()

.setThreadCount(8)

.appendResponseHandlers(new ZhihuPageHandler())

.setDeploymentMode(DeploymentModeEnum.SINGLE)

.setConsumer(new ConsoleConsumer())

.build();

// 根據reptile配置構建Reptile爬蟲(chóng)并添加爬去的URL

Reptile reptile = Reptile.create(config).addUrls(URLS);

// 啟動(dòng)爬蟲(chóng)

reptile.start();

}

}

  分布式布署時(shí),創(chuàng )建配置類(lèi)時(shí)須要通過(guò)setDeploymentMode方式指定布署模式為DeploymentModeEnum.Distributed,并且須要通過(guò)setScheduler方式設置一個(gè)Redis隊列調度器,可以使用RedisFIFOQueueScheduler作為實(shí)現。

0 個(gè)評論

要回復文章請先登錄注冊


官方客服QQ群

微信人工客服

QQ人工客服


線(xiàn)

亚洲国产精品无码久久大片,亚洲AV无码乱码麻豆精品国产,亚洲品质自拍网站,少妇伦子伦精品无码STYLES,国产精久久久久久久