master
editor 1 year ago
commit 3a82834315

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.5" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/news_recommend.iml" filepath="$PROJECT_DIR$/.idea/news_recommend.iml" />
</modules>
</component>
</project>

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="a1aea99b-0952-4918-8d93-29bf71c9bca8" name="Default Changelist" comment="" />
<option name="EXCLUDED_CONVERTED_TO_IGNORED" value="true" />
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="DjangoConsoleOptions" custom-start-script="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)">
<option name="myCustomStartScript" value="import sys; print('Python %s on %s' % (sys.version, sys.platform))&#10;import django; print('Django %s' % django.get_version())&#10;sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS])&#10;if 'setup' in dir(django): django.setup()&#10;import django_manage_shell; django_manage_shell.run(PROJECT_ROOT)" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">

@ -0,0 +1,48 @@
PYTHON基于网络爬虫的的个性化新闻推荐系统(含论文)源码
一、源码描述
这是一款Python基于网络爬虫的的个性化新闻推荐系统数据库MySQL功能也比较全面比较适合作为毕业设计使用感兴趣的朋友可以下载看看哦
二、功能介绍
1、用户的注册与登录。
2、根据用户浏览新闻的记录推荐用户喜欢的新闻。
三、注意事项
开发语言Python数据库MySql
作者: froor
如需获得该源码的视频、更新等更多资料请访问: https://www.51aspx.com/Code/NewsRecommendationSystem
------------------------------------------------------------------------------------------------
源码服务专家
官网: https://www.51aspx.com
讨论圈: https://club.51aspx.com/
平台声明:
1.51Aspx平台上提供下载的资源为免费、共享、商业三类源码,其中免费和共享源码仅供个人学习和研究使用,商业源码请在相应的授权许可条件下使用;
2.51Aspx平台对提供下载的软件及其它资源不拥有任何权利,其版权归属源码合法拥有者所有;
3.著作权人发现本网站载有侵害其合法权益的内容或作品,请与我们联系( 登录官网与客服反馈或发送邮件到support@51Aspx.com
4.51Aspx平台不保证提供的下载资源的准确性、安全性和完整性;
友情提示:
一般数据库文件默认在 DB_51Aspx 文件夹下
默认账号密码一般均为51Aspx
关于源码使用常见问题及解决方案,请参阅: https://www.51aspx.com/Help

@ -0,0 +1,15 @@
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys
def main():
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'news_recommend.settings')
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,5 @@
from django.apps import AppConfig
class NewsConfig(AppConfig):
name = 'news'

@ -0,0 +1,15 @@
#!/usr/bin/python
# coding=utf-8
#########################################
# kNN: k Nearest Neighbors
# 输入: newInput: (1xN)的待分类向量
# dataSet: (NxM)的训练数据集
# labels: 训练数据集的类别标签向量
# k: 近邻数
# 输出: 可能性最大的分类标签
#########################################
from numpy import *
import operator

@ -0,0 +1,15 @@
# Generated by Django 2.2.19 on 2021-05-11 11:50
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='news',

