基于Scrapy 爬虫框架+数据可视化的第三方网课评价平台设计

2022-07-08 03:04陈涛陈志远
电子技术与软件工程 2022年1期
关键词:爬虫框架数据库

陈涛 陈志远

(安徽大学互联网学院 安徽省合肥市 230000)

1 引言

据中国互联网络信息中心(CNNIC)2021 年8 月27 日在京公布的第48 次《中国互联网络发展状况统计报告》统计,我国在线教育用户规模截至2021 年6 月已达3.25 亿。在线教育用户规模在2020 年迎来爆发式的增长,众多机构及资本进入在线教育领域,各种在线教育平台层出不穷,然而由于资本的介入,虚假宣传,低价获客等现象尤为明显。

在当下的在线教育平台模式下用户难以在众多平台中的同类课程中做出选择,部分平台的课程信息对用户的透明度较低,使得用户不能够直观的了解课程质量。如何在快速发展在线教育的同时对在线教育平台和网络课程进行监管,是维护在线教育环境不可忽视的问题。

随着大数据技术的发展,使得收集并应用零散的互联网在线课程信息变成了可能。使用大数据技术对互联网上分散在各个在线教育平台的课程基本信息进行数据采集,对采集结果进行数据分析与可视化,并以此为基础构建一个第三方评价平台,以便于用户快速获取感兴趣的课程以及真实的学习体验与评价信息[1]。本文详细介绍了如何基于Scrapy 爬虫框架+数据可视化构建一个第三方网课评价平台。

2 设计方案

2.1 设计思路

目前,在线教育资源大多分布在各个在线教育平台上,对于普通用户来说很难去收集大量的课程信息进行对比,而作为第三方的网课评价平台,首先要做到的就是将互联网上零散分布的大量在线课程信息收集,清洗,并经过一定的数据分析后提供给用户。对于大量的网络数据采集问题,使用爬虫技术无疑是最好的选择。

Scrapy 框架是一个基于Python 实现的为了爬取Web 站点、提取结构化的数据而开发的应用框架。作为一个框架,其使用起来非常简单,只需要定制几个模块就可以轻松的实现一个爬虫程序,除此之外,该框架的优点还有:

(1)易于构建大规模网络爬虫项目;

(2)异步处理请求提高爬虫效率;

(3)具有高度可扩展性和鲁棒性[2]。

考虑到Scrapy 框架的种种特点与第三方网课评价平台的需求非常契合,本文确立了基于Scrapy 爬虫框架和数据可视化技术打造一个第三方的网课评价平台,供用户参考与交流的设计思路。

平台要实现课程基本信息的搜索和展示功能,建立用户系统、搭建交流社区,做好同类课程的数据可视化,实现智能推荐功能。同时作为一个第三方点评网站,其评价系统也至关重要。本文将采用星级评价,短评,长评的模式来构建评价系统,并且使用自然语言处理技术对采集的评论信息进行情感分析进而转化为数字评价指标来作为评分的一部分。

2.2 平台流程及架构

基于上述设计思路,整个平台架构主要分为三个部分,首先是数据采集系统,在该环节要完成大量的课程基本信息的采集、清洗、存储等工作。本文选择RDBMS 来存储采集的数据,主要是考虑平台前期业务并不复杂,传统的关系型数据库实现起来也较为简单,随着平台访问量增大,业务不断升级,可以考虑使用分布式数据存储系统Hbase[3]。

第二部分是服务器端,也即后端。这一环节的任务是完成与数据库的数据交换,以及对客户端的服务提供和信息交互。

第三部分是客户端,主要由课程基础信息模块、评价系统模块、用户模块和智能推荐模块组成:

2.2.1 课程基础信息模块

利用爬虫对各大在线教育网站进行数据采集,将获取数据的以下几个方面展现给用户。

课程缩略图:课程缩略图以图片的形式展示课程的一些基本信息。

课程简介:简明扼要的介绍该课程的学习内容,学习目标,课程亮点等内容。

课程评分:来自其他已学习用户的星级评分、短评、长评,很大程度上能反应一个课程的好坏。

章节目录:课程具体的章节。

讲师介绍:授课老师的相关信息展示。

价格:用户做出选择的重要参考指标。

学习人数:从课程发布至今的所有学习人数,能够体现出课程的火热程度。

2.2.2 评价系统模块

基于用户打造的评价系统,有星级评价,短评,长评功能等选择。

