博主介绍:✌全网粉丝10W+,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久,选择我们就是选择放心、选择安心毕业✌
> 🍅想要获取完整文章或者源码,或者代做,拉到文章底部即可与我联系了。🍅

点击查看作者主页,了解更多项目!

🍅感兴趣的可以先收藏起来,点赞、关注不迷路,大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,希望帮助同学们顺利毕业 。🍅

1、毕业设计:2025年计算机专业毕业设计选题汇总(建议收藏)✅

2、大数据毕业设计:2025年选题大全 深度学习 python语言 JAVA语言 hadoop和spark(建议收藏)✅

1、项目介绍

技术栈:Django框架、Vue框架、MySQL数据库、jieba、selenium爬虫、BeautifulSoup、vue.js
数据获取:Python Selenium+BeautifulSoup爬取新浪新闻,抽取标题、正文、图片、视频链接
推荐算法:
① 权重衰减——对用户兴趣标签随时间指数下降,避免重复内容
② 标签推荐——jieba分词后TF-IDF生成新闻标签,与用户标签余弦相似度排序
③ 热点推荐——综合阅读量、评论量、发布时间计算热度得分,Top-N入库
功能:首页分类浏览、用户行为埋点、个性化推荐、评论互动、后台采集控制、Echarts可视化大屏

研究背景:信息爆炸时代,传统门户“千人一面”已无法满足个性化需求;推荐系统成为提升用户留存与广告转化的核心引擎。
研究意义:将“爬虫+标签+权重衰减+热点”融合进Django+Vue全栈框架,为新闻门户、高校大数据课程、毕业设计提供一套高可用、易扩展的开源推荐方案,助力传统新闻平台数字化转型。

2、项目界面

(1)数据可视化大屏展示
在这里插入图片描述

(2)系统首页
在这里插入图片描述

(3)数据爬虫设置
在这里插入图片描述

(4)新闻数据管理
在这里插入图片描述

(5)新闻数据详情页面
在这里插入图片描述

(6)新闻数据评论功能
在这里插入图片描述

(7)不同类型的新闻数据浏览
在这里插入图片描述

(8)注册登录界面
在这里插入图片描述

3、项目说明

随着信息技术和互联网的发展,新闻传播从传统纸媒向数字化、智能化转变。传统新闻获取方式依赖固定渠道和人工筛选,信息传播效率低,个性化需求难以满足。新闻分类和推荐缺乏智能化手段,用户体验较差,新闻信息重复推荐和区域适配不足的问题显著。

系统后端采用Python语言和Django框架,前端采用Vue框架,数据库使用MySQL。通过Selenium爬虫技术实现新浪新闻爬取,获取标题、文本、图片、视频链接。功能包括首页新闻分类浏览、用户浏览记录和个性化推荐、新闻热度展示、用户标签管理与评论互动。管理员端支持新闻采集控制、推荐配置管理、数据分析日志查看、用户和新闻数据管理、评论操作等。Echarts用于数据可视化,界面采用HTML实现。

关键词:新闻推荐系统,Django,Vue,MySQL

网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接
推荐算法:权重衰减+标签推荐+热点推荐

  • 权重衰减:对用户兴趣标签随时间指数下降,避免内容过度重复
  • 标签推荐:jieba分词后TF-IDF生成新闻标签,与用户标签余弦相似度排序
  • 热点推荐:综合阅读量、评论量、发布时间计算热度得分,Top-N入库

涉及框架:Django框架、vue框架、MySQL数据库、jieba、selenium爬虫、BeautifulSoup、vue.js

系统采用Django REST Framework提供API,Vue Router实现单页应用,Vuex管理用户状态;MySQL存储新闻、用户、标签、评论、日志;Redis缓存热门新闻与标签向量,提高推荐接口并发能力。爬虫模块使用Selenium模拟登录,绕过新浪反爬,定时增量抓取;BeautifulSoup解析DOM,抽取正文、图片、视频链接;jieba+自定义词典生成关键词,TF-IDF计算权重,形成新闻标签向量。推荐服务每小时调度一次:权重衰减更新用户兴趣向量,标签推荐召回500条,热点推荐召回200条,再经LR排序模型融合,最终返回50条个性化 feed。前端Echarts大屏实时展示日活、阅读量、热点词云;后台可配置爬虫频率、推荐权重、敏感词过滤,支持一键导出日报CSV。整体代码开源、Docker-Compose一键部署,是毕业设计、大数据实训、新闻门户POC的理想模板。

4、核心代码


# -*- coding: utf-8 -*-
'''
    Author:Z
    Desc:通过热值对用户进行推送新闻
'''
import datetime
import logging
from logging.handlers import TimedRotatingFileHandler

import pymysql

from Spider.settings import DB_HOST, DB_USER, DB_PASSWD, DB_NAME, DB_PORT

logger = logging.getLogger(__name__)
logger.setLevel(level=logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(levelname)-7s - %(message)s')

# 2. 初始化handler,并配置formater
log_file_handler = TimedRotatingFileHandler(filename="Recommend/recommend/hlg.log",
                                            when="S", interval=10,
                                            backupCount=20)
log_file_handler.setFormatter(formatter)

# 3. 向logger对象中添加handler
logger.addHandler(log_file_handler)

class NewsRecommendByHotValue():
    def __init__(self):
        self.db = self.connect()
        self.cursor = self.db.cursor()
        self.userlist = self.loadDBData()
        # self.news_tags = self.loadFileData()
        self.result = self.getRecResult()

    def connect(self):
        '''
            @Description:数据库连接
            @:param host --> 数据库链接
            @:param user --> 用户名
            @:param password --> 密码
            @:param database --> 数据库名
            @:param port --> 端口号
            @:param charset --> 编码
        '''
        db = pymysql.Connect(host=DB_HOST, user=DB_USER, password=DB_PASSWD, database=DB_NAME, port=DB_PORT,
                             charset='utf8')
        return db

    def loadDBData(self):
        '''
            @Description:加载数据库用户数据
            @:param None
        '''
        sql_s = 'select userid from news_api_user'
        try:
            self.cursor.execute(sql_s)
            useridlist = self.cursor.fetchall()
        except:
            logging.error("Database Error")
            self.db.rollback()
        return useridlist

    def getRecResult(self):
        '''
            @Description:加载数据库新闻热度数据并进行热度推荐
            @:param None
        '''
        sql_s = 'select news_id,news_hot from news_api_newshot order by news_hot DESC limit 0,20;'
        self.cursor.execute(sql_s)
        newsidlist = self.cursor.fetchall()
        print(newsidlist)
        time = datetime.datetime.now().strftime("%Y-%m-%d")
        for user in self.userlist:
            print(user[0])
            for newsid in newsidlist:
                sql_w = 'insert into news_api_recommend(userid, newsid, hadread, cor, species, time) values (%d, %d, 0, %.2f, 2, \'%s\')' % \
                    (int(user[0]), int(newsid[0]), 1, time)
                logger.info("sql_w:{}".format(sql_w))
                try:
                    self.cursor.execute(sql_w)
                    self.db.commit()
                except:
                    logger.error("rollback:{}".format(newsid[0]))
                    self.db.rollback()
        return True

def beginrecommendbyhotvalue():
    NewsRecommendByHotValue()


5、源码获取方式

biyesheji0005  或  biyesheji0001   (绿色聊天软件)

🍅由于篇幅限制,获取完整文章或源码、代做项目的,查看我的【用户名】、【专栏名称】、【顶部选题链接】就可以找到我啦🍅

感兴趣的可以先收藏起来,点赞、关注不迷路,下方查看👇🏻获取联系方式👇🏻

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