解决方案:大数据毕设 - 基于协同过滤的新闻推荐系统(python 爬虫)
优采云 发布时间: 2022-12-05 06:54解决方案:大数据毕设 - 基于协同过滤的新闻推荐系统(python 爬虫)
1 学科背景
由于网络信息技术的不断进步和数据量的快速增长,每天都会产生大量的信息,使得互联网上的数据信息越来越庞大,系统也越来越臃肿。感兴趣的内容带来了很大的困难,往往会让用户迷失在信息的迷宫中,以至于找不到自己真正感兴趣的内容。因此,高效、快速的新闻推荐变得极为重要。
本项目采用前后端分离,前端基于Vue设计的界面,后端基于python Django框架。
2 实现效果
总体软件结构
2.1 客户端
2.2 管理端
3Django
介绍
Django 是一个用 Python 编写的基于 Web 的应用程序框架。Web开发的基础是B/S架构,通过前端与前台的协作,将后台服务器的数据展示给前端用户在浏览器上的应用。Django本身是基于MVC模型,即Model(模型)+View(视图)+Controller(控制器)的设计模式。View 模块和Template 模块组成了它的视图部分。这种结构使动态逻辑与静态页面分离。处理。Django框架的Model层本质上是一个ORM系统,封装了大量的数据库操作API。开发者可以在不知道底层数据库实现的情况下对数据库进行增删改查。姜戈 强大的QuerySet设计可以实现非常复杂的数据库查询操作,性能接近原生SQL语句。Django 支持多种数据库,包括 PostgreSQL、My Sql、SQLite 和 Oracle。Django的路由层设计非常简单,可以独立开发控制层、模型层和页面模板。基于Django的Web系统工程结构*敏*感*词*如图所示。
安装
pip install django
利用
#!/usr/bin/env python
'''Django's command-line utility for administrative tasks.'''
import os
import sys
def main():
'''Run administrative tasks.'''
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'newsServer.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?"
) from exc
execute_from_command_line(sys.argv)
if __name__ == '__main__':
main()
4 爬行动物
网络爬虫是一种按照一定规则自动抓取万维网上信息的程序或脚本。当爬虫访问某个站点时,如果可以访问,则下载其中的网页内容,并解析通过爬虫分析模块得到的网页链接,并将这些链接作为后续的爬取目标,自动运行,不依赖于整个过程中的用户。如果无法访问,则根据爬虫预设的策略访问下一个URL。整个过程中,爬虫会自动异步处理数据请求,返回爬取到的网页数据。在整个爬虫运行之前,用户可以自定义添加代理来伪装请求头,从而更好地获取网页数据。爬虫流程图如下:
相关代码
def getnewsdetail(url):
# 获取页面上的详情内容并将详细的内容汇集在news集合中
result = requests.get(url)
result.encoding = 'utf-8'
soup = BeautifulSoup(result.content, features="html.parser")
title = getnewstitle(soup)
if title == None:
return None
date = getnewsdate(soup)
mainpage, orimainpage = getmainpage(soup)
if mainpage == None:
return None
pic_url = getnewspic_url(soup)
videourl = getvideourl(url)
news = {'mainpage': mainpage,
'pic_url': pic_url,
'title': title,
'date': date,
'videourl': videourl,
'origin': orimainpage,
}
return news
def getmainpage(soup):
'''
@Description:获取正文部分的p标签内容,网易对正文部分的内容通过文本前部的空白进行标识\u3000
@:param None
<p>
'''
if soup.find('div', id='article') != None:
soup = soup.find('div', id='article')
p = soup.find_all('p')
for numbers in range(len(p)):
p[numbers] = p[numbers].get_text().replace("\u3000", "").replace("\xa0", "").replace("新浪", "新闻")
text_all = ""
for each in p:
text_all += each
logger.info("mainpage:{}".format(text_all))
return text_all, p
elif soup.find('div', id='artibody') != None:
soup = soup.find('div', id='artibody')
p = soup.find_all('p')
for numbers in range(len(p)):
p[numbers] = p[numbers].get_text().replace("\u3000", "").replace("\xa0", "").replace("新浪", "新闻")
text_all = ""
for each in p:
text_all += each
logger.info("mainpage:{}" + text_all)
return text_all, p
else:
return None, None
def getnewspic_url(soup):
'''
@Description:获取正文部分的pic内容,网易对正文部分的图片内容通过div中class属性为“img_wrapper”
@:param None
'''
pic = soup.find_all('div', class_='img_wrapper')
pic_url = re.findall('src="(.*?)"', str(pic))
for numbers in range(len(pic_url)):
pic_url[numbers] = pic_url[numbers].replace("//", 'https://')
logging.info("pic_url:{}".format(pic_url))
return pic_url
</p>
5 视图
介绍
Vue 是一个用于构建用户界面的渐进式框架。其核心库只专注于视图层,不仅易于使用,而且易于与第三方库或现有项目集成。Vue框架主要有以下三个特点:
6 推荐算法(Recommendation)
协同过滤推荐
协同过滤推荐算法是最经典也是最常用的推荐算法。
所谓协同过滤,其基本思想是根据用户之前的偏好以及其他具有相似兴趣的用户的选择,向用户推荐物品(基于对用户历史行为数据的挖掘,发现用户的偏好偏好,并预测用户可能喜欢推荐的产品),一般只根据用户的行为数据(评价、购买、下载等),不依赖物品的任何附加信息(物品自身的特征)或任何用户的附加信息(年龄、性别等)。目前广泛使用的协同过滤算法是基于邻域法的,该方法主要有以下两种算法:
代码
def itemcf_sim(df):
"""
文章与文章之间的相似性矩阵计算
:param df: 数据表
:item_created_time_dict: 文章创建时间的字典
return : 文章与文章的相似性矩阵
思路: 基于物品的协同过滤(详细请参考上一期推荐系统基础的组队学习), 在多路召回部分会加上关联规则的召回策略
"""
user_item_time_dict = get_user_item_time(df)
# 计算物品相似度
i2i_sim = {}
item_cnt = defaultdict(int)
for user, item_time_list in tqdm(user_item_time_dict.items()):
# 在基于商品的协同过滤优化的时候可以考虑时间因素
for i, i_click_time in item_time_list:
item_cnt[i] += 1
i2i_sim.setdefault(i, {})
for j, j_click_time in item_time_list:
if(i == j):
continue
i2i_sim[i].setdefault(j, 0)
i2i_sim[i][j] += 1 / math.log(len(item_time_list) + 1)
i2i_sim_ = i2i_sim.copy()
for i, related_items in i2i_sim.items():
for j, wij in related_items.items():
i2i_sim_[i][j] = wij / math.sqrt(item_cnt[i] * item_cnt[j])
# 将得到的相似性矩阵保存到本地
pickle.dump(i2i_sim_, open(save_path + 'itemcf_i2i_sim.pkl', 'wb'))
return i2i_sim_
<p>
</p>
7 APScheduler框架
介绍
Advanced Python Scheduler (APScheduler) 是一个 Python 库,可让您安排 Python 代码稍后执行,一次或定期执行。您可以随意添加新作业或删除旧作业。如果您将任务存储在数据库中,它们也将在调度程序重新启动后继续存在并保持其状态。当调度程序重新启动时,它将运行它在离线时应该运行的所有任务。
除其他事项外,APScheduler 可用作跨平台、特定于应用程序的替代特定于平台的调度程序,例如 cron 守护程序或 Windows 任务计划程序。但是请注意,APScheduler 本身不是守护进程或服务,也没有附带任何命令行工具。它主要用于在现有应用程序中运行。也就是说,APScheduler 确实为您提供了一些构建块来构建调度程序服务或运行专用调度程序进程。
安装
点安装:
pip install apscheduler
本项目的相关使用:
from apscheduler.schedulers.blocking import BlockingScheduler
from Recommend.NewsRecommendByCity import beginrecommendbycity
from Recommend.NewsRecommendByHotValue import beginrecommendbyhotvalue
from Recommend.NewsRecommendByTags import beginNewsRecommendByTags
from Recommend.NewsKeyWordsSelect import beginSelectKeyWord
from Recommend.NewsHotValueCal import beginCalHotValue
from Recommend.NewsCorrelationCalculation import beginCorrelation
from Recommend.HotWordLibrary import beginHotWordLibrary
sched = BlockingScheduler()
sched2 = BlockingScheduler()
def beginRecommendSystem(time):
'''
@Description:推荐系统启动管理器(基于城市推荐、基于热度推荐、基于新闻标签推荐)
@:param time --> 时间间隔
'''
sched.add_job(func=beginrecommendbycity, trigger='interval', max_instances=1, seconds=int(time),
id='NewsRecommendByCity',
kwargs={})
sched.add_job(beginrecommendbyhotvalue, 'interval', max_instances=1, seconds=int(time),
id='NewsRecommendByHotValue',
kwargs={})
sched.add_job(beginNewsRecommendByTags, 'interval', max_instances=1, seconds=int(time), id='NewsRecommendByTags',
kwargs={})
sched.start()
def stopRecommendSystem():
'''
@Description:推荐系统关闭管理器
@:param None
'''
sched.remove_job('NewsRecommendByCity')
sched.remove_job('NewsRecommendByHotValue')
sched.remove_job('NewsRecommendByTags')
def beginAnalysisSystem(time):
'''
@Description:数据分析系统启动管理器(关键词分析、热词分析、新闻相似度分析、热词统计)
@:param time --> 时间间隔
'''
sched2.add_job(beginSelectKeyWord, trigger='interval', max_instances=1, seconds=int(time),
id='beginSelectKeyWord',
kwargs={"_type": 2})
sched2.add_job(beginCalHotValue, 'interval', max_instances=1, seconds=int(time),
id='beginCalHotValue',
kwargs={})
sched2.add_job(beginCorrelation, 'interval', max_instances=1, seconds=int(time), id='beginCorrelation',
kwargs={})
sched2.add_job(beginHotWordLibrary, 'interval', max_instances=1, seconds=int(time), id='beginHotWordLibrary',
kwargs={})
sched2.start()
def stopAnalysisSystem():
'''
@Description:数据分析系统关闭管理器
@:param None
'''
sched2.remove_job('beginSelectKeyWord')
sched2.remove_job('beginCalHotValue')
sched2.remove_job('beginCorrelation')
sched2.remove_job('beginHotWordLibrary')
sched2.shutdown()
8 最后
解决方案:如何用WhatsApp群发批量开发客户,轻松获取上万个海外客户
作为全球最大的社交聊天软件,WhatsApp的主要市场是*敏*感*词*、*敏*感*词*、南美、非洲等,在北美和澳大利亚也占有较大的市场份额。除东亚部分国家和地区外,以微信、Line等小群为主。除了职业方式,很多国家主要的社交聊天工具是WhatsApp。
01
WhatsApp的天然优势
①免费使用:通过WhatsApp发送消息是免费的,只需要有网络环境;98%以上,离线也能收到信息;③简单直接:无需添加好友,与客户实时*敏*感*词*交流,直接向客户发送产品信息,我们只需要采集客户号;④ 形式多样:除了聊天,还可以视频互动,信息交流更直接,缩短与海外客户的距离感;⑤ 广告账号:创建企业广告账号,可以添加网站网址、图片视频、公司介绍,让客户更了解你。
02
WhatsApp 开发客户端
基于WhatsApp庞大的用户群和日常活动数据,许多海外商家正在学习WhatsApp的营销策略,试图通过它与用户/卖家/客户建立联系。但是一直有一个很头疼的问题,那就是账号封禁的问题。在许多情况下,在发送一些营销信息后,它们就会被正式禁止。很多使用多年的老账号被封禁,严重影响了客户的开发。那么如何才能提高WhatsApp的使用效率,更好的开发和发送消息给客户呢?接下来重点介绍一种快速提升营销效率的方法和工具——商城获客软件
03
海量猫获客软件
1、通过关键词批量采集行业客户号支持全球国家搜索,覆盖全球六大SNS社交媒体平台(linkedin、facebook、Twitter、instagram、youtube、Pinterest、Google Maps)的数据)数据,自动采集商号,来源信息(真实数据),验证账号,一键群发或导出数据。
搜索Facebook社交媒体平台欧美数据,链接可查询真实数据 2.通过关键词,搜索大量群组,反复触达潜在客户 WhatsApp群组拥有大量相同的未知潜在客户行业和相同需求,通过WhatsApp群发 软件可以批量抓取行业客户的WhatsApp群,自动提取群成员信息,无需跳转即可批量发送,非常方便。3.批量验证,批量群发,不用担心被ban。为了避免被封号,我们使用官方频道界面进行群发,一键自动批量发送消息。该模板还支持图形和文字,
使用 Mass Cat 客户获取软件的好处是:
这个功能非常强大,因为客户在WhatsApp business回复你的时候你也会被扣费,24小时后会重新计费。我们的客服系统可以将api上的询价转至您常用的WhatsApp进行沟通,后续跟进不再收费。
然后解决封号问题,WhatsApp营销推广很顺利,效果也很明显。有解禁账号群发工具的加持,你可以高效开发国外客户!
在线搜索您的产品,联系我们获取免费演示