星级评价:评价的结果采用星级区分,星级分为9 个等级,即:1 星、1 星半、2 星、2 星半、3 星、3 星半、4 星、4 星半、5 星。 通过用户的打分,用量化的方式体现结果,这种等级与分数的体现方式给用户对课程好坏的分辨提供了直观的参考。

短评:用户结合自己实际学习过程中对课程的感受,针对课程难易程度、课程质量、课程定位是否精准等问题发表的简短精炼的看法。

长评:对课程全方位的分析,对于质量较高,影响力大,给用户了解课程提供很大帮助的长评可以采用现金奖励制度。

在该系统下,用户不仅是信息的提供者,也是信息的受益者,作为一个对用户友好、透明、公开的评价系统,无论是否学习过该课程,用户都可以通过该系统自由的发表自己的看法,并且可以与同样对此课程感兴趣的其他用户交流。

2.2.3 用户模块

收藏功能,关注功能:对感兴趣的课程点击收藏按钮,方便日后在收藏夹中查找。对喜欢的评论者可以点击关注按钮,关注后会在社区服务中推送所关注用户发布的信息。

浏览记录:用户浏览过某些课程后觉得很感兴趣,但关闭窗口后会遇到找不到原来的课程的窘境,平台可以提供浏览记录功能,方便用户快速找到曾经浏览过的课程。

历史评论:用户对于任何课程的评论都将在用户模块的历史评论中展示,用户可以对自己写过的评论进行修改、删除等操作。

消息:根据平台所提供的多种功能,用户可能会有多种信息来源,如收藏课程的最新短评、长评,社区服务回复或相关信息、平台的官方通知等等。

我的空间:用户的个人空间将展示用户的历史评论,收藏的课程,在学的课程,学过的课程,个人空间还可以提供成就系统,记录用户的学习里程碑。

2.2.4 智能推送模块

基于课程标签分类的智能推荐系统,通过识别和预测用户的各种兴趣或偏好,从而有针对性地、及时地向用户主动推送所需信息,以满足不同用户的个性化需求。

3 具体实现

3.1 数据采集

本文实现的爬虫将以“CSDN 学院”为爬取目标,爬取网站课程的基本信息,包括课程名称、课程分类、平台名称、课程标签、课程宣传图片、课程链接、课程简介、发布时间、学习人数、价格、时长和讲师信息,还将爬取用户所发表的评论内容,包括用户名称、用户头像、发布时间、用户评价。

该爬虫有三个主要模块,分别是规则预设模块、网页抓取模块和存储模块。

3.1.1 规则预设模块

规则预设模块包括USER_AGENT(用户代理)、ROBOTSTXT_OBEY(Robot 协议遵守)、LOG_LEVEL(日志等级)等设定,为了后续的数据存储,还需要在item.py规定相应的数据格式。部分处理代码如下:

3.1.2 网页抓取模块

网页抓取模块负责对初始网页url 发起请求,使用lxml对请求数据进行解析,从初始网页数据中抽取出课程详情页url,再对详情页url 发起请求并解析,然后使用xpath 定位获取相关的课程基本信息。整个网页抓取流程如图1 所示。

图1:网页抓取流程

在抓取用户评论信息时发现CSDN 学院采用了动态加载的方式,对于动态加载的数据请求,可以通过Scrapy 的下载中间件(Downloader Middlewares)来发送Ajax 请求或者调用Selenium 浏览器自动化。

网页抓取的核心代码如下:

(1)该类会对start_urls 自动发起请求,响应数据将返回给该类下的parse 方法。

(3)通过yield 语句对课程详情页url 发起请求,并通过 callback 参数为这个请求添加回调函数,在请求完成之后会将响应数据作为参数传递给回调函数,而meta 参数则是封装了当前函数中的一些数据,可以在回调函数中使用response.meta 调用。

(4)最后将抓取的数据通过yield item 语句提交给Item Pipeline(管道):它负责处理Spider 中获取到的Item,并进行后期处理(详细分析、过滤、存储等)。

3.1.3 存储模块

Scrapy 爬虫框架进行持久化存储的方式有很多种,例如CSV 文件,Excel 文件,MySql 数据库,SqlServer 数据库等。本文将使用SqlServer 进行数据存储。(实际开发中建议使用开源的MySql 数据库来降低成本。)

(1)首先创建数据库表Course 用于存储数据。如表1所示:

表1:数据库表Course 部分内容

(2)创建数据库连接,在pipelines.py 文件中编写类CsdnPipeline,并在类的__init__方法中建立和数据库的连接。相关代码如下:

(3)接下来将封装在item 字典中的数据插入数据库。相关代码如下:

3.2 数据可视化

