当前位置:   article > 正文

基于Java爬虫的小说推荐系统,小说推荐平台,小说管理系统_link管理平台小说

link管理平台小说

基于Java爬虫的小说推荐系统,小说推荐平台,小说管理系统


<1>小说推荐平台前台

本系统为大学生毕业设计程序,项目涉及技术为:springboot、mybatis、mysql、vue.js、javascript、html、爬虫、maven等等。

1.项目主页:

 

2.分类小说列表页

 

3.小说全局搜索实现

 

4.小说详情页面

 

5.用户登录注册页面

 

6.小说章节阅读页面

 

7.java代码实现小说抓取功能

java爬虫部分的代码实现:

  1. @PostConstruct
  2. public void initNovelJob() {
  3. new Thread(() -> {
  4. logger.info("-------------------------------CrawlerTask 开始小说网站数据-------------------------------");
  5. Document document = null;
  6. String link = "https://www.zhetian.org/top/lastupdate.html";
  7. for (int i = 0; i < 3; i++) {
  8. try {
  9. document = Jsoup.connect(link).ignoreContentType(true).post();
  10. } catch (Exception e) {
  11. System.out.println(link + ",打开失败,重新尝试:" + i);
  12. }
  13. if (null != document) break;
  14. }
  15. if (null == document) {
  16. logger.info("-------------------------------CrawlerTask 爬取小说网站数据失败-------------------------------");
  17. return;
  18. }
  19. Element body = document.body();
  20. Elements nvs = body.select("body > section > div > div.w-left > div > div.body > ul > li > span.n > a:nth-child(2)");
  21. for (int n = 0; n < nvs.size(); n++) {
  22. if (n >= 10) break;
  23. Document nd = null;
  24. String nlink = nvs.get(n).attr("abs:href");
  25. for (int i = 0; i < 3; i++) {
  26. try {
  27. nd = Jsoup.connect(nlink).ignoreContentType(true).post();
  28. } catch (Exception e) {
  29. System.out.println(nlink + ",打开失败,重新尝试:" + i);
  30. }
  31. if (null != nd) break;
  32. }
  33. if (null == nd) return;
  34. String name = nd.select("body > section > div:nth-child(2) > div.w-left > div > div.header.line > h1").text();
  35. 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");
  36. String zz = nd.select("#author > i:nth-child(1) > a").text();
  37. String lb = nd.select("#author > i:nth-child(2) > a").text();
  38. String zt = nd.select("#author > i:nth-child(3)").text();
  39. String dj = nd.select("#stats > i:nth-child(1)").text();
  40. String tj = nd.select("#stats > i:nth-child(2)").text();
  41. String sc = nd.select("#stats > i:nth-child(3)").text();
  42. String gxsj = nd.select("#update > i:nth-child(1)").text();
  43. String zxzj = nd.select("#update > i:nth-child(2) > a").text();
  44. String nrjj = nd.select("#intro").text();
  45. String uuid = Md5Utils.GetMD5Code(nlink);
  46. template.update("insert ignore into t_novels_app (name,uuid,link,zz,lb,zt,dj,tj,sc,gxsj,zxzj,nrjj,img)" +
  47. " values(?,?,?,?,?,?,?,?,?,?,?,?,?)", new Object[]{name, uuid, nlink, zz, lb,
  48. zt, dj, tj, sc, gxsj, zxzj, nrjj, img});
  49. logger.info("连接:" + nlink + ",抓取成功");
  50. Elements select = nd.select("body > section > div.card.mt20.fulldir > div.body > ul > li > a");
  51. List<Object[]> args = Lists.newArrayList();
  52. select.stream().forEach(item -> {
  53. String cname = item.text();
  54. String clink = item.attr("abs:href");
  55. if (StringUtils.isEmpty(cname) || StringUtils.isEmpty(clink)) return;
  56. args.add(new Object[]{uuid, cname, clink});
  57. });
  58. template.batchUpdate("insert ignore into t_novels_chapter (nid,name,link)" +
  59. " values(?,?,?)", args);
  60. }
  61. logger.info("-------------------------------CrawlerTask 爬取小说网站数据结束-------------------------------");
  62. }).start();
  63. }
  64. @PostConstruct
  65. public void crawlerNovelDetailJob() {
  66. new Thread(() -> {
  67. logger.info("-------------------------------CrawlerTask 开始遮天小说详情数据-------------------------------");
  68. List<Map<String, Object>> cps = template.queryForList("SELECT id,link from t_novels_chapter WHERE ISNULL(content) AND status=1 limit 100");
  69. if (CollectionUtils.isEmpty(cps)) {
  70. logger.info("-------------------------------CrawlerTask 没有待执行任务,结束-------------------------------");
  71. return;
  72. }
  73. List<Object[]> args = Lists.newArrayList();
  74. cps.forEach(item -> {
  75. Document document = null;
  76. String link = (String) item.get("link");
  77. for (int i = 0; i < 3; i++) {
  78. try {
  79. document = Jsoup.connect(link).ignoreContentType(true).post();
  80. } catch (Exception e) {
  81. System.out.println(link + ",打开失败,重新尝试:" + i);
  82. }
  83. if (null != document) break;
  84. }
  85. if (null == document) {
  86. return;
  87. }
  88. String getUrl = "https://www.zhetian.org" + Regex.get("get\\(\\'(.*)\\'", document.html(), 1);
  89. if (StringUtils.isBlank(getUrl)) return;
  90. Document detail = null;
  91. for (int i = 0; i < 3; i++) {
  92. try {
  93. detail = Jsoup.connect(getUrl).ignoreContentType(true).get();
  94. } catch (Exception e) {
  95. System.out.println(link + ",打开失败,重新尝试:" + i);
  96. }
  97. if (null != detail) break;
  98. }
  99. if (null == detail) return;
  100. JSONObject object = JSONObject.parseObject(detail.body().html().replaceAll("\\<br\\\\\\ \\/\\>", "<br>"));
  101. String content = object.getString("info");
  102. if (StringUtils.isBlank(content)) return;
  103. args.add(new Object[]{content, item.get("id")});
  104. });
  105. if (CollectionUtils.isEmpty(args)) {
  106. logger.info("-------------------------------CrawlerTask 未抓取到具体章节内容,结束-------------------------------");
  107. return;
  108. }
  109. template.batchUpdate("update t_novels_chapter SET content=? WHERE id=? ", args);
  110. logger.info("-------------------------------CrawlerTask 爬取小说详情数据结束-------------------------------");
  111. }).start();
  112. }

8.其他功能模块

小说推荐算法实现

小说排行榜实现

小说加入书架、用户小说书架管理等

用户小说评论、小说推荐、小说阅读

微博登陆、QQ登录

、、、、


 

<2>后台小说管理系统

1.小说管理后台主页、小说抓取统计

 

2.小说管理后台、小说管理列表


 

代码太多了,就不详细列举了,有需要的可以联系我,拿代码。。。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/954381
推荐阅读
相关标签
  

闽ICP备14008679号

        
cppcmd=keepalive&