SpringBoot任务——JSoup+定时任务 定时爬取微博热搜至数据库
SpringBoot任务——JSoup+定时任务 定时爬取微博热搜至数据库
文章目录
- SpringBoot任务——JSoup+定时任务 定时爬取微博热搜至数据库
- 0.前言
- 1.导入JSoup依赖
- 2.测试爬取微博热搜
- 3. 配合定时任务注解实现定时爬取至数据库
- 3.1 导入依赖与配置MySQL
- 3.2 热搜实体类与对应的数据表
- 3.3 使用MyBatisPlus写实体类对应的Mapper
- 3.4 @Scheduled注解实现定时执行爬取
- 3.5 @EnableScheduling注解开启定时任务
- 3.6 运行走起
0.前言
截至本文写完:
- 微博热搜的网址为:https://s.weibo.com/top/summary 如有变化,自行百度微博热搜。
- HTML源码中,热搜数据在table标签中,而且第一个置顶的热搜没有热度。有时候还有推荐(应该是广告)
- 刷新后可能会有不同结果,几率还挺大,我也是服了。
如下图所示:
1.导入JSoup依赖
<!-- jsoup HTML解析库 --><!-- https://mvnrepository.com/artifact/org.jsoup/jsoup --><dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.13.1</version></dependency>
2.测试爬取微博热搜
微博热搜的网址: https://s.weibo.com/top/summary
Ctrl+U查看HTML源码,可知热搜数据以table显示,Jsoup爬取table标签中的内容,搜索一下便可…
我是参考这篇博客:[Java jsoup table 中获取td和tr]( http://www.yq1012.com/myweb/2162.html )
由此可知爬取table标签中的内容还是很简单的,在测试类中试试,代码加注释如下:
@Testvoid TestCrawlingHotSearch() {try {String urlStr = "https://s.weibo.com/top/summary";final Document doc = Jsoup.connect(urlStr).get();//获取htmlElements trs = doc.select("tbody").select("tr");//获取tbody下的所有tr下的html内容for (org.jsoup.nodes.Element tr : trs) {Elements tds = tr.select("td");String rank = tds.get(0).text();//排名String num = tds.get(1).select("span").text();//热度指数String title = tds.get(1).select("a").text();//热搜标题String url = tds.get(1).select("a").attr("href");//热搜URL网址(相对地址)String baseurl = "https://s.weibo.com";//和上述url组成完整可访问的单个热搜URL//以 排名+热搜标题+热搜指数+有效URL的形式输出System.out.println(rank + " " + title + " " + num + " " + baseurl + url);}} catch (IOException e) {e.printStackTrace();}}
测试结果如下:2020.03.02 21点44分爬取的微博热搜:热搜榜上只有50条,最上面的是置顶的,没有热搜指数。接下来的定时任务中把这个去掉,那个for循环从1开始即可。
28个省份恢复省际省内道路客运 https://s.weibo.com/weibo?q=%2328%E4%B8%AA%E7%9C%81%E4%BB%BD%E6%81%A2%E5%A4%8D%E7%9C%81%E9%99%85%E7%9C%81%E5%86%85%E9%81%93%E8%B7%AF%E5%AE%A2%E8%BF%90%23&Refer=new_time
1 孙杨公布完整血样瓶 6140146 https://s.weibo.com/weibo?q=%23%E5%AD%99%E6%9D%A8%E5%85%AC%E5%B8%83%E5%AE%8C%E6%95%B4%E8%A1%80%E6%A0%B7%E7%93%B6%23&Refer=top
2 高鑫去口罩厂做义工 3514533 https://s.weibo.com/weibo?q=%23%E9%AB%98%E9%91%AB%E5%8E%BB%E5%8F%A3%E7%BD%A9%E5%8E%82%E5%81%9A%E4%B9%89%E5%B7%A5%23&Refer=top
3 韩国新冠肺炎定点医院16名护士辞职 2636260 https://s.weibo.com/weibo?q=%23%E9%9F%A9%E5%9B%BD%E6%96%B0%E5%86%A0%E8%82%BA%E7%82%8E%E5%AE%9A%E7%82%B9%E5%8C%BB%E9%99%A216%E5%90%8D%E6%8A%A4%E5%A3%AB%E8%BE%9E%E8%81%8C%23&Refer=top
4 余文乐 2355872 https://s.weibo.com/weibo?q=%E4%BD%99%E6%96%87%E4%B9%90&Refer=top
5 偶像失声 2011436 https://s.weibo.com/weibo?q=%E5%81%B6%E5%83%8F%E5%A4%B1%E5%A3%B0&Refer=top
6 马云回赠日本100万只口罩 1627005 https://s.weibo.com/weibo?q=%23%E9%A9%AC%E4%BA%91%E5%9B%9E%E8%B5%A0%E6%97%A5%E6%9C%AC100%E4%B8%87%E5%8F%AA%E5%8F%A3%E7%BD%A9%23&Refer=top
....
其实关于热搜的爬取到这就没了,后面其实就是加了springboot中的定时任务和MybatisPlus实现了定时爬取热搜至数据库。
关于定时任务和MybatisPlus简单整合可查看:
SpringBoot任务——定时任务
SpringBoot数据访问——整合MybatisPlus
3. 配合定时任务注解实现定时爬取至数据库
3.1 导入依赖与配置MySQL
这里用到了lombok插件+MybatisPlus+MySQL,导入相关依赖:
<!-- MySQL驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!-- Lombok插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- mybatis-plus 启动器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.1.tmp</version></dependency>
在application.proterties或者新建一个application.yml配置文件,配置MySQL数据源:
默认的application.proterties
#mysql数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://*.*.*.*:3306/数据库名称
spring.datasource.username=账号
spring.datasource.password=密码
yml格式:
#mysql数据源配置
spring:datasource:username: 账号password: 密码url: jdbc:mysql://*.*.*.*:3306/数据库名称driver-class-name: com.mysql.jdbc.Driver
3.2 热搜实体类与对应的数据表
简单方便起见,这里都用了字符串类型…我太懒了
实体类:
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//id 时间 排名 热搜标题 热搜指数 有效URL
@Data
@AllArgsConstructor
@NoArgsConstructor
public class HotSearch {String id;//UUID生成String date;//时间格式:yyyy-MM-dd HH:mm:ssString rank;String title;String number;String url;
}
数据表:
3.3 使用MyBatisPlus写实体类对应的Mapper
使其具备基本的CRUD功能。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.piao.springboot_scheduled_jsoup.Entity.HotSearch;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface HotSearchMapper extends BaseMapper<HotSearch> {}
3.4 @Scheduled注解实现定时执行爬取
在之前的基础上加了时间和ID,通过hotSearchMapper将数据插入数据当中。
@Service
public class MyJSoupService {@ResourceHotSearchMapper hotSearchMapper;//定时爬取微博热搜 每天中午12点爬@Scheduled(cron ="0 50 22 * * *")public void CrawlingHotSearch() {try {String urlStr = "https://s.weibo.com/top/summary";final Document doc = Jsoup.connect(urlStr).get();Elements trs = doc.select("tbody").select("tr");for (int i = 1; i < trs.size(); i++) {Elements tds = trs.get(i).select("td");String rank = tds.get(0).text();//排名String num = tds.get(1).select("span").text();//热度指数String title = tds.get(1).select("a").text();//标题String url = tds.get(1).select("a").attr("href");//热搜详细(标题+热度)String baseurl="https://s.weibo.com";//基址//时间SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式String date = df.format(new Date());// new Date()为获取当前系统时间,也可使用当前时间戳//idString hotSearchId= UUID.randomUUID()+"";//以 id+时间+排名+热搜标题+热搜指数+有效URL的形式输出System.out.println("id:"+hotSearchId+" 时间"+date+" 排名"+rank+" 标题"+title+" 热搜指数"+num+" 有效URL"+baseurl+url);hotSearchMapper.insert(new HotSearch(hotSearchId,date,rank,title,num,baseurl+url));//插入单条热搜数据}} catch (IOException e) {e.printStackTrace();}}
}
3.5 @EnableScheduling注解开启定时任务
别忘了使用@EnableScheduling注解标注在类上开启定时任务,这里标注在的启动类上:
@EnableScheduling
@SpringBootApplication
@MapperScan("com.piao.springboot_scheduled_jsoup.mapper")
public class SpringbootScheduledJsoupApplication {public static void main(String[] args) {SpringApplication.run(SpringbootScheduledJsoupApplication.class, args);}}
3.6 运行走起
我测试把时间调为22.52执行了,结果如下:
控制台正常输出:
数据库正常写入50条热搜数据:
SpringBoot任务——JSoup+定时任务 定时爬取微博热搜至数据库相关推荐
- python爬取微博热搜写入数据库_python实现爬取微博热搜存入Mysql
python爬取微博热搜存入Mysql最终的效果 使用的库 目标分析 一:得到数据 二:链接数据库 总代码 最终的效果 废话不多少,直接上图 这里可以清楚的看到,数据库里包含了日期,内容,和网站lin ...
- 使用 Nodejs 实现定时爬取微博热搜榜
The summer is coming " 我知道,那些夏天,就像青春一样回不来.- 宋冬野 青春是回不来了,倒是要准备渡过在西安的第三个夏天了. 看完本文的收获 ctrl + c ctr ...
- python每天定时爬取微博热搜并保存到本地(表格、数据库)
微博热搜网站:https://s.weibo.com/top/summary/ 就是这个样子: pyquery提取: 保险起见headers里加个UA- from pyquery import PyQ ...
- python爬取微博热搜写入数据库_python爬虫爬取微博热搜
[实例简介] [实例截图] [核心代码] import requests #数据抓取库 from lxml import etree #数据解析库 imp ...
- Python爬取微博热搜并定时发送邮件,及时了解最新动态!
一.前言 微博热搜榜每天都会更新一些新鲜事,但是自己处于各种原因,肯定不能时刻关注着微博,为了与时代接轨,接受最新资讯,就寻思着用Python写个定时爬取微博热搜的并且发送QQ邮件的程序,这样每天可以 ...
- python爬取微博热搜数据并保存!
主要用到requests和bf4两个库将获得的信息保存在d://hotsearch.txt下importrequests;importbs4mylist=[]r=requests.get(ur- 很多 ...
- 爬取微博热搜并发送提醒(邮件和server酱)
爬取微博热搜并发送提醒 写在前面 用到的包 全局变量 爬取数据 发送邮件 开始任务 发起推送 入口函数 定时提醒 注意事项 结果展示 请参考以下内容 写在前面 今天在CSDN看到了一篇爬取微博热搜并发 ...
- 利用python爬取微博热搜并进行数据分析
爬取微博热搜 import schedule import pandas as pd from datetime import datetime import requests from bs4 im ...
- Python爬取微博热搜数据之炫酷可视化
可视化展示 看完记得点个赞哟 微博炫酷可视化音乐组合版来了! 项目介绍 背景 现阶段,微博.抖音.快手.哗哩哗哩.微信公众号已经成为不少年轻人必备的"生活神器".在21世纪的今天, ...
- python 爬虫热搜_Python网络爬虫之爬取微博热搜
微博热搜的爬取较为简单,我只是用了lxml和requests两个库 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在 的子节点里 (2)热搜的排名都在 ...
最新文章
- String spilt时转义特殊字符【转】
- go语言笔记——还是大爱的我的python,开发效果高,tornado的性能也很不错
- SpringBoot(11)---特性_SpringApplication类(自定义Banner)
- 少数民族预科计算机基础教材答案,少数民族预科高等数学(普通高等学校少数民族预科教材)...
- Ubuntu16.0.4 通过Docker安装酷Q
- ARM指令集与Thumb指令集与Thumb-2指令集的区别
- 计算机串口接打印机并口,电子连接系统上的串口和并口知识分享
- 你眼中的程序员是什么样子的?
- 初中计算机数学,初中数学
- 基于HTML旅游酒店主题网页项目的设计与实现——度假酒店预订网站(5页面)HTML+CSS+JavaScript...
- DS_Store是什么?
- oracle 的dual是什么东西
- Hadoop实战之workcount
- LockSupport的park/unpark分析
- 动手制作QQ找茬游戏外挂
- html5文字中加图片,5、手写HTML语言代码之《在文字中加条横线、插入图片》学习网页制作的心得体会...
- 什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
- Windows7农行网银页面无法显示问题的解决方法
- 微信小程序样式三角形搭建
- 13.mysql-修改表名
热门文章
- 【opencv4】——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
- 这个游戏引擎开源了!
- ORACLE递归_ 树形遍历查询根节点、父节点、子节点_002
- 实验十四:雨滴传感器实验
- 一些爱不释手的 Chrome 插件
- UE4运行时交互工具框架
- EXCEL 数据透视表的简单使用
- 蓝桥杯官网题库【简单题解析】持续更新
- chrome frame节点 取_Chrome Frame插件解决IE浏览器兼容问题
- PJzhang:kali linux安装网易云音乐、Visual Studio Code、skype