本文中数据可视化用到的是ECharts 开源可视化图表库,基于JavaScript。

下面对采集和处理后的部分数据进行可视化展示。

3.2.1 平台课程分布

在线教育平台课程包含的种类数量,往往也会影响人们的选择,本文对CSDN 学院的课程分布情况进行了词云可视化展示。

利用词云清晰的展现了CSDN 学院中各个课程类型所出现的频率,编程语言相关课程在该平台中占比较大,这也符合CSDN 学院本身IT 行业的定位。

3.2.2 同类课程比较

点赞数、播放量、好差评等指标很大程度上决定了用户对于课程的选择,本文对同类课程各类指标进行了分析比较。

用户可以根据该图对比‘自然语言处理’类课程的相关指标,参考具体的评论内容,然后结合自己的学习状态,选择最合适的课程进行学习和研究。

3.2.3 推荐平台组成

使用饼图展示本平台上近一个月访问次数靠前的几大在线教育平台。可以帮助用户快速定位当前热门访问的在线教育平台,从而在优秀平台上获取资源。

3.3 前端开发

(1)课程基础信息模块。平台前端采用了Vue 进行开发,其能够自动追踪依赖的模板表达式和计算属性,提供MVVM(Model-View-ViewModel) 数据绑定和一个可组合的组件系统,具有简单、灵活的 API,通过获取指定课程的内容,从后台的接口中获取信息,并且渲染到页面上对用户进行展示。

(2)评价模块。验证用户的cookie 后,用户可以在课程或者平台下方发表相关的评价。评价内容在传入数据库之前,使用自然语言处理技术进行判断,区分好评和差评,然后进行提交和展示。

(3)用户模块。用户在首页进行登录后,即可进入自己的个人中心,可以修改自己的信息和头像,也可以查看自己的课程浏览记录。

(4)后台管理。基于Vue 开发后台管理系统,在平台的后期运作中,将后端的一些接口封装到后台管理系统中,例如在线教育平台和在线课程相关内容的增删改查操作,使管理者可以更好的进行数据的整理和修改操作。

3.4 后端开发

平台后端采用SprintBoot 框架[4]进行开发,Spring 框架是Java 平台上的一种开源应用框架,SpringBoot 基于Spring4.0 设计,不仅继承了Spring 框架原有的优秀特性,而且还通过简化配置来进一步优化了Spring 应用的整个搭建和开发过程。除此之外,本文还运用Python 实现了基于课程标签分类的智能推荐系统以及用于评论情感分析的自然语言处理技术。下面将详细介绍后端开发内容。

3.4.1 平台各模块数据交互

(1)用户模块(User)。前端用户模块更多的是实现用户相关信息如何展示问题,与前端的用户模块不同,后端的用户模块需要处理的问题更偏向于用户数据的交互和存储。具体要解决的问题有用户登录注册、验证码校验、密码加密存储、用户权限管理以及用户信息存储等。

与用户相关的认证、授权、加密及权限管理将使用Shiro 框架整合JWT 来实现,Apache Shiro 是Java 的一个安全框架,主要由四大功能构成,分别是1、Authentication:身份认证/ 登录,2、Authorization:授权,3、Session Manager:会话管理,4、Cryptography:加密。而JSON Web Tokens (JWT)是目前最流行的跨域身份验证解决方案,相比于Session,JWT 具有可扩展性好,无状态等优点,适用于分布式架构,并且可以在JWT 的载荷中存储一些常用信息,能够有效降低服务器访问数据库的次数。

(2)平台模块(Platform)。平台模块主要是存储各个在线教育平台的相关信息并且实现与前端交互的接口。存储平台信息的数据库表结构如表2 所示:

MyBatis 是一款优秀的持久层框架,它支持自定义SQL、存储过程以及高级映射。本文使用Mybatis 实现与数据库的连接与交互。根据平台id 从数据库中查找平台详细信息如下所示:

平台模块中与前端交互的接口将在Controller 层实现,Controller 层是MVC 模型中的控制器层,Controller 层负责将用户提交来的请求通过对URL 的匹配,分配不同的接收器进行处理,然后向用户返回结果。平台模块中主要有以下四个控制类,分别是PlatformScoreController(平台评分控制类)、PlatformController(平台控制类)、PlatformComment Controller(平台评论控制类)、CategorysController(平台类别控制类)。各控制类中主要实现的是对应服务的增删改查功能,根据url 来区分不同的接口,便于前端根据业务需求来请求响应数据。

