springboot+quartz+jsoup+kafka

最近在学习springboot,光看官方文档比较枯燥,因而想用一个项目把各类框架和技术串联起来,思来想去以为爬虫是一个不错的idea。mysql

大概思路是这样:固定频率去爬取新浪财经的头条新闻,爬到的标题和连接以json方式推到kafka的topic中,再经过ELK消费,在kibana中查看。web

首先经过Spring Initializr下载一个demo工程,选择咱们须要的依赖包,jsoup的包须要额外添加。spring

image

引入到idea中,修改pom文件,加入jsoup依赖,因为习惯了使用jetty做为web容器,因此把tomcat踢掉,引入jetty的依赖,为了方便处理json,引入fastjson依赖。sql

image

quartz的使用能够参考官网文档,这里咱们经过mysql来持久化定时任务相关信息,涉及到mysql,顺便把mybatis和druid依赖也一块儿引入。docker

image

quartz相关表的sql在官网的demo里能够找到,这里就略过,假设表已建好。springboot提供了很好的quartz支持,自动配置了一个Scheduler,直接Autowired就可使用,咱们新建一个Service,在系统启动的时候启动爬取新闻的定时任务,代码以下:json

image

假设每30分钟爬取一次,咱们还须要一个Job实现类,来完成具体的爬取任务,也能够经过不一样的job来分别爬取,这里就不展开了。Job实现类以下:ubuntu

image

在爬网页以前先看一下每一个页面的结构,以新浪财经为例,地址:https://finance.sina.com.cn/,查看页面结构能够发现,咱们须要的头条新闻都在“m-hdline”这个class的a标签下,jsoup的使用比较简单,根据须要查找对应的文档就能够了,直接上代码:tomcat

image

接下来须要将获取到的数据发到kafka的topic中,个人win10是家庭版,天生不带docker,我又懒得折腾toolbox,因而搞了个自带的ubuntu虚拟机,直接下载kafka安装,而后建立一个topic:financenews。这时候能够将kafka的信息配置在咱们的工程中,以下:springboot

image

springboot也贴心的为咱们准备了KafkaTemplate,Autowired便可。这里咱们尚未搭建好elk,可使用直接监听定时任务发送到的topic中的消息是否正常。mybatis

image

最后在job中添加发送消息到kafka的处理:

image

代码到这里基本差很少了,下面咱们启动应用看看效果:

image

image

成功。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息