@ -0,0 +1,15 @@
# Generated by Django 2.2.19 on 2021-05-11 12:05
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('news', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='news',
name='count',

@ -0,0 +1,15 @@
# Generated by Django 2.2.19 on 2021-05-12 01:14
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('news', '0002_auto_20210511_2005'),
]
operations = [
migrations.CreateModel(
name='NewsType',
fields=[

@ -0,0 +1,15 @@
from django.db import models
# Create your models here.
class News(models.Model): # 新闻内容表
id = models.AutoField(db_column='id', primary_key=True) # Field name made lowercase.
url = models.CharField(db_column='url', max_length=260) # 标题
title = models.CharField(db_column='title', max_length=60, ) # Field name made lowercase.
comment = models.TextField(db_column='comment')
count = models.IntegerField(default=0)
class Meta:
managed = True
db_table = 'news'

@ -0,0 +1,15 @@
# -*- coding:utf-8 -*-
__version__ = '1.0.0.0'
import re
from math import sqrt
import KNN
import jieba
from pandas import *
from sklearn.metrics import pairwise_distances
from bs4 import BeautifulSoup
from sklearn import feature_extraction
from sklearn.feature_extraction.text import TfidfTransformer, TfidfVectorizer

@ -0,0 +1,7 @@
from django.urls import path, include
from . import views
urlpatterns = [
path('index/',views.index),
path('details/<int:news_id>',views.details),
path('tuijian/',views.tuijian),
]

@ -0,0 +1,15 @@
from django.http import JsonResponse
from django.shortcuts import render
from utils.mypage import Pagination
from utils.common import my_login
from .models import News,NewsType
from user.models import User
news_type = ['时政','体育','社会','科技','财经','宠物','法律','房产','健康','军事','科学','娱乐','教育']
# Create your views here.
dict_news = dict.fromkeys(news_type,0)
@my_login
def index(request):
new_list = News.objects.all()

@ -0,0 +1,15 @@
/*
Navicat Premium Data Transfer
Source Server : localhost
Source Server Type : MySQL
Source Server Version : 80023
Source Host : localhost:3306
Source Schema : news_recommend
Target Server Type : MySQL
Target Server Version : 80023
File Encoding : 65001
Date: 14/05/2021 17:41:12
*/

@ -0,0 +1,2 @@
import pymysql
pymysql.install_as_MySQLdb()

@ -0,0 +1,15 @@
"""
Django settings for news_recommend project.
Generated by 'django-admin startproject' using Django 2.2.19.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/
For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""
import os
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)

@ -0,0 +1,15 @@
"""news_recommend URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/2.2/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.urls import include, path
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""

@ -0,0 +1,15 @@
"""
WSGI config for news_recommend project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/2.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'news_recommend.settings')

@ -0,0 +1,15 @@
*, *:before, *:after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: 'Open Sans', Helvetica, Arial, sans-serif;
background: #ededed;
}
input, button {
border: none;
outline: none;
background: none;

@ -0,0 +1,15 @@
@keyframes showSweetAlert {
0% {
transform: scale(0.7);
}
45% {
transform: scale(1.05);
}
80% {
transform: scale(0.95);
}
100% {
transform: scale(1);
}
}
@keyframes hideSweetAlert {

@ -0,0 +1,4 @@
$('#datetimepicker').datetimepicker({
format: 'YYYY-MM-DD hh:mm',
locale: moment.locale('zh-cn')
});

@ -0,0 +1,15 @@
//<2F><EFBFBD><E0BCAD><EFBFBD><EFBFBD>
function editPassword()
{
var iframe = document.getElementById('iframe_editPassword');
iframe.setAttribute("src" , "http://127.0.0.1:8000/static/localHtml/editPassword.html" );
};
//<2F><><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>
function changeHeadPhoto()
{
var iframe = document.getElementById('iframe_editPassword');
iframe.setAttribute("src" , "http://127.0.0.1:8000/static/localHtml/changeHeadPhoto.html" );
}

File diff suppressed because one or more lines are too long

@ -0,0 +1,8 @@
function addNew()
{
var iframe = document.getElementById('iframe_a');
//获取当前网址
var a =window.document.location.href;
// 127.0.0.1:8000就等价于.idea下面那个newSystem文件夹
iframe.setAttribute("src" , "http://127.0.0.1:8000/static/localHtml/addNew.html" );
}

@ -0,0 +1,3 @@
document.querySelector('.img__btn').addEventListener('click', function() {
document.querySelector('.content').classList.toggle('s--signup')
})

@ -0,0 +1,15 @@
;(function(window, document, undefined) {
"use strict";
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var defaultParams = {
title: '',
text: '',
type: null,
allowOutsideClick: false,
showConfirmButton: true,

@ -0,0 +1,15 @@
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- include libraries(jQuery, bootstrap) -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
<!-- include summernote css/js -->
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.15/dist/summernote.min.js"></script>

@ -0,0 +1,15 @@
<head>
<meta charset="UTF-8">
<title>头像</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改个人信息</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>发布者个人页面</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
<!-- 新 Bootstrap 核心 CSS 文件 -->
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>

@ -0,0 +1,15 @@
<!DOCTYPE html>
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
.test li {
display: inline;
list-style: none;
margin: 0 20px;

@ -0,0 +1,15 @@
<!DOCTYPE html>
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
.test li {
display: inline;
list-style: none;
margin: 0 20px;

@ -0,0 +1,15 @@
<!DOCTYPE html>
<html lang="zh-CN">
{% load static %}
<head>
<meta charset="utf-8">
<title>login</title>
<link rel="stylesheet" href="../static/css/style1.css">
<link rel="stylesheet" type="text/css" href="../static/css/sweetalert.css">
</head>
<body>
<div class="content">
<div class="form sign-in">
<h2>新闻推荐系统——登录</h2>

@ -0,0 +1,15 @@
<!DOCTYPE html>
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
.test li {
display: inline;
list-style: none;
margin: 0 20px;

@ -0,0 +1,15 @@
<!DOCTYPE html>
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="/static/css/sweetalert.css"/>
<style>
.test li {
display: inline;

@ -0,0 +1,15 @@
<!DOCTYPE html>
{% load static %} <!-- 要使用static文件夹下的静态资源, 必须在头部声明 -->
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>首页</title>
<link href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
<style>
.test li {
display: inline;
list-style: none;
margin: 0 20px;

@ -0,0 +1,3 @@
from django.contrib import admin
# Register your models here.

@ -0,0 +1,5 @@
from django.apps import AppConfig
class UserConfig(AppConfig):
name = 'user'

@ -0,0 +1,15 @@
# Generated by Django 2.2.19 on 2021-05-11 11:50
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='User',

@ -0,0 +1,13 @@
from django.db import models
# Create your models here.
class User(models.Model):
id = models.AutoField(db_column='id', primary_key=True) # Field name made lowercase.
username = models.CharField(verbose_name='username',max_length=64)
password = models.CharField(verbose_name='password',max_length=64)
phone = models.CharField(max_length=11,default='')
hobby = models.CharField(max_length=255,default='')
create_time = models.DateTimeField(max_length=50, auto_now_add=True)
class Meta:
managed = True
db_table = 'user'

@ -0,0 +1,4 @@
li = ['admin','zhangsan','lisi']
dict_values = dict.fromkeys(li,0)
dict_values['admin'] = 1
print(all(value == 0 for value in dict_values.values()))

@ -0,0 +1,5 @@
from django.urls import path
from . import views
urlpatterns =[
path('',views.show_user)
]

@ -0,0 +1,15 @@
from django.http import JsonResponse
from django.shortcuts import render, redirect
from .models import User
# Create your views here.
from utils.mypage import Pagination
def logout(request):
request.session.flush()
return redirect('/login')
# 将 login 请求跳转到login.html
def login(request):
return render(request, 'login.html')

@ -0,0 +1,14 @@
# 登陆用的装饰器,限制未登录自动跳转到登录页面
from django.http import HttpResponseRedirect
def my_login(func):
def inner(*args, **kwargs):
username = args[0].session.get('user_name')
print('username',username)
if username:
return func(*args, **kwargs)
else:
return HttpResponseRedirect('/login')
return inner

@ -0,0 +1,15 @@
class Pagination(object):
def __init__(self, current_page, all_count, per_page_num=2, pager_count=11):
"""
封装分页相关数据
:param current_page: 当前页
:param all_count: 数据库中的数据总条数
:param per_page_num: 每页显示的数据条数
:param pager_count: 最多显示的页码个数
用法:
queryset = model.objects.all()
page_obj = Pagination(current_page,all_count)
page_data = queryset[page_obj.start:page_obj.end]
获取数据用page_data而不再使用原始的queryset
获取前端分页样式用page_obj.page_html

@ -0,0 +1,14 @@
运行步骤
需要先安装Python的相关依赖pillowpymysqlDjagojieba, sklearn ,matplotlib,pandas,bs4
第一步创建数据库数据库名news_recommend
第二步执行SQL语句打开news_recommend.sql文件运行该文件中的SQL语句
第三步源码文件为news_recommend.zip修改源代码中的settings.py文件改成自己的mysql数据库用户名和密码
第四步运行命令python manage.py runserver 8091
第五步打开浏览器查看http://127.0.0.1:8091/login
深度学习算法推荐算法在news/recommend.py文件中
Loading…
Cancel
Save