前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java爬虫+协同过滤+Springboot+vue.js实现的小说推荐系统,小说推荐平台,小说管理系统

Java爬虫+协同过滤+Springboot+vue.js实现的小说推荐系统,小说推荐平台,小说管理系统

作者头像
计算机程序优异哥
发布于 2022-05-25 08:01:13
发布于 2022-05-25 08:01:13
1.9K0
举报
文章被收录于专栏:毕设程序汇总毕设程序汇总

互联网小说资源网站非常的多,但是很多阅读资源都需要收费开会员才能阅读。因此本次毕业设计程序立足于网络爬虫技术采集互联网小说资源分析汇总至本小说推荐平台,基于用户协同过滤推荐算法对不同的用户展开个性化的小说内容推荐阅读。

一、程序设计

本次基于爬虫的小说推荐系统主要内容涉及:

主要功能模块:小说阅读推荐前端平台,小说数据管理与分析平台

主要包含技术:java爬虫,redis,springboot,mybatisplus,mysql,javascript,vue.js,html,css,HttpClient

主要包含算法及方法:Kmeans聚类,基于用户协同过滤,关键词加权计算

系统采用前后端分离的开发模式完成,小说推荐阅读前端平台主要采用Vue.js,javascript,html,CSS等技术实现。系统前后端数据交互,采用Ajax异步调用传输JSON实现。

小说推荐平台主要包括以下功能清单:

用户登录注册

首页小说推荐

热门小说推荐

小说热门排行榜

小说收藏排行榜

小说章节展示

小说在线阅读

小说推荐,点赞,收藏

小说分类阅读,小说检索

我的书架

二、效果实现

系统首页

image.png
image.png

小说详情

image.png
image.png

小说检索

image.png
image.png

章节阅读

image.png
image.png

用户登录

image.png
image.png

分类列表

image.png
image.png

后台管理

image.png
image.png

统计分析

image.png
image.png

其他效果省略

三、小说爬虫采集设计

本次毕设系统在互联网小说数据采集过程中,主要采用java实现小说基本信息+小说章节内容数据的采集,针对采集完成的小说数据按照小说类别进行归类计算,依托与玄幻小说,武侠小说,都市言情等种类划分。小说采集原网站主要来源与互联网免费小说资源网,主要的小说采集流程,如下图所示:

image.png
image.png

爬虫采集代码

