原标题:分享一个Java爬虫实战,全网博文爬取
简介
其实Java也可以做爬虫,虽然没有Python辣么强大,但是基本的功能还是没有问题的。本文将介绍一键爬取文章内容并保存入库。
一键爬取
配置文件引入:
com.kotcrab.remark
remark
1.2.0
创建爬虫基础配置表,用于匹配相关博客元素:
CREATETABLE`app_blog_crawl`(
`id`BIGINT( 20) NOTNULLAUTO_INCREMENT COMMENT'自增主键',
`type`VARCHAR( 255) NOTNULLCOMMENT'类型',
`url`VARCHAR( 255) NOTNULLCOMMENT'网址',
`title`VARCHAR( 255) NOTNULLCOMMENT'标题元素',
`content`VARCHAR( 255) NOTNULLCOMMENT'内容元素',
`gmt_create`DATETIME NOTNULLCOMMENT'创建时间',
`gmt_modified`DATETIME NOTNULLCOMMENT'修改时间',
PRIMARY KEY( `id`)
) ENGINE= INNODBAUTO_INCREMENT= 2DEFAULTCHARSET=utf8
后台抓取并把富文本转为MD格式:
/**
* 爬取-爪哇笔记
* 1)获取数据库配置
* 2)根据数据库配置读取文章相关元素
* 3)富文本转MD,并返回前端实体内容
* 源码:https://gitee.com/52itstyle/SPTools
* @param url
* @return
*/
@RequestMapping( "crawl")
public Result crawl( Stringurl) {
try{
Stringdomain = JsoupUtils.getDomain(url);
StringnativeSql = "SELECT * FROM app_blog_crawl WHERE url = ?";
AppBlogCrawl crawl =
dynamicQuery.nativeQuerySingleResult(AppBlogCrawl.class,nativeSql, newObject[]{domain});
if(crawl!= null){
Document document= JsoupUtils.getDocument(url);
Stringtitle = document.select(crawl.getTitle).text;
Stringcontent = document.select(crawl.getContent).html;
Remark remark = newRemark;
Stringmarkdown = remark.convertFragment(content);
AppBlog blog = newAppBlog;
blog.setTitle(title);
blog.setContent(markdown);
blog.setUrl(url);
returnResult.ok(blog);
} else{
returnResult.error( "目前暂不支持此网站抓取");
}
} catch(Exception e) {
returnResult.error( "抓取异常");
}
}
工具类:
/**
* 工具类
*/
publicclassJsoupUtils{
/**
* 获取 document
* @paramurl
* @return
* @throwsIOException
*/
publicstaticDocumentgetDocument(String url)throwsIOException{
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;
returndocument;
}
/**
* 获取域名
* @paramurl
* @return
*/
publicstaticStringgetDomain(String url){
returnurl.split( "/")[ 0]+ "//"+url.split( "/")[ 2];
}
}
预览
小结
其实目前不少社区都对个人博客或者微信公众号做了同步功能,比如腾讯云社区、云栖社区、开源中国以及国内最大的某社区。如果大家觉得不过瘾,也可以实现更多有趣的功能,比如定时抓取指定日期、指定关键词的博文。
责任编辑: