项目作者: tianjx98

项目描述 :
一个简单的java爬虫框架,目前只完成部分,模仿python框架scrapy https://github.com/scrapy/scrapy
高级语言: Java
项目地址: git://github.com/tianjx98/Jscrapy.git
创建时间: 2019-07-21T09:04:38Z
项目社区:https://github.com/tianjx98/Jscrapy

开源协议:

下载


Jscrapy

快速使用

添加依赖

  1. <dependency>
  2. <groupId>cn.tianjx98</groupId>
  3. <artifactId>jscrapy</artifactId>
  4. <version>1.0.0</version>
  5. </dependency>
  1. import lombok.extern.log4j.Log4j2;
  2. import cn.tianjx98.jscrapy.core.Element;
  3. import cn.tianjx98.jscrapy.core.Spider;
  4. import cn.tianjx98.jscrapy.core.SpiderEngine;
  5. import cn.tianjx98.jscrapy.core.annotation.ScraperElement;
  6. import cn.tianjx98.jscrapy.http.Response;
  7. import reactor.core.publisher.Flux;
  8. @ScraperElement
  9. @Log4j2
  10. public class SimpleSpider implements Spider {
  11. @Override
  12. public String getName() {
  13. return "simpleSpider";
  14. }
  15. @Override
  16. public Flux<String> startUrls() {
  17. return Flux.just("https://www.baidu.com");
  18. }
  19. @Override
  20. public Flux<Element> parse(Response response) {
  21. System.out.println(response.getBody());
  22. return Flux.empty();
  23. }
  24. public static void main(String[] args) throws InstantiationException, IllegalAccessException {
  25. SpiderEngine.start(SimpleSpider.class);
  26. }
  27. }

数据持久化

1.定义Item

  1. @Data
  2. public class SimpleItem extends Item {
  3. String body;
  4. public SimpleItem(String body) {
  5. this.body = body;
  6. }
  7. }

2.定义Pipeline

  1. /**
  2. * 可以使用Pipeline完成数据持久化的逻辑<br>
  3. * 采用了过滤器设计模式, 可以定义多个Pipeline对数据进行处理<br>
  4. * 注意: 如果模板参数为SimpleItem, 那么这个Pipeline就只会处理类型为SimpleItem的Item
  5. *
  6. * @author tianjx98
  7. * @date 2021/11/4 15:06
  8. */
  9. @Log4j2
  10. @ScraperElement
  11. @Order(1)
  12. public class SimplePipeline implements Pipeline<SimpleItem> {
  13. @Override
  14. public void open() {
  15. // 启动时执行此方法
  16. }
  17. @Override
  18. public SimpleItem processItem(SimpleItem item, Spider spider) {
  19. log.info("SimplePipeline: " + item);
  20. // 保存数据
  21. return item;
  22. }
  23. @Override
  24. public void close() {
  25. // 结束时执行此方法
  26. }
  27. }

3.启动爬虫

  1. @ScraperElement
  2. @Log4j2
  3. public class SimpleSpider implements Spider {
  4. @Override
  5. public String getName() {
  6. return "simpleSpider";
  7. }
  8. @Override
  9. public Flux<String> startUrls() {
  10. return Flux.just("https://www.baidu.com");
  11. }
  12. @Override
  13. public Flux<Element> parse(Response response) {
  14. log.info("解析响应: {}", response);
  15. return Flux.just(new SimpleItem(response.getBody()));
  16. }
  17. public static void main(String[] args) throws InstantiationException, IllegalAccessException {
  18. SpiderEngine.start(SimpleSpider.class);
  19. }
  20. }