代码语言:java
AI代码解释
复制
 @PostConstruct
    public void initNovelJob() {
 
        new Thread(() -> {
            logger.info("-------------------------------CrawlerTask 开始小说网站数据-------------------------------");
            Document document = null;
            String link = "https://www.zhetian.org/top/lastupdate.html";
            for (int i = 0; i < 3; i++) {
                try {
                    document = Jsoup.connect(link).ignoreContentType(true).post();
                } catch (Exception e) {
                    System.out.println(link + ",打开失败,重新尝试:" + i);
                }
                if (null != document) break;
            }
            if (null == document) {
                logger.info("-------------------------------CrawlerTask 爬取小说网站数据失败-------------------------------");
                return;
            }
            Element body = document.body();
            Elements nvs = body.select("body > section > div > div.w-left > div > div.body > ul > li > span.n > a:nth-child(2)");
            for (int n = 0; n < nvs.size(); n++) {
                if (n >= 10) break;
                Document nd = null;
                String nlink = nvs.get(n).attr("abs:href");
                for (int i = 0; i < 3; i++) {
                    try {
                        nd = Jsoup.connect(nlink).ignoreContentType(true).post();
                    } catch (Exception e) {
                        System.out.println(nlink + ",打开失败,重新尝试:" + i);
                    }
                    if (null != nd) break;
                }
                if (null == nd) return;
                String name = nd.select("body > section > div:nth-child(2) > div.w-left > div > div.header.line > h1").text();
                String img = nd.select("body > section > div:nth-child(2) > div.w-left > div > div.body.novel > div.novelinfo > div.novelinfo-r > img").attr("abs:src");
                String zz = nd.select("#author > i:nth-child(1) > a").text();
                String lb = nd.select("#author > i:nth-child(2) > a").text();
                String zt = nd.select("#author > i:nth-child(3)").text();
                String dj = nd.select("#stats > i:nth-child(1)").text();
                String tj = nd.select("#stats > i:nth-child(2)").text();
                String sc = nd.select("#stats > i:nth-child(3)").text();
                String gxsj = nd.select("#update > i:nth-child(1)").text();
                String zxzj = nd.select("#update > i:nth-child(2) > a").text();
                String nrjj = nd.select("#intro").text();
                String uuid = Md5Utils.GetMD5Code(nlink);
                template.update("insert ignore into t_novels_app (name,uuid,link,zz,lb,zt,dj,tj,sc,gxsj,zxzj,nrjj,img)" +
                        " values(?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{name, uuid, nlink, zz, lb,
                        zt, dj, tj, sc, gxsj, zxzj, nrjj, img});
                logger.info("连接:" + nlink + ",抓取成功");
                Elements select = nd.select("body > section > div.card.mt20.fulldir > div.body > ul > li > a");
                List<Object[]> args = Lists.newArrayList();
                select.stream().forEach(item -> {
                    String cname = item.text();
                    String clink = item.attr("abs:href");
                    if (StringUtils.isEmpty(cname) || StringUtils.isEmpty(clink)) return;
                    args.add(new Object[]{uuid, cname, clink});
                });
                template.batchUpdate("insert ignore into t_novels_chapter (nid,name,link)" +
                        " values(?,?,?)", args);
            }
            logger.info("-------------------------------CrawlerTask 爬取小说网站数据结束-------------------------------");
        }).start();
    }
    @PostConstruct
    public void crawlerNovelDetailJob() {
         new Thread(() -> {
            logger.info("-------------------------------CrawlerTask 开始遮天小说详情数据-------------------------------");
            List<Map<String, Object>> cps = template.queryForList("SELECT id,link from t_novels_chapter WHERE ISNULL(content) AND status=1 limit 100");
            if (CollectionUtils.isEmpty(cps)) {
                logger.info("-------------------------------CrawlerTask 没有待执行任务,结束-------------------------------");
                return;
            }
            List<Object[]> args = Lists.newArrayList();
            cps.forEach(item -> {
                Document document = null;
                String link = (String) item.get("link");
                for (int i = 0; i < 3; i++) {
                    try {
                        document = Jsoup.connect(link).ignoreContentType(true).post();
                    } catch (Exception e) {
                        System.out.println(link + ",打开失败,重新尝试:" + i);
                    }
                    if (null != document) break;
                }
                if (null == document) {
                    return;
                }
                String getUrl = "https://www.zhetian.org" + Regex.get("get\\(\\'(.*)\\'", document.html(), 1);
                if (StringUtils.isBlank(getUrl)) return;
                Document detail = null;
                for (int i = 0; i < 3; i++) {
                    try {
                        detail = Jsoup.connect(getUrl).ignoreContentType(true).get();
                    } catch (Exception e) {
                        System.out.println(link + ",打开失败,重新尝试:" + i);
                    }
                    if (null != detail) break;
                }
                if (null == detail) return;
                JSONObject object = JSONObject.parseObject(detail.body().html().replaceAll("\\<br\\\\\\ \\/\\>", "<br>"));
                String content = object.getString("info");
                if (StringUtils.isBlank(content)) return;
                args.add(new Object[]{content, item.get("id")});
            });
            if (CollectionUtils.isEmpty(args)) {
                logger.info("-------------------------------CrawlerTask 未抓取到具体章节内容,结束-------------------------------");
                return;
            }
            template.batchUpdate("update t_novels_chapter SET content=? WHERE id=? ", args);
            logger.info("-------------------------------CrawlerTask 爬取小说详情数据结束-------------------------------");
        }).start();
    }

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
基于大数据架构实现景点游客数据分析平台,全国景点游客数据管理系统
随着最近几年旅游行业的兴起,越来越多的景区景点将传统模式的线下统计模式变更成为了线上分析统计模式,线上对景区游客数据的管理与监督的新型模式。很多的景点采用游客数据分析平台系统,在线上对不同景点内部的游客数据进行管理,对景区各部门的员工进行管理,实现游客旅游数据分析的数字化,一体化。
计算机程序优异哥
2022/12/02
6480
Java爬虫可以非常溜
xxl-crawler是 许雪里 大佬开源的一个java爬虫,熟悉java语言的用起来可以非常顺手。
BUG弄潮儿
2020/07/15
4960
java爬虫实时采集小说+springboot推荐算法+实现在线小说免费阅读推荐系统
总结,本文从系统建设涉及到的技术介绍到框架搭建,对系统涉及到的商品推荐算法给出了详细的设计流程及核心代码块,从整体上完成了本应用商品推荐系统的开发过程。
计算机程序优异哥
2022/12/02
1.6K0
Springboot+爬虫+推荐算法+前后端分离实现小说推荐系统
如何针对互联网各大小说阅读网站的小说数据进行实时采集更新,建立自己的小说资源库,针对海量的小说数据开展标签处理特征分析,利用推荐算法完成针对用户的个性化阅读推荐?
计算机程序优异哥
2022/05/19
1.8K0
Springboot+爬虫+推荐算法+前后端分离实现小说推荐系统
爬虫(第一篇) IP代理池
搞虫子的都知道,IP代理是必要的方法,为什么?这个大家知道就好了,最近写了个IP代理池,给大家围观一下:开始。
全栈程序员站长
2022/09/06
4630
格力与奥克斯空调在京东的选购指数(java爬虫案例-代码实现)
这前段时间有一件事“格力举报奥克斯空调质量",我看了一下京东这两家店铺,感觉很有意思,看着就觉得奥克斯空调选购指数高很多。所以,就尝试爬一下看看,练手小demo。
营琪
2019/11/04
2.8K0
Java写爬虫,你试过嘛?
初步定的方案用 python,因为IO读写方便,结合xpath,后来搭了环境,发现好多都忘记了,需要复习,所有最后决定用java,结合jsoup,htmlUtil等。
山河已无恙
2023/03/02
4180
Java写爬虫,你试过嘛?
java实现网页结构分析列表发现
现在的网站千奇百怪,什么样格式的都有,需要提取网页中的列表数据,有时候挨个分析处理很头疼,本文是一个页面结构分析的程序,可以分析处理页面大致列表结构。
大道七哥
2019/08/23
1.2K0
java实现网页结构分析列表发现
CodeQL进行JAVA代码审计(1) --- XXE漏洞的挖掘
XXE就是XML外部实体注入。当允许引用外部实体时,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等危害。
半月弧
2020/04/27
3.5K2
CodeQL进行JAVA代码审计(1) --- XXE漏洞的挖掘
BS1069-基于javaSpringboot的协同过滤推荐算法的商品推荐系统
本基于javaSpringboot的协同过滤推荐算法的商品推荐系统,系统主要采用java,springboot,动态图表echarts,vue,mysql,mybatisplus,商品数据分析,协同过滤推荐算法,实现协同过滤推荐算法的商品推荐系统,系统提供商品购物前台网站,商品后台管理系统等功能。
计算机程序优异哥
2023/09/18
6500
BS1069-基于javaSpringboot的协同过滤推荐算法的商品推荐系统
用 Java 拿下 HTML 分分钟写个小爬虫
HelloGitHub 推出的《讲解开源项目》系列,今天给大家带来一款开源 Java 版一款网页元素解析框架——jsoup,通过程序自动获取网页数据。
HelloGitHub
2021/05/14
6190
用 Java 拿下 HTML 分分钟写个小爬虫
Xpath、Jsoup、Xsoup(我的Java爬虫之二)
XPath是W3C的一个标准。它最主要的目的是为了在XML1.0或XML1.1文档节点树中定位节点所设计。 XPath是一种表达式语言,它的返回值可能是节点,节点集合,原子值,以及节点和原子值的混合等。
全栈程序员站长
2022/06/29
2.1K0
记一次jsoup的使用
connect(String url) 方法创建一个新的 Connection, 和 get() 取得和解析一个HTML文件。如果从该URL获取HTML时发生错误,便会抛出 IOException,应适当处理。 Connection 接口还提供一个方法链来解决特殊请求,具体如下
一觉睡到小时候
2019/07/12
1.7K0
手把手教你从零开始用Java写爬虫
爬虫所用的HTM解析器为Jsoup。Jsoup可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
小锋学长生活大爆炸
2020/08/13
2.1K0
手把手教你从零开始用Java写爬虫
BS1070-基于java+springboot+echarts实现酒店推荐大数据采集清洗数据分析可视化系统
本酒店推荐大数据采集清洗数据分析可视化的设计与实现,系统主要采用java,springboot,动态图表echarts,vue,mysql,mybatisplus,酒店信息数据分析,html,css,javascript等技术实现,主要通过互联网采集爬虫获取互联网酒店信息,对酒店数据进行数据分析整合,数据处理成JSON格式,通过前端javascript解析JSON完成数据可视化的动态展示。
计算机程序优异哥
2023/09/18
3210
BS1070-基于java+springboot+echarts实现酒店推荐大数据采集清洗数据分析可视化系统
02.爬虫基础知识与简易爬虫实现
CSS 基础语法 CSS规则:选择器,以及一条或多条声明。 selector {declaration1; ...; desclarationN} 每条声明是由一个属性和一个值组成 property: value 例子 h1 {color: red; font-size: 14px} ---- 元素选择器 直接选择文档元素 比如 head,p <html> <head> <style type="text/css"> h1 {text-decoration: overline} h2
qubianzhong
2018/08/08
4760
02.爬虫基础知识与简易爬虫实现
学生管理系统(springMVC)
《Java Web编程》课程设计  学生管理系统 完成日期:   2018年12月26日   1  项目引言 1.1  项目简介        学生入校后,我们需要管理这些学生,那么就需要我们对这些学生进行很多的操作,此时我们学校对学生有条理的管理,包括一些基本信息的记录,就方便了学生的信息管理。 1.2  使用技术        这是一个学生管理系统,应用的是SSH框架Spring+SpringMVC+Hibernate的项目, 运用的知识:        spring,spring
泰斗贤若如
2019/06/18
4.1K0
学生管理系统(springMVC)
Springboot+vue.js+协同过滤推荐+余弦相似度算法实现新闻推荐系统
针对海量的新闻资讯数据,如何快速的根据用户的检索需要,完成符合用户阅读需求的新闻资讯推荐?本篇文章主要采用余弦相似度及基于用户协同过滤算法实现新闻推荐,通过余弦相似度算法完成针对不同新闻数据之间的相似性计算,实现分类标签。通过协同过滤算法发现具备相似阅读习惯的用户,展开个性化推荐。
计算机程序优异哥
2022/05/18
8480
使用Java进行网页抓取
用于网页抓取的流行语言有Python、JavaScript和Node.js、PHP、Java、C#等。因为有很多选择,想要确定哪种语言最合适并不容易。每种语言都有其优点和缺点。在本文中,我们将使用Java进行网页抓取并使用 Java创建一个网页抓取工具。
用户7850017
2021/09/17
4.5K0
使用Java进行网页抓取
BS1038-基于Python爬虫分析实现书旗小说网站内容数据可视化系统
主要包含技术:python编程语言,flask,网络爬虫,scrapy,mysql,html,javascript,echarts
计算机程序优异哥
2022/12/05
1.2K0
推荐阅读
相关推荐
基于大数据架构实现景点游客数据分析平台,全国景点游客数据管理系统
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档