(3)课程模块(Course)。课程模块是平台架构中第三部分的核心内容,也是后端开发中最复杂的内容。其不仅包含了课程基础信息的数据交互接口,还承担了整个评价系统的运行以及智能推荐系统中规则库的数据传输。

该模块实现的功能有缓存管理、跨域配置、控制层(Controller)、模型层(Model)、服务层(Service 层)、异常处理机制、接口返回数据格式管理、Mybatis 通用mapper(负责和数据库建立连接)、身份验证以及权限管理。

3.4.2 智能推荐系统

本文实现的是基于课程标签分类的智能推荐系统,该系统的核心是规则库的构建和推理引擎的优化。

(1)规则库的构建。规则库由两部分组成,分别是Conclusion(结论)和Fact(前提或事实)。Fact 在规则库中称作前提,在用户输入的关键词或者用户行为数据中Fact称为事实。Conclusion 可以是课程标签,也可以是课程唯一索引(课程id 号),当Conclusion 是课程标签时,会加入事实列表继续推理,当Conclusion 是课程id 时,将会作为推理结果保存下来,推理结束时,根据这些id 号从数据库中获取对应的课程信息。

在规则库的构建中使用自然语言处理对课程标题和简介进行分析,提取关键词作为推理的前提加入规则库。并且将规则库和课程信息存储在云端,增加系统的可移植性和数据的安全性。同时引入匹配度的概念,能够更好的匹配直接相关和间接相关的课程。假设一次匹配过程中某规则的匹配度为D,匹配的事实数量为F,该规则的前提数量为P,则D= (F/P) * 100%。

(2)推理引擎的优化。当规则库和课程量逐渐增大时,系统推理所需要的时间也会随之增大,且是指数型增长。考虑使用神经网络来训练推理系统,将前提作为神经网络的输入,结论作为神经网络的输出,现有的规则库作为训练集对该网络进行训练,以实现对于特定的输入,系统能做出精准的课程推荐。具体步骤如下:

(1)使用Word2vec 进行词嵌入,完成语言到数值的转换。

(2)使用现有的推荐引擎进行批量的推理,将推理的前提和记录存储下来,做为训练集。

(3)根据上一步获得的训练集来训练神经网络。

3.4.3 自然语言处理

使用深度学习中的LSTM 模型来对爬取的课程评价做情感分析,使用Embedding + LSTM + Softmax 训练模型,将获取的数据集作为训练集,然后把训练得到的模型放入服务器中运行,从而在用户进行评价提交的过程中,能够准确的为用户的评语分类,高效的进行评价内容的情感分析。

(1)建立情感词典,将原始数据进行分词,存入词典中。相关代码如下:

(2)进行模型训练,使用训练集建立模型。相关代码如下:

(3)进行结果的测试和验证。自然语言处理的结果如下所示:

4 结语

随着互联网的发展,新兴的课程形态层出不穷,以中国大学MOOC(慕课)为代表的国家精品课程在线学习平台和以B 站为代表的综合性视频学习平台,都广受年轻人喜爱。为了使用户可以快速获取感兴趣的课程以及真实的学习体验与评价信息,本文设计并实现了一种面向有在线学习需求用户的第三方网课评价平台。该平台提供一个对用户友好、透明、公开的评价系统,无论是否学习过该课程,用户都可以自由的发表自己的看法,并且可以与同样对此课程感兴趣的其他用户交流。依托于数据采集(基于Scrapy 爬虫框架)和数据可视化技术,平台对网络上现有的不同学习网站的同类课程进行分析比较,并以图表的形式反馈给用户,便于用户更加直观的了解这些课程的优缺点从而做出选择。人性化的智能推荐算法将通过用户的使用习惯推荐用户可能喜欢的课程,从而提升用户使用体验。

点评网站的模式在餐饮业和电影行业早有应用,人们熟知的平台有大众点评,豆瓣网等。随着社会竞争压力的逐渐增大,人们对知识和学历的获取也越来越感到焦虑,无论是在线职业教育还是在线考研考公教育等相关平台仍然在蓬勃发展中。在此背景下,一个第三方的网课评价平台能够让消费者在知识付费前通过该渠道了解到真实的网课信息,从而做出性价比更高的选择。

猜你喜欢
爬虫框架数据库
利用网络爬虫技术验证房地产灰犀牛之说
基于Python的网络爬虫和反爬虫技术研究
广义框架的不相交性
利用爬虫技术的Geo-Gnutel la VANET流量采集
大数据环境下基于python的网络爬虫技术
WTO框架下
一种基于OpenStack的云应用开发框架