点击▲关注 “爪哇笔记” 给公众号标星置顶
更多摄影技巧 第一时间直达
其实Java也可以做爬虫,虽然没有Python辣么强大,但是基本的功能还是没有问题的。本文将介绍一键爬取文章内容并保存入库。
配置文件引入:
<!--HTML 转 MD 内置 jsoup--> <dependency> <groupId>com.kotcrab.remark</groupId> <artifactId>remark</artifactId> <version>1.2.0</version> </dependency>创建爬虫基础配置表,用于匹配相关博客元素:
CREATE TABLE `app_blog_crawl` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '自增主键', `type` VARCHAR(255) NOT NULL COMMENT '类型', `url` VARCHAR(255) NOT NULL COMMENT '网址', `title` VARCHAR(255) NOT NULL COMMENT '标题元素', `content` VARCHAR(255) NOT NULL COMMENT '内容元素', `gmt_create` DATETIME NOT NULL COMMENT '创建时间', `gmt_modified` DATETIME NOT NULL COMMENT '修改时间', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8后台抓取并把富文本转为MD格式:
/** * 爬取-爪哇笔记 * 1)获取数据库配置 * 2)根据数据库配置读取文章相关元素 * 3)富文本转MD,并返回前端实体内容 * 源码:https://gitee.com/52itstyle/SPTools * @param url * @return */ @RequestMapping("crawl") public Result crawl(String url) { try { String domain = JsoupUtils.getDomain(url); String nativeSql = "SELECT * FROM app_blog_crawl WHERE url = ?"; AppBlogCrawl crawl = dynamicQuery.nativeQuerySingleResult(AppBlogCrawl.class,nativeSql,new Object[]{domain}); if(crawl!=null){ Document document = JsoupUtils.getDocument(url); String title = document.select(crawl.getTitle()).text(); String content = document.select(crawl.getContent()).html(); Remark remark = new Remark(); String markdown = remark.convertFragment(content); AppBlog blog = new AppBlog(); blog.setTitle(title); blog.setContent(markdown); blog.setUrl(url); return Result.ok(blog); }else{ return Result.error("目前暂不支持此网站抓取"); } } catch (Exception e) { return Result.error("抓取异常"); } }工具类:
/** * 工具类 */ public class JsoupUtils { /** * 获取 document * @param url * @return * @throws IOException */ public static Document getDocument(String url) throws IOException { Document document = Jsoup.connect(url) .timeout(100000) .ignoreContentType(true) .userAgent("Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36") .get(); return document; } /** * 获取域名 * @param url * @return */ public static String getDomain(String url) { return url.split("/")[0]+"//"+url.split("/")[2]; } }其实目前不少社区都对个人博客或者微信公众号做了同步功能,比如腾讯云社区、云栖社区、开源中国以及国内最大的某社区。如果大家觉得不过瘾,也可以实现更多有趣的功能,比如定时抓取指定日期、指定关键词的博文。
分享一个漂亮的后台 admin 前端模板
牛!一个比传统数据库快 100-1000 倍的数据库
一个基于SpringBoot的文档上传、转换、预览项目
一个基于 SpringBoot + MybatisPlus 的商城系统
一个基于 SpringBoot 2.x 实现的私人网盘项目源码
开源一个 SpringBoot 2.x 实现的精美博客项目源码
博客
1. 首先扫描下方二维码
2. 后台回复「777」即可获取
你点的每个在看,我都认真当成了喜欢