小工具      在线工具  汉语词典  css  js  c++  java

利用Spring Boot WebMagic MyBatis 爬数据并存入mysql

Java 额外说明

收录于:42天前

1.WebMagic简介

webmagic是一个开源的Java垂直爬虫框架,目标是简化爬虫的开发流程,让开发者专注于逻辑功能的开发。webmagic的核心非常简单,但是覆盖爬虫的整个流程,也是很好的学习爬虫开发的材料。见官网http://webmagic.io/

2. 快速启动

Webmagic 使用 Maven 来管理依赖关系。项目中添加相应的依赖即可使用webmagic:

<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-core</artifactId>
    <version>0.7.4</version>
</dependency>
<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.4</version>
</dependency>

WebMagic 使用 slf4j-log4j12 作为 slf4j 的实现。如果您自己自定义slf4j的实现,请在项目中去掉这个依赖。

<dependency>
    <groupId>us.codecraft</groupId>
    <artifactId>webmagic-extension</artifactId>
    <version>0.7.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
    </exclusions>
</dependency>

3、爬取数据(springBoot+mybatis+webMagic)并存入数据库

1. controller层代码如下,然后通过http://localhost:8090/robinBootApi/crawlData/crawlBookList 发起数据爬取

package com.robinbootweb.dmo.controller;

import com.robinboot.facade.CrawlFacadeService;
import com.robinboot.query.CrawlQuery;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @auther: TF12778
 * @date: 2021/1/28 14:02
 * @description:
 */
@Controller
@RequestMapping(value = "/crawlData")
public class CrawlController {

    private static Log logger = LogFactory.getLog(CrawlController.class);

    @Autowired
    CrawlFacadeService webMagicFacadeService;

    /**
     *  @auther: TF12778
     *  @date:   2021/1/27 11:15
     *  @description: http://localhost:8090/robinBootApi/crawlData/crawlDoubanMoive
     *  请求豆瓣数据
     */
    @ResponseBody
    @RequestMapping(value = "/crawlDoubanMoive", method = RequestMethod.GET)
    public void crawlDoubanMoive(CrawlQuery query) {
        webMagicFacadeService.crawlDoubanMoive(query);
    }

    /**
     *  @auther: TF12778
     *  @date:   2021/1/27 11:15
     *  @description: http://localhost:8090/robinBootApi/crawlData/crawlBookList
     *  请求全部的列表数据
     */
    @ResponseBody
    @RequestMapping(value = "/crawlBookList", method = RequestMethod.GET)
    public void crawlBookList(CrawlQuery query) {
        webMagicFacadeService.crawlBookList(query);
    }

}

2.门面层发起真实请求

这里,page.addTargetRequests()方法用于添加要爬取的URL,page.putField()用于保存提取结果。 page.getHtml().xpath()按照一定的规则提取结果。这里的提取支持链式调用。调用完成后,toString()表示转换为单个String,all()表示转换为字符串列表。

Spider是爬虫的入门类。 Pipeline是结果输出和持久化的接口。这里的bookListPipeline表示将结果存储到数据库中。

package com.robinboot.service.facade.impl;

import com.robinboot.facade.CrawlFacadeService;
import com.robinboot.query.CrawlQuery;
import com.robinboot.service.WebMagic.Book.BookDetailPipeline;
import com.robinboot.service.WebMagic.Book.BookListPipeline;
import com.robinboot.service.WebMagic.Book.LittleBookDetailProcessor;
import com.robinboot.service.WebMagic.Book.LittleBookProcessor;
import com.robinboot.service.WebMagic.DoubanMoiveProcessor;
import com.robinboot.service.WebMagic.HttpClientDownloader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import us.codecraft.webmagic.Spider;

/**
 * @auther: TF12778
 * @date: 2021/1/28 13:44
 * @description:
 */
@Service("crawlFacadeService")
public class CrawlFacadeServiceImpl implements CrawlFacadeService {

    @Autowired
    BookListPipeline bookListPipeline;

    @Autowired
    BookDetailPipeline bookDetailPipeline;

    @Autowired
    LittleBookDetailProcessor littleBookDetailProcessor;

