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+定时任务 定时爬取微博热搜至数据库相关推荐

  1. python爬取微博热搜写入数据库_python实现爬取微博热搜存入Mysql

    python爬取微博热搜存入Mysql最终的效果 使用的库 目标分析 一:得到数据 二:链接数据库 总代码 最终的效果 废话不多少,直接上图 这里可以清楚的看到,数据库里包含了日期,内容,和网站lin ...

  2. 使用 Nodejs 实现定时爬取微博热搜榜

    The summer is coming " 我知道,那些夏天,就像青春一样回不来.- 宋冬野 青春是回不来了,倒是要准备渡过在西安的第三个夏天了. 看完本文的收获 ctrl + c ctr ...

  3. python每天定时爬取微博热搜并保存到本地(表格、数据库)

    微博热搜网站:https://s.weibo.com/top/summary/ 就是这个样子: pyquery提取: 保险起见headers里加个UA- from pyquery import PyQ ...

  4. python爬取微博热搜写入数据库_python爬虫爬取微博热搜

    [实例简介] [实例截图] [核心代码] import requests                #数据抓取库 from lxml import etree         #数据解析库 imp ...

  5. Python爬取微博热搜并定时发送邮件,及时了解最新动态!

    一.前言 微博热搜榜每天都会更新一些新鲜事,但是自己处于各种原因,肯定不能时刻关注着微博,为了与时代接轨,接受最新资讯,就寻思着用Python写个定时爬取微博热搜的并且发送QQ邮件的程序,这样每天可以 ...

  6. python爬取微博热搜数据并保存!

    主要用到requests和bf4两个库将获得的信息保存在d://hotsearch.txt下importrequests;importbs4mylist=[]r=requests.get(ur- 很多 ...

  7. 爬取微博热搜并发送提醒(邮件和server酱)

    爬取微博热搜并发送提醒 写在前面 用到的包 全局变量 爬取数据 发送邮件 开始任务 发起推送 入口函数 定时提醒 注意事项 结果展示 请参考以下内容 写在前面 今天在CSDN看到了一篇爬取微博热搜并发 ...

  8. 利用python爬取微博热搜并进行数据分析

    爬取微博热搜 import schedule import pandas as pd from datetime import datetime import requests from bs4 im ...

  9. Python爬取微博热搜数据之炫酷可视化

    可视化展示 看完记得点个赞哟 微博炫酷可视化音乐组合版来了! 项目介绍 背景 现阶段,微博.抖音.快手.哗哩哗哩.微信公众号已经成为不少年轻人必备的"生活神器".在21世纪的今天, ...

  10. python 爬虫热搜_Python网络爬虫之爬取微博热搜

    微博热搜的爬取较为简单,我只是用了lxml和requests两个库 1.分析网页的源代码:右键--查看网页源代码. 从网页代码中可以获取到信息 (1)热搜的名字都在 的子节点里 (2)热搜的排名都在 ...

最新文章

  1. String spilt时转义特殊字符【转】
  2. go语言笔记——还是大爱的我的python,开发效果高,tornado的性能也很不错
  3. SpringBoot(11)---特性_SpringApplication类(自定义Banner)
  4. 少数民族预科计算机基础教材答案,少数民族预科高等数学(普通高等学校少数民族预科教材)...
  5. Ubuntu16.0.4 通过Docker安装酷Q
  6. ARM指令集与Thumb指令集与Thumb-2指令集的区别
  7. 计算机串口接打印机并口,电子连接系统上的串口和并口知识分享
  8. 你眼中的程序员是什么样子的?
  9. 初中计算机数学,初中数学
  10. 基于HTML旅游酒店主题网页项目的设计与实现——度假酒店预订网站(5页面)HTML+CSS+JavaScript...
  11. DS_Store是什么?
  12. oracle 的dual是什么东西
  13. Hadoop实战之workcount
  14. LockSupport的park/unpark分析
  15. 动手制作QQ找茬游戏外挂
  16. html5文字中加图片,5、手写HTML语言代码之《在文字中加条横线、插入图片》学习网页制作的心得体会...
  17. 什么是“奥卡姆剃刀”,如何用“奥卡姆剃刀”解决复杂问题?复杂问题简单化
  18. Windows7农行网银页面无法显示问题的解决方法
  19. 微信小程序样式三角形搭建
  20. 13.mysql-修改表名

热门文章

  1. 【opencv4】——fatal error: opencv2/opencv.hpp: No such file or directory #include <opencv2/opencv.hpp>
  2. 这个游戏引擎开源了!
  3. ORACLE递归_ 树形遍历查询根节点、父节点、子节点_002
  4. 实验十四:雨滴传感器实验
  5. 一些爱不释手的 Chrome 插件
  6. UE4运行时交互工具框架
  7. EXCEL 数据透视表的简单使用
  8. 蓝桥杯官网题库【简单题解析】持续更新
  9. chrome frame节点 取_Chrome Frame插件解决IE浏览器兼容问题
  10. PJzhang:kali linux安装网易云音乐、Visual Studio Code、skype