java爬取_分享一个Java爬虫实战,全网博文爬取

本文介绍了使用Java进行网页爬虫的实践,包括配置爬虫基础表,通过Jsoup库抓取和解析网页内容,将富文本转换为Markdown格式。提供了一个简单的后台接口用于爬取特定博客平台的文章,并展示了部分关键代码。
摘要由CSDN通过智能技术生成

原标题:分享一个Java爬虫实战,全网博文爬取

8e450af50b6162501fd1fddc074f67f8.png

简介

其实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];

}

}

预览

d2a14b245e24710b1d73312dd8890878.png

小结

其实目前不少社区都对个人博客或者微信公众号做了同步功能,比如腾讯云社区、云栖社区、开源中国以及国内最大的某社区。如果大家觉得不过瘾,也可以实现更多有趣的功能,比如定时抓取指定日期、指定关键词的博文。

责任编辑:

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值