    @Override
    public void crawlDoubanMoive(CrawlQuery query) {
        Spider.create(new DoubanMoiveProcessor())
                .setDownloader(new HttpClientDownloader())
                .addUrl("https://www.douban.com/doulist/3907668/")
//                .addPipeline(new MySqlPipeline())
                .thread(5)
                .run();
    }

    /**
     *  @auther: TF12778
     *  @date:   2021/1/27 11:13
     *  @description: http://localhost:8090/robinBootApi/user/requestBookList
     */
    @Override
    public void crawlBookList(CrawlQuery query) {
        Spider.create(new LittleBookProcessor())
                .setDownloader(new HttpClientDownloader())
                .addUrl("http://deeee.cn:8080/tcshop/1111/catalog/toyy.html?orderBy=0")
                .addPipeline(this.bookListPipeline)  //这个this很关键,否则调dao层时,到接口不能自动被容器加载
                .thread(5)
                .run();
    }
}

3.LittleBookProcessor爬虫处理类。爬虫的主要参数设置,以及URL等都在这里设置。

PageProcessor 是 webmagic-core 的一部分。您可以自定义一个PageProcessor来实现您自己的爬虫逻辑。

package com.robinboot.service.WebMagic.Book;

import com.robinboot.service.WebMagic.HttpClientDownloader;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import us.code
. . .

相关推荐

额外说明

@PostConstruct、InitializingBean、ApplicationRunner 和 CommandLineRunner 的执行顺序

在实际开发场景中,经常会遇到数据初始化的业务场景,那么如何在Spring容器启动时执行相关操作呢?比如:读取配置文件,数据库连接,数据缓存,数据预计算… 可以使用:@PostConstruct、InitializingBean、 ApplicationR

额外说明

Linux定期删除三天前的binlog日志(docker)

docker的mysql的binlog日志目录 # docker inspect bb61c3c5a7e8   shell脚本 写先一个删除的shell脚本 auto-del.sh 真正删除之前,先用下面的语句查下是不是要删除的文件,这里是删除三天前的

额外说明

java 365*24*60*60的计算时踩的坑,后面必须加L,且返回类型为long

      https://blog.csdn.net/withtony/article/details/106941613          

额外说明

作为程序员,你很有必要了解一下IVX

 一、IVX是什么 iVX 是一个“零代码”的可视化编程平台,拥有方便的在线集成开发环境,不需要下载开发环境,打开浏览器即可随时随地进行项目编辑。iVX 还拥有“一站式”的云资源,通过这一套一站式服务,iVX 可以实现一站式研发、一站式部署、一站式维护。

额外说明

软件测试前途如何?要学吗?

文章目录 1.前言 2. 什么是软件测试 3.软件测试的发展 4.软件测试和开发的区别 4.1 难易程度 4.2 工作环境 4.3 薪水问题 4.4 发展前景 4.5 技能要求 5.软件测试岗位分类 6.软件测试在公司的定位 6.1 无组织性 6.2 专

额外说明

HNU-电子测试平台与工具2-Veriog答案

这个题目很阴间,做了两次,还是只有90分,我也不知道错在哪里,怎么改。 我把两次的答案发一下,各位自己仁者见仁,智者见智。 有时间的话我再做吧。  第一次:     第二次:    

额外说明

Zookeeper 源码分析--Zookeeper启动流程(一)

Zookeeper 源码分析–Zookeeper启动流程(一) 最近学习了一下Zookeeper,怎么说呢,总起来就学到了两个概念性的名词,当然这两个名词均和一个Zookeeper的协议相关,那就是ZAB协议,来名词呈上来:崩溃恢复和消息广播。但是俗话说

额外说明

flink-connector-jdbc_2.12 简介、中文文档、中英对照文档 下载

flink-connector-jdbc_2.12 文档 下载链接(含jar包、源码、pom) 组件名称 中文-文档-下载链接 中英对照-文档-下载链接 flink-connector-jdbc_2.12-1.14.3.jar flink-connect

额外说明

Spring Boot+Vaadin 14项目初始化

Vaadin 项目类型及初始化 Vaadin提供了类似SpringBoot的项目初始化生成器,同时还提供了不同项目的入门示例,下载下来之后即可。具体的包括: Vaadin 14 - Spring Boot, 推荐的开发方式 Vaadin 14 - pla

ads via 小工具