分享一个Java爬虫实战,全网博文爬取
程序员书单
共 2722字,需浏览 6分钟
· 2020-10-31
简介
一键爬取
<dependency>
<groupId>com.kotcrab.remarkgroupId>
<artifactId>remarkartifactId>
<version>1.2.0version>
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
/**
* 爬取-爪哇笔记
* 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];
}
}
预览
小结
— 【 THE END 】— 本公众号全部博文已整理成一个目录,请在公众号里回复「m」获取! 3T技术资源大放送!包括但不限于:Java、C/C++,Linux,Python,大数据,人工智能等等。在公众号内回复「1024」,即可免费获取!!
评论
【送书福利】《Java面试八股文:高频面试题与求职攻略一本通》
先来唠唠最近粉丝面试回来跟我聊天,基本上都提到一个点,在面试过程中八股文占比很高(八股文70%、项目20%、10%算法)除了一些搞算法突出的厂除外。其实现在很多厂八股都是逐渐深入的方式来问,所以大家在学习的过程中,针对一些重点的内容,最好深入去学习,不然还是比较难应对这种追问式的问题。最近刚好从一位
Java后端技术
0
盘点一个使用超级鹰识别验证码并自动登录的案例
点击上方“Python共享之家”,进行关注回复“资源”即可获赠Python学习资料今日鸡汤江上几人在,天涯孤棹还。大家好,我是皮皮。一、前言前几天在Python钻石交流群【静惜】问了一个Python实现识别验证码并自动登录的问题,提问截图如下:验证码的截图如下所示:二、实现过程这里大家激烈的探讨,【
IT共享之家
0
Eiten 一个构建投资组合的好帮手
Eiten是Tradytics的一个开源工具包,它实现了各种统计和算法投资策略,如Eigen组合、最小方差组合、最大夏普比率组合和基于遗传算法的组合。Eiten允许你用自己的股票组合建立自己的投资组合。Eiten中自带的严格测试框架使你能够对你的投资组合更有自信。1.准备开始之前,你要确保Pytho
Python实用宝典
0
delorean,一个超级实用的 Python 库!
作者通常周更,为了不错过更新,请点击上方“Python碎片”,“星标”公众号大家好,今天为大家分享一个超级实用的 Python 库 - delorean。Github地址:https://github.com/myusuf3/delorean/时间在计算机科学和软件开发中是一个至关重要的概念。Pyt
Python 碎片
0
【每周一课#06】MidJourney应用实战
#AI绘画# #MJ# #文生图#时间:4月24日周三 21:00课程大纲:1、关于AIGC:概念、发展历程、就业前景2、MJ基础认识:如何使用、底层逻辑、MJ与SD优缺点比较3、MJ基础功能介绍:任务指令、后缀参数、图生图、图生文、垫图、局部修改等4、MJ应用场景与变现方向
Python涨薪研究所
0
高并发实战案例 100 讲,已更新24节,即将涨价,抓紧了
大家好,我是路人。本人亲自录制的《Java 高并发 & 微服务 & 性能调优实战案例 100 讲》已发布了 24 个课时,干货满满。59元,一杯咖啡的价格,100个实战案例,即将涨价到 99,需要的小伙伴速度啦,文末附下单方式。已发布 24 个课时1、SpringBoot实
路人甲Java
0
【每周一课#06】MidJourney 应用实战
#AI绘画# #MJ# #文生图#时间:4月24日周三 21:00课程大纲:1、关于AIGC:概念、发展历程、就业前景2、MJ基础认识:如何使用、底层逻辑、MJ与SD优缺点比较3、MJ基础功能介绍:任务指令、后缀参数、图生图、图生文、垫图、局部修改等4、MJ应用场景与变现方向
Python涨薪研究所
0