springboot+quartz+jsoup+kafka

最近在學習springboot,光看官方文檔比較枯燥,於是想用一個項目把各種框架和技術串聯起來,思來想去覺得爬蟲是一個不錯的idea。

大概思路是這樣:固定頻率去爬取新浪財經的頭條新聞,爬到的標題和鏈接以json方式推到kafka的topic中,再通過ELK消費,在kibana中查看。

首先通過Spring Initializr下載一個demo工程,選擇我們需要的依賴包,jsoup的包需要額外添加。

image

引入到idea中,修改pom文件,加入jsoup依賴,由於習慣了使用jetty作爲web容器,所以把tomcat踢掉,引入jetty的依賴,爲了方便處理json,引入fastjson依賴。

image

quartz的使用可以參考官網文檔,這裏我們通過mysql來持久化定時任務相關信息,涉及到mysql,順便把mybatis和druid依賴也一起引入。

image

quartz相關表的sql在官網的demo裏可以找到,這裏就略過,假設表已建好。springboot提供了很好的quartz支持,自動配置了一個Scheduler,直接Autowired就可以使用,我們新建一個Service,在系統啓動的時候啓動爬取新聞的定時任務,代碼如下:

image

假設每30分鐘爬取一次,我們還需要一個Job實現類,來完成具體的爬取任務,也可以通過不同的job來分別爬取,這裏就不展開了。Job實現類如下:

image

在爬網頁之前先看一下每個頁面的結構,以新浪財經爲例,地址:https://finance.sina.com.cn/,查看頁面結構可以發現,我們需要的頭條新聞都在“m-hdline”這個class的a標籤下,jsoup的使用比較簡單,根據需要查找對應的文檔就可以了,直接上代碼:

image

接下來需要將獲取到的數據發到kafka的topic中,我的win10是家庭版,天生不帶docker,我又懶得折騰toolbox,於是搞了個自帶的ubuntu虛擬機,直接下載kafka安裝,然後創建一個topic:financenews。這時候可以將kafka的信息配置在我們的工程中,如下:

image

springboot也貼心的爲我們準備了KafkaTemplate,Autowired即可。這裏我們還沒有搭建好elk,可以使用直接監聽定時任務發送到的topic中的消息是否正常。

image

最後在job中添加發送消息到kafka的處理:

image

代碼到這裏基本差不多了,下面我們啓動應用看看效果:

image

image

成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章