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

点击▲关注 “爪哇笔记”   给公众号标星置顶

更多摄影技巧 第一时间直达


简介

其实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」即可获取

你点的每个在看,我都认真当成了喜欢

如果您下载了本程序,但是该程序无法运行,或者您不会部署,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的) 爬虫(Web Crawler)是一种自动化程序,用于从互联网上收集信息。其主要功能是访问网页、提取数据并存储,以便后续分析或展示。爬虫通常由搜索引擎、数据挖掘工具、监测系统等应用于网络数据抓取的场景。 爬虫的工作流程包括以下几个关键步骤: URL收集: 爬虫一个或多个初始URL开始,递归或迭代地发现新的URL,构建一个URL队列。这些URL可以通过链接分析、站点地图、搜索引擎等方式获取。 请求网页: 爬虫使用HTTP或其他协议向目标URL发起请求,获取网页的HTML内容。这通常通过HTTP请求库实现,如Python中的Requests库。 解析内容: 爬虫对获取的HTML进行解析,提取有用的信息。常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用的存储形式包括关系型数据库、NoSQL数据库、JSON文件等。 遵守规则: 为避免对网站造成过大负担或触发反爬虫机制,爬虫需要遵守网站的robots.txt协议,限制访问频率和深度,并模拟人类访问行为,如设置User-Agent。 反爬虫应对: 由于爬虫的存在,一些网站采取了反爬虫措施,如验证码、IP封锁等。爬虫工程师需要设计相应的策略来应对这些挑战。 爬虫在各个领域都有广泛的应用,包括搜索引擎索引、数据挖掘、价格监测、新闻聚合等。然而,使用爬虫需要遵守法律和伦理规范,尊重网站的使用政策,并确保对被访问网站的服务器负责。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值