摘要:最近在學(xué)習(xí),光看官方文檔比較枯燥,于是想用一個(gè)項(xiàng)目把各種框架和技術(shù)串聯(lián)起來(lái),思來(lái)想去覺(jué)得爬蟲(chóng)是一個(gè)不錯(cuò)的。大概思路是這樣固定頻率去爬取新浪財(cái)經(jīng)的頭條新聞,爬到的標(biāo)題和鏈接以方式推到的中,再通過(guò)消費(fèi),在中查看。
最近在學(xué)習(xí)springboot,光看官方文檔比較枯燥,于是想用一個(gè)項(xiàng)目把各種框架和技術(shù)串聯(lián)起來(lái),思來(lái)想去覺(jué)得爬蟲(chóng)是一個(gè)不錯(cuò)的idea。
大概思路是這樣:固定頻率去爬取新浪財(cái)經(jīng)的頭條新聞,爬到的標(biāo)題和鏈接以json方式推到kafka的topic中,再通過(guò)ELK消費(fèi),在kibana中查看。
首先通過(guò)Spring Initializr下載一個(gè)demo工程,選擇我們需要的依賴包,jsoup的包需要額外添加。
引入到idea中,修改pom文件,加入jsoup依賴,由于習(xí)慣了使用jetty作為web容器,所以把tomcat踢掉,引入jetty的依賴,為了方便處理json,引入fastjson依賴。
quartz的使用可以參考官網(wǎng)文檔,這里我們通過(guò)mysql來(lái)持久化定時(shí)任務(wù)相關(guān)信息,涉及到mysql,順便把mybatis和druid依賴也一起引入。
quartz相關(guān)表的sql在官網(wǎng)的demo里可以找到,這里就略過(guò),假設(shè)表已建好。springboot提供了很好的quartz支持,自動(dòng)配置了一個(gè)Scheduler,直接Autowired就可以使用,我們新建一個(gè)Service,在系統(tǒng)啟動(dòng)的時(shí)候啟動(dòng)爬取新聞的定時(shí)任務(wù),代碼如下:
假設(shè)每30分鐘爬取一次,我們還需要一個(gè)Job實(shí)現(xiàn)類,來(lái)完成具體的爬取任務(wù),也可以通過(guò)不同的job來(lái)分別爬取,這里就不展開(kāi)了。Job實(shí)現(xiàn)類如下:
在爬網(wǎng)頁(yè)之前先看一下每個(gè)頁(yè)面的結(jié)構(gòu),以新浪財(cái)經(jīng)為例,地址:https://finance.sina.com.cn/,查看頁(yè)面結(jié)構(gòu)可以發(fā)現(xiàn),我們需要的頭條新聞都在“m-hdline”這個(gè)class的a標(biāo)簽下,jsoup的使用比較簡(jiǎn)單,根據(jù)需要查找對(duì)應(yīng)的文檔就可以了,直接上代碼:
接下來(lái)需要將獲取到的數(shù)據(jù)發(fā)到kafka的topic中,我的win10是家庭版,天生不帶docker,我又懶得折騰toolbox,于是搞了個(gè)自帶的ubuntu虛擬機(jī),直接下載kafka安裝,然后創(chuàng)建一個(gè)topic:financenews。這時(shí)候可以將kafka的信息配置在我們的工程中,如下:
springboot也貼心的為我們準(zhǔn)備了KafkaTemplate,Autowired即可。這里我們還沒(méi)有搭建好elk,可以使用直接監(jiān)聽(tīng)定時(shí)任務(wù)發(fā)送到的topic中的消息是否正常。
最后在job中添加發(fā)送消息到kafka的處理:
代碼到這里基本差不多了,下面我們啟動(dòng)應(yīng)用看看效果:
成功。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/36031.html
摘要:最近在學(xué)習(xí),光看官方文檔比較枯燥,于是想用一個(gè)項(xiàng)目把各種框架和技術(shù)串聯(lián)起來(lái),思來(lái)想去覺(jué)得爬蟲(chóng)是一個(gè)不錯(cuò)的。大概思路是這樣固定頻率去爬取新浪財(cái)經(jīng)的頭條新聞,爬到的標(biāo)題和鏈接以方式推到的中,再通過(guò)消費(fèi),在中查看。 最近在學(xué)習(xí)springboot,光看官方文檔比較枯燥,于是想用一個(gè)項(xiàng)目把各種框架和技術(shù)串聯(lián)起來(lái),思來(lái)想去覺(jué)得爬蟲(chóng)是一個(gè)不錯(cuò)的idea。 大概思路是這樣:固定頻率去爬取新浪財(cái)經(jīng)的頭...
摘要:三實(shí)踐案例案例簡(jiǎn)介分布式系統(tǒng)中,微服務(wù)基礎(chǔ)組件等,系統(tǒng)中間件,等,對(duì)常用功能配置等,進(jìn)行二次淺封裝并統(tǒng)一集成管理,以滿足日常開(kāi)發(fā)中基礎(chǔ)環(huán)境搭建與臨時(shí)工具的快速實(shí)現(xiàn)。 一、背景簡(jiǎn)介 分布式系統(tǒng)中存在很多拆分的服務(wù),在不斷迭代升級(jí)的過(guò)程中,會(huì)出現(xiàn)如下常見(jiàn)的棘手情況: 某個(gè)技術(shù)組件版本升級(jí),依賴包升級(jí)導(dǎo)致部分語(yǔ)法或者API過(guò)期,或者組件修復(fù)緊急的問(wèn)題,從而會(huì)導(dǎo)致分布式系統(tǒng)下各個(gè)服...
摘要:本文使用實(shí)現(xiàn)對(duì)定時(shí)任務(wù)的增刪改查啟用停用等功能。并把定時(shí)任務(wù)持久化到數(shù)據(jù)庫(kù)以及支持集群。決定什么時(shí)候來(lái)執(zhí)行任務(wù)。定義的是任務(wù)數(shù)據(jù),而真正的執(zhí)行邏輯是在中。封裝定時(shí)任務(wù)接口添加一個(gè)暫?;謴?fù)刪除修改暫停所有恢復(fù)所有 簡(jiǎn)介 Quartz是一款功能強(qiáng)大的任務(wù)調(diào)度器,可以實(shí)現(xiàn)較為復(fù)雜的調(diào)度功能,如每月一號(hào)執(zhí)行、每天凌晨執(zhí)行、每周五執(zhí)行等等,還支持分布式調(diào)度。本文使用Springboot+Myba...
摘要:而我這里定時(shí)任務(wù)的觸發(fā)是要通過(guò)接口的方式來(lái)觸發(fā),所以只用實(shí)現(xiàn)以下的調(diào)度器即可。我這里簡(jiǎn)單說(shuō)下任務(wù)的調(diào)度器,具體的任務(wù)類,觸發(fā)器,任務(wù)什么時(shí)候執(zhí)行是由它決定的。遇到的坑解決方式這個(gè)是因?yàn)椴患嫒莸膯?wèn)題,所以使用是不會(huì)出現(xiàn)這個(gè)錯(cuò)誤的。 實(shí)現(xiàn)定時(shí)任務(wù)的幾種方式: 1.使用linux的crontab 優(yōu)點(diǎn): 1.使用方式很簡(jiǎn)單,只要在crontab中寫(xiě)好 2.隨時(shí)可以修改,不需要...
閱讀 1909·2021-11-25 09:43
閱讀 1556·2021-09-02 15:21
閱讀 3522·2019-08-30 15:52
閱讀 1557·2019-08-30 12:48
閱讀 1372·2019-08-30 10:57
閱讀 2989·2019-08-26 17:41
閱讀 741·2019-08-26 11:59
閱讀 1427·2019-08-26 10:41