在当今信息爆炸的时代,互联网已经成为人们获取信息、交流思想的重要平台。作为国内领先的弹幕视频网站,Bilibili凭借其独特的弹幕文化和丰富的内容生态,吸引了亿万用户的关注。这些用户生成的海量数据蕴含着丰富的信息,对于理解用户行为、分析市场趋势、优化产品设计等方面具有极高的价值。因此,设计一个基于Python爬虫技术的Bilibili网用户数据采集系统,对于数据挖掘和分析具有重要意义。
爬虫技术作为网络数据获取的重要手段,已经在多个领域得到了广泛应用。Python作为一种功能强大、易于学习的编程语言,凭借其丰富的库和框架,为爬虫开发提供了极大的便利。通过Python编写的爬虫程序,可以高效地抓取网页数据,为后续的数据处理和分析提供基础。
在设计和实现Bilibili网用户数据采集系统时,我们需要考虑以下几个方面:要确保爬虫程序能够稳定、高效地运行,以应对Bilibili网站庞大的数据量;同时,要遵循网站的爬虫协议和法律法规,确保数据采集的合法性和合规性;最后,要对采集到的数据进行有效的清洗和处理,以保证数据的质量和可用性。
本文旨在介绍基于Python爬虫技术的Bilibili网用户数据采集系统的设计与实现过程。通过详细阐述系统的架构、关键技术和实现细节,希望能够为相关领域的研究人员和实践者提供有益的参考和借鉴。同时,也希望通过本文的探讨,能够推动爬虫技术在数据采集和分析领域的应用和发展。
关键词:Django;用户数据采集系统;Python;爬虫技术
Abstract
In the era of information explosion, the Internet has become an important platform for people to obtain information and exchange ideas. As a leading bullet screen video website in China, Bilibili has attracted the attention of billions of users with its unique bullet screen culture and rich content ecosystem. The massive amount of data generated by these users contains rich information, which is of great value for understanding user behavior, analyzing market trends, optimizing product design, and other aspects. Therefore, designing a Bilibili user data collection system based on Python crawler technology is of great significance for data mining and analysis.
Crawling technology, as an important means of obtaining network data, has been widely applied in multiple fields. Python, as a powerful and easy to learn programming language, provides great convenience for web crawler development with its rich libraries and frameworks. A web crawler program written in Python can efficiently crawl web data, providing a foundation for subsequent data processing and analysis.
When designing and implementing a Bilibili user data collection system, we need to consider the following aspects: to ensure that the crawler program can run stably and efficiently to cope with the huge amount of data on the Bilibili website; At the same time, it is necessary to follow the website's crawling protocol and laws and regulations to ensure the legality and compliance of data collection; Finally, it is necessary to effectively clean and process the collected data to ensure its quality and availability.
This article aims to introduce the design and implementation process of a Bilibili user data collection system based on Python crawler technology. By elaborating on the system architecture, key technologies, and implementation details, we hope to provide useful references and insights for researchers and practitioners in related fields. Meanwhile, it is also hoped that through the discussion in this article, the application and development of web crawling technology in the field of data collection and analysis can be promoted.
Keywords:Django; User data collection system; Python; Crawler technology
目 录
1 绪论
1.1 选题背景和意义
在数字化时代,互联网数据已成为重要的资源,对于数据的采集、管理和分析具有极高的价值。Bilibili作为国内领先的弹幕视频网站,其用户生成的海量数据,如播放量、收藏数、投币数、分享数和点赞数等,不仅反映了用户的喜好和行为习惯,也体现了视频内容的热度和受欢迎程度。这些数据对于内容创作者、平台运营者以及广告商都具有重要的参考意义。然而,要有效地获取、管理和分析这些数据并非易事。传统的数据获取方法往往效率低下,无法满足大规模数据分析的需求。而Python爬虫技术以其高效、灵活的特性,成为了解决这一问题的有力工具。通过Python编写的爬虫程序,可以自动化地抓取Bilibili网站上的用户数据,并进行统一的管理和分析。
基于Python爬虫技术的Bilibili网用户数据采集系统的设计与实现,旨在解决这一问题。该系统不仅可以实现高效的数据采集,还可以对采集到的数据进行有效的管理,包括播放量管理、收藏数管理、投币数管理、分享数管理和点赞数管理等。通过对这些数据的管理和分析,可以深入了解用户的行为和需求,为内容创作、平台运营和广告投放提供有力的数据支持。
此外,该系统的实现还具有广泛的应用前景。随着互联网的不断发展,类似Bilibili这样的视频分享平台越来越多,用户生成的数据也越来越丰富。通过类似的数据采集和管理系统,可以对这些数据进行有效的整合和分析,为各种应用场景提供数据支持。
综上所述,基于Python爬虫技术的Bilibili网用户数据采集系统的设计与实现具有重要的选题背景和意义。它不仅可以帮助我们更好地理解和利用Bilibili网站上的用户数据,还可以推动爬虫技术在数据采集和分析领域的应用和发展。同时,该系统的实现还具有广泛的应用前景,可以为各种应用场景提供有力的数据支持。
近年来,随着大数据和人工智能技术的飞速发展,基于Python的爬虫技术在国内得到了广泛的关注和应用。尤其是在信息检索、数据挖掘、舆情分析等领域,爬虫技术发挥着越来越重要的作用。对于Bilibili网这样的大型视频分享平台,用户数据的采集和分析对于理解用户行为、优化产品设计、提高服务质量等方面具有非常重要的价值。因此,国内不少研究机构和开发者都在致力于基于Python的Bilibili网用户数据采集系统的研究与实践。
目前,国内在这方面的研究主要集中在以下几个方面:一是爬虫算法的优化,以提高数据采集的效率和准确性;二是反爬虫机制的应对,以应对Bilibili等网站日益严格的反爬虫策略;三是数据清洗和处理技术的研究,以提高采集到的数据的质量和可用性;四是数据挖掘和分析方法的研究,以发现隐藏在用户数据中的有用信息和规律。
国外研究现状:
相较于国内,国外在基于Python的爬虫技术研究方面起步较早,发展也更为成熟。许多知名的开源爬虫框架和库,如Scrapy、BeautifulSoup等,都是由国外的开发者贡献的。这些工具为爬虫系统的开发提供了便利,降低了技术门槛。
在Bilibili网用户数据采集方面,国外的研究者和开发者也在积极探索和应用爬虫技术。他们不仅关注数据采集本身的技术问题,还注重数据的隐私保护、合法合规等方面的问题。同时,随着网页结构的不断复杂化和反爬虫机制的不断升级,国外的研究者也在探索新的爬虫技术,如基于机器学习的网页解析方法、分布式爬虫技术等,以应对这些挑战。
综上所述,基于Python的Bilibili网用户数据采集系统的设计与实现在国内外都受到了广泛的关注和研究。随着技术的不断发展和进步,相信这一领域的研究将会更加深入和广泛。
本文共分为六章,章节内容安排如下:
第一章为引言,此章节对所设计和实现的系统的背景和状况以及意义进行详细的论述以及说明,同时进行了论文整体框架的结构的简要介绍。
第二章为系统需求分析,章节所做的主要的工作是对系统进行了技术、经济和操作方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第三章为系统的设计,主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第四章就是对系统的实现,根据系统功能的划分,分别的对系统所需要实现的前台客户功能和后台管理员功能进行了分析和说明。
第五章:系统测试。主要对系统的部分界面进行测试并对主要功能进行测试
2 系统分析
系统分析是开发一个项目的先决条件,通过系统分析可以很好的了解系统的主体用户的基本需求情况,同时这也是项目的开发的原因。进而对系统开发进行可行性分析,通常包括技术可行性、经济可行性等,可行性分析同时也是从项目整体角度进行的分析。然后就是对项目的具体需求进行分析,分析的手段一般都是通过用户的用例图来实现。下面是详细的介绍。
系统可行行分析是对系统对系统可行性进行一个探讨。在探讨系统的可行性上我们主要从技术上的可行性和经济上的可行性以及操作的可行性上进行分析,如果三个层面度通过,我们则认为系统是比较可行的。
技术可行性分析主要通过对现有技术的判断,来预测系统的实际开发是否存在可能性,是整个分析过程中最为关键的一个环节,决定系统的实际成功率。因此,系统在技术可行性上做出详细的分析。系统采用的是Django开发技术,这项技术比较全面,实用广泛,没有实现不了的功能需求;数据库采用的是MySQL作为存储数据,这种数据库稳定性极高,也是大众实用的数据库;最后,开发工具,采用的是Pycharm,工具中具有框架函数等,可以直接引用;通过三年多的学习与实践,对本系统的使用技术掌握已经熟练,并对相应的技术种类有一定的了解,主要运用的语言是Python。
2.1.2 操作可行性分析
此次项目设计参考了几个该模式下网站的开发案例,对他们的操作界面分析,将众多案例结合在一起,突出以人为本简化操作,所以具有基本计算机知识的人都会操作本项目。
2.1.3经济可行性分析
经济可行性分析主要是考虑在系统开发的过程中所涉及到的费用问题,从全方位角度分析,费用主要涉及人力资本费用,相关设备费用,以及维护费用等。本次系统开发的整体规模都比较小,涉及到的费用较低,对于个人来讲,都可以承受,为此,经济可行性的分析也是行得通的。
bilibili网用户数据采集系统主要划分为了普通用户和管理员这两大部分,具体功能描述如下:
- 普通用户功能介绍:
注册登录:提供普通用户注册新账户并进行登录的功能,以便能够访问系统的各项功能和个人信息。
后台首页:为普通用户提供一个概览系统的主要信息和功能入口,包括数据采集管理、播放量管理、收藏数管理、投币数管理、分享数管理、点赞数管理等内容,方便用户了解系统的运行情况和自己的数据采集情况。
数据采集管理:普通用户可以查看数据采集的相关信息,包括标题、分类、描述、播放量、收藏数等信息,通过输入标题、分类、用户可以进行查询、下载导入文档相关操作。
播放量管理:普通用户可以查看和管理自己关注视频的播放量信息,以便了解视频的受欢迎程度和观看趋势。
收藏数管理:用户可以查看和管理自己关注视频的收藏数信息,以了解视频的受欢迎程度和收藏情况。
投币数管理:用户可以查看和管理自己关注视频的投币数信息,以了解视频的受欢迎程度和用户付费情况。
分享数管理:用户可以查看和管理自己关注视频的分享数信息,以了解视频的受欢迎程度和用户分享情况。
点赞数管理:用户可以查看和管理自己关注视频的点赞数信息,以了解视频的受欢迎程度和用户喜爱程度。
- 管理员功能介绍:
登录:管理员需要通过用户名和密码进行登录,以获取管理后台的访问权限。
后台首页:提供管理员一个概览系统的主要信息和功能入口,包括系统概况、最新通知、待处理事项等内容,方便管理员了解系统的运行情况。
系统用户:管理员可以管理系统中的用户信息,包括普通用户和其他管理员,进行添加、编辑、删除用户等操作,以确保用户信息的完整性和准确性。
数据采集管理:管理员可以管理数据采集的任务和进度,包括添加、编辑、删除采集任务,监控采集进度和数据质量,确保数据采集的顺利进行。
播放量管理:管理员可以查看和管理系统中视频的播放量信息,以了解视频的受欢迎程度和观看趋势。
收藏数管理:管理员可以查看和管理系统中视频的收藏数信息,以了解视频的受欢迎程度和用户收藏情况。
投币数管理:管理员可以查看和管理系统中视频的投币数信息,以了解视频的受欢迎程度和用户付费情况。
分享数管理:管理员可以查看和管理系统中视频的分享数信息,以了解视频的受欢迎程度和用户分享情况。
点赞数管理:管理员可以查看和管理系统中视频的点赞数信息,以了解视频的受欢迎程度和用户喜爱程度。
bilibili网用户数据采集系统的非功能性需求比如bilibili网用户数据采集系统的安全性怎么样,可靠性怎么样,性能怎么样,可拓展性怎么样等。具体可以表示在如下2-1表格中:
表2-1bilibili网用户数据采集系统非功能需求表
安全性 | 主要指bilibili网用户数据采集系统数据库的安装,数据库的使用和密码的设定必须合乎规范。 |
可靠性 | 可靠性是指bilibili网用户数据采集系统能够按照用户提交的指示进行操作,经过测试,可靠性90%以上。 |
性能 | 性能是影响bilibili网用户数据采集系统占据市场的必要条件,所以性能最好要佳才好。 |
可扩展性 | 比如数据库预留多个属性,比如接口的使用等确保了系统的非功能性需求。 |
易用性 | 用户只要跟着bilibili网用户数据采集系统的页面展示内容进行操作,就可以了。 |
可维护性 | bilibili网用户数据采集系统开发的可维护性是非常重要的,经过测试,可维护性没有问题 |
2.3 系统用例分析
bilibili网用户数据采集系统的完整UML用例图分别如下图所示。
普通用户角色用例图如下图所示。
图2-1 普通用户角色用例图
管理员角色用例图如下图所示。
图2-2管理员角色用例图
2.4系统流程分析
2.4.1用户登录流程
对于系统的安全性的第一关,就是用户想要进入系统,必须通过登录窗口,输入自己的登录信息才可以进行登录,用户输入的信息准确无误后才可以进入到操作系统界面,进行功能模块的相对应操作,如果用户输入的信息不正确,则窗口出现提示框,用户登录失败,返回到第一步进行重新输入,如图2-3所示。
图2-3登录操作流程图
对于bilibili网用户数据采集系统,需要随时添加所需要的数据信息,对于用户添加信息,需要根据添加界面,根据选框的内容进行填写所要添加的数据信息,信息输入完成后判断数据信息是否符合要求,符合要求则添加完成,用户所添加的信息不符合要求,则需要返回到第一步,重新输入数据信息,再进行判断操作,如图2-4所示。
图2-4信息添加流程图
不管是哪个用户角色进入到不通的系统操作界面,都可以进行不同的信息内容的操作功能,对用系统数据信息的删除,用户一旦将信息删除,那么该删除的数据信息将无法恢复,所以用户在对数据删除事,一定判断删除的内容是否是确定要删除的,确定无误后选择确定删除操作,如图2-5所示。
图2-5信息删除流程图
本章主要通过对bilibili网用户数据采集系统的可行性分析、功能需求分析、系统用例分析、系统流程分析,确定整个bilibili网用户数据采集系统要实现的功能。同时也为bilibili网用户数据采集系统的代码实现和测试提供了标准。
本章主要讨论的内容包括bilibili网用户数据采集系统的系统架构设计、功能模块设计和数据库系统设计。
3.1 系统架构设计
本bilibili网用户数据采集系统从架构上分为三层:表现层(UI)、业务逻辑层(BLL)以及数据层(DL)。
图3-1bilibili网用户数据采集系统系统架构设计图
表现层(UI):又称UI层,主要完成本bilibili网用户数据采集系统的UI交互功能,一个良好的UI可以打打提高用户的用户体验,增强用户使用本bilibili网用户数据采集系统时的舒适度。UI的界面设计也要适应不同版本的bilibili网用户数据采集系统以及不同尺寸的分辨率,以做到良好的兼容性。UI交互功能要求合理,用户进行交互操作时必须要得到与之相符的交互结果,这就要求表现层要与业务逻辑层进行良好的对接。
业务逻辑层(BLL):主要完成本bilibili网用户数据采集系统的数据处理功能。用户从表现层传输过来的数据经过业务逻辑层进行处理交付给数据层,系统从数据层读取的数据经过业务逻辑层进行处理交付给表现层。
数据层(DL):由于本bilibili网用户数据采集系统的数据是放在服务端的mysql数据库中,因此本属于服务层的部分可以直接整合在业务逻辑层中,所以数据层中只有数据库,其主要完成本bilibili网用户数据采集系统的数据存储和管理功能。
在上一章节中主要对系统的功能性需求和非功能性需求进行分析,并且根据需求分析了本bilibili网用户数据采集系统中的用例。那么接下来就要开始对本bilibili网用户数据采集系统的架构、主要功能开始进行设计。bilibili网用户数据采集系统根据前面章节的需求分析得出,其总体设计模块图如下图所示。
图3-2 bilibili网用户数据采集系统功能模块图
3.3 数据库设计
数据库设计一般包括需求分析、概念模型设计、数据库表建立三大过程,其中需求分析前面章节已经阐述,概念模型设计有概念模型和逻辑结构设计两部分。
3.3.1 数据库概念结构设计
下面是整个bilibili网用户数据采集系统中主要的数据库表总E-R实体关系图。
图3-3 bilibili网用户数据采集系统总E-R关系图
3.3.2 数据库逻辑结构设计
通过上一小节中bilibili网用户数据采集系统中总E-R关系图上得出一共需要创建很多个数据表。在此主要罗列几个主要的数据库表结构设计。
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
3 | info | text | 65535 | 0 | Y | N | ||
4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
7 | position | varchar | 32 | 0 | Y | N | 位置: | |
8 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
9 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
10 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
11 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
12 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
13 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
14 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
15 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
16 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
17 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
18 | option | text | 65535 | 0 | Y | N | 配置: | |
19 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
20 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | data_acquisition_id | int | 10 | 0 | N | Y | 数据采集ID | |
2 | title | text | 65535 | 0 | Y | N | 标题 | |
3 | classification | varchar | 64 | 0 | Y | N | 分类 | |
4 | describe | text | 65535 | 0 | Y | N | 描述 | |
5 | user | varchar | 64 | 0 | Y | N | 用户 | |
6 | playback_volume | varchar | 64 | 0 | Y | N | 播放量 | |
7 | collection_volume | varchar | 64 | 0 | Y | N | 收藏量 | |
8 | number_of_coins_invested | varchar | 64 | 0 | Y | N | 投币数 | |
9 | number_of_shares | varchar | 64 | 0 | Y | N | 分享数 | |
10 | like_count | varchar | 64 | 0 | Y | N | 点赞数 | |
11 | account | varchar | 64 | 0 | Y | N | 账号 | |
12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | like_count_id | int | 10 | 0 | N | Y | 点赞数ID | |
2 | classification | varchar | 64 | 0 | Y | N | 分类 | |
3 | user | varchar | 64 | 0 | Y | N | 用户 | |
4 | like_count | int | 10 | 0 | Y | N | 0 | 点赞数 |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表number_of_coins_invested (投币数)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | number_of_coins_invested_id | int | 10 | 0 | N | Y | 投币数ID | |
2 | classification | varchar | 64 | 0 | Y | N | 分类 | |
3 | user | varchar | 64 | 0 | Y | N | 用户 | |
4 | number_of_coins_invested | int | 10 | 0 | Y | N | 0 | 投币数 |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | number_of_collections_id | int | 10 | 0 | N | Y | 收藏数ID | |
2 | classification | varchar | 64 | 0 | Y | N | 分类 | |
3 | user | varchar | 64 | 0 | Y | N | 用户 | |
4 | collection_volume | int | 10 | 0 | Y | N | 0 | 收藏量 |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | number_of_shares_id | int | 10 | 0 | N | Y | 分享数ID | |
2 | classification | varchar | 64 | 0 | Y | N | 分类 | |
3 | user | varchar | 64 | 0 | Y | N | 用户 | |
4 | number_of_shares | int | 10 | 0 | Y | N | 0 | 分享数 |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | playback_volume_id | int | 10 | 0 | N | Y | 播放量ID | |
2 | classification | varchar | 64 | 0 | Y | N | 分类 | |
3 | user | varchar | 64 | 0 | Y | N | 用户 | |
4 | playback_volume | int | 10 | 0 | Y | N | 0 | 播放量 |
5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | regular_users_id | int | 10 | 0 | N | Y | 普通用户ID | |
2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
3 | user_gender | varchar | 64 | 0 | Y | N | 用户性别 | |
4 | contact_phone_number | varchar | 16 | 0 | Y | N | 联系电话 | |
5 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
6 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
7 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表upload (文件上传)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
表user (用户账户:用于保存用户登录信息)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | user_id | mediumint | 8 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
15 | vip_level | varchar | 255 | 0 | Y | N | 会员等级 | |
16 | vip_discount | double | 11 | 2 | Y | N | 0.00 | 会员折扣 |
表user_group (用户组:用于用户前端身份和鉴权)
编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
整个bilibili网用户数据采集系统的需求分析主要对系统总体架构以及功能模块的设计,通过建立E-R模型和数据库逻辑系统设计完成了数据库系统设计。
4 系统详细设计与实现
bilibili网用户数据采集系统的详细设计与实现主要是根据前面的bilibili网用户数据采集系统的需求分析和bilibili网用户数据采集系统的总体设计来设计页面并实现业务逻辑。主要从bilibili网用户数据采集系统界面实现、业务逻辑实现这两部分进行介绍。
4.1普通用户功能模块
4.1.1 用户注册界面
bilibili网用户数据采集系统的用户可以进行注册登录,填写上自己的账号+密码+确认密码+昵称+邮箱+手机号等后再点击“注册”按钮后将会先验证输入的有没有空数据,再次验证密码和确认密码是否是一样的,最后验证输入的账户名和数据库表中已经注册的账户名是否重复,只有都验证没问题后即可用户注册成功。其用户注册界面展示如下图所示。
![](https://i-blog.csdnimg.cn/direct/7d2e09bf6bef48d5ae40fb038a734916.png)
图4-1注册界面图
注册代码:
def Register(self, ctx):
print("===================注册=====================")
userService = service_select("user")
body = ctx.body
if "username" not in body and body["username"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名不能为空",
}
}, ensure_ascii=False))
if "user_group" not in body and body["user_group"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户组不能为空",
}
}, ensure_ascii=False))
if "password" not in body and body["password"] == '':
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "密码不能为空",
}
}, ensure_ascii=False))
post_param = body
post_param['nickname'] = body["nickname"] or ""
post_param['password'] = md5hash(body["password"])
obj = userService.Get_obj({"username": post_param['username']}, {"like": False})
if obj:
return ctx.response(json.dumps({
"error": {
"code": 70000,
"message": "用户名已存在",
}
}, ensure_ascii=False))
ret = {
"error": {
"code": 70000,
"message": "注册失败",
}
}
bl = userService.Add(post_param)
if bl:
ret = {
"result": {
"bl": True,
"message": "注册成功"
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
4.1.2 用户登录界面
bilibili网用户数据采集系统中的用户是可以通过自己的账户名和密码进行登录的,当用户输入完整的自己的账户名和密码信息并点击“登录”按钮后,将会首先验证输入的有没有空数据,再次验证输入的账户名+密码和数据库中当前保存的用户信息是否一致,只有在一致后将会登录成功并自动跳转到bilibili网用户数据采集系统的首页中;否则将会提示相应错误信息,用户登录界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/e68f1f1d8a19495eb4938c8db59f24b0.png)
图4-2用户登录界面图
登录代码:
def Login(self, ctx):
print("===================登录=====================")
ret = {
"error": {
"code": 70000,
"message": "账户不存在",
}
}
body = ctx.body
password = md5hash(body["password"]) or ""
obj = service_select("user").Get_obj(
{"username": body["username"]}, {"like": False}
)
if obj:
user_group = service_select("user_group").Get_obj({'name': obj['user_group']}, {"like": False})
if user_group and user_group['source_table'] != '':
user_obj = service_select(user_group['source_table']).Get_obj({"user_id": obj['user_id']}, {"like": False})
if user_obj['examine_state'] == '未通过':
ret = {
"error": {
"code": 70000,
"message": "账户未通过审核",
}
}
return ret
if user_obj['examine_state'] == '未审核':
ret = {
"error": {
"code": 70000,
"message": "账户未审核",
}
}
return ret
if obj["state"] == 1:
if obj["password"] == password:
timeout = timezone.now()
timestamp = int(time.mktime(timeout.timetuple())) * 1000
token = md5hash(str(obj["user_id"]) + "_" + str(timestamp))
ctx.request.session[token] = obj["user_id"]
service_select("access_token").Add(
{"token": token, "user_id": obj["user_id"]}
)
obj["token"] = token
ret = {
"result": {"obj": obj}
}
else:
ret = {
"error": {
"code": 70000,
"message": "密码错误",
}
}
else:
ret = {
"error": {
"code": 70000,
"message": "用户账户不可用,请联系管理员",
}
}
return ctx.response(json.dumps(ret, ensure_ascii=False))
在右上角前点击“个人信息”可以对头像、昵称、邮箱等信息进行管控。个人信息界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/ac451c60d3e24442ac6b4d1fe6342102.png)
图4-3个人信息界面图
用户使用该系统注册完成后,用户对登录密码有修改需求时,系统也可以提供用户修改密码权限。系统中所有的操作者能够变更自己的密码信息,执行该功能首先必须要登入系统,然后选择密码变更选项以后在给定的文本框中填写初始密码和新密码来完成修改密码的操作。在填写的时候,假如两次密码填写存在差异,那么此次密码变更操作失败。密码修改界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/f229cd4aa2ae47929226092d73f8047f.png)
图4-4密码修改界面图
4.1.5数据采集管理界面
普通用户可以查看数据采集的相关信息,包括标题、分类、描述、播放量、收藏数等信息,通过输入标题、分类、用户可以进行查询、下载导入文档相关操作。数据采集管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/accda6d0f02a4c3b984f8e00eb794ad8.png)
图4-5数据采集管理界面图
普通用户可以查看播放量的相关信息,包括分类、用户、播放量、创建时间、更新时间等信息,通过输入分类可以进行查询的操作。播放量管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/45c0e4b16aca48b3910ab37235aaf4a0.png)
图4-6播放量管理界面图
4.2管理员功能模块
4.2.1 管理员功能界面
管理员可以查看后台首页、系统用户、数据采集管理、播放量管理、收藏数管理、投币数管理、分享数管理、点赞数管理等,并且可以根据需要进行相应的操作。在功能界面可以查看数据采集统计、播放量统计等统计表。管理员功能界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/81c9fa58698a4e74bca8257b0333cecc.png)
图4-7管理员功能界面图
管理员可以对系统中所有的用户角色进行管控,包含了管理员、普通用户这两种角色,如果需要添加新的用户,点击页面中的“添加”按钮根据提示输入上用户信息,点击“提交”以后在对应的用户界面就可以查看到了,可以点击用户后面的“删除”按钮直接删除某一用户。系统用户管理界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/ef9879aab1824c269e4e84a9920e2003.png)
图4-8系统用户界面图
管理员点击“收藏数管理”这一菜单的时候,会出现收藏数列表这个子菜单,管理员可以查看和管理系统中视频的收藏数信息,包括分类、收藏量等信息,以了解视频的受欢迎程度和用户收藏情况。收藏数列表界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/976e339adaba4039afe9cfa81bd74072.png)
图4-9收藏数列表管理界面图
收藏数代码:
def Add(self, ctx):
body = ctx.body
unique = self.config.get("unique")
obj = None
if unique:
qy = {}
for i in range(len(unique)):
key = unique[i]
qy[key] = body.get(key)
obj = self.service.Get_obj(qy)
if not obj:
error = self.Add_before(ctx)
if error["code"]:
return {"error": error}
error = self.Events("add_before", ctx, None)
if error["code"]:
return {"error": error}
result = self.service.Add(body, self.config)
if self.service.error:
return {"error": self.service.error}
res = self.Add_after(ctx, result)
if res:
result = res
res = self.Events("add_after", ctx, result)
if res:
result = res
return {"result": result}
else:
return {"error": {"code": 10000, "message": "已存在"}}
管理员点击“投币数管理”这一菜单的时候,会出现投币数列表这个子菜单,管理员可以查看和管理系统中视频的投币数信息,以了解视频的受欢迎程度和用户付费情况。投币数列表界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/1e1a44afa3294b55b10f2a26b5d77302.png)
图4-10投币数列表管理界面图
管理员点击“分享数管理”这一菜单的时候,会出现分享数列表这个子菜单,管理员可以查看和管理系统中视频的分享数信息,以了解视频的受欢迎程度和用户分享情况。分享数列表界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/44dcc4946bb045768a5b30bcdce7546e.png)
图4-11分享数列表管理界面图
管理员点击“点赞数管理”这一菜单的时候,会出现点赞数列表这个子菜单,管理员可以查看和管理系统中视频的点赞数信息,以了解视频的受欢迎程度和用户喜爱程度。点赞数列表界面如下图所示。
![](https://i-blog.csdnimg.cn/direct/8de9cd18899645cca262074d73b2803d.png)
图4-12点赞数列表管理界面图
5系统测试
5.1 系统测试用例
系统开发到了最后一个阶段那就是系统测试,系统测试对软件的开发其实是非常有必要的。因为没什么系统一经开发出来就可能会尽善尽美,再厉害的系统开发工程师也会在系统开发的时候出现纰漏,系统测试能够较好的改正一些错误,为后期系统的维护性提供很好的支持。通过系统测试,开发人员也可以建立自己对系统的信心,为后期的系统版本的跟新提供支持。
表5-1 用户登录功能测试表
用例名称 | 用户登录系统 |
目的 | 测试用户通过正确的用户名和密码可否登录功能 |
前提 | 未登录的情况下 |
测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
实际结果 | 实际结果与预期结果一致 |
数据采集查看功能测试:
表5-2 数据采集查看功能测试表
用例名称 | 数据采集查看 |
目的 | 测试数据采集查看功能 |
前提 | 用户登录 |
测试流程 | 点击数据采集列表 |
预期结果 | 可以查看到所有数据采集信息 |
实际结果 | 实际结果与预期结果一致 |
管理员添加数据采集界面测试:
表5-3 添加数据采集界面测试表
用例名称 | 添加数据采集测试用例 |
目的 | 测试数据采集添加功能 |
前提 | 管理员正常登录情况下 |
测试流程 | 1)管理员点击数据采集,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的数据采集 |
实际结果 | 实际结果与预期结果一致 |
播放量搜索功能测试:
表5-4播放量搜索功能测试表
用例名称 | 播放量搜索测试 |
目的 | 测试播放量搜索功能 |
前提 | 无 |
测试流程 | 1)在搜索框填入搜索关键字。 2)点击搜索按钮。 |
预期结果 | 页面显示包含有搜索关键字的播放量 |
实际结果 | 实际结果与预期结果一致 |
密码修改功能测试:
表5-5 密码修改功能测试表
用例名称 | 密码修改测试用例 |
目的 | 测试管理员密码修改功能 |
前提 | 管理员用户正常登录情况下 |
测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
预期结果 | 使用新的密码可以登录 |
实际结果 | 实际结果与预期结果一致 |
管理员添加播放量界面测试:
表5-6 添加播放量界面测试表
用例名称 | 添加播放量测试用例 |
目的 | 测试播放量添加功能 |
前提 | 管理员正常登录情况下 |
测试流程 | 1)管理员点击播放量,然后点击添加后并填写信息。 2)点击进行提交。 |
预期结果 | 提交以后,页面首页会显示新的播放量 |
实际结果 | 实际结果与预期结果一致 |
通过编写bilibili网用户数据采集系统的测试用例,已经检测完毕用户登录模块、数据采集查看模块、添加数据采集界面模块、播放量搜索功能模块、密码修改模块、添加播放量功能测试,通过这6大模块为bilibili网用户数据采集系统的后期推广运营提供了强力的技术支撑。
本研究针对bilibili网用户数据采集系统地需求建模,数据建模及过程建模分析设计并实现bilibili网用户数据采集系统的过程。给出系统应用架构并分析优劣势,通过功能分解图,系统组件图描述功能需求。设计建立了数据库,给出系统关键数据结构的定义。通过类关系图描述组件间的协作关系,给出各个类的定义方法。通过描述每一个类的字段,属性及方法实现bilibili网用户数据采集系统的前后端代码。最终给出系统集成整合方法,完成bilibili网用户数据采集系统地设计与实现。
在此项目的开发中,先要按照产品经理做出的产品模型铺出大体的页面,并在其中找好页面的逻辑关系,并且中途总结一些页面上的问题重新反馈给产品经理,当静态页面的搭建的大体已经完善时,就需要和负责后台开发的技术开发者联系,来接好前后台的数据接口,可以让后台的信息在前台显示出来,在这个项目实现中,不光明白了前端开发和产品经理的联系,也明白了后台在整个系统中起到了什么作用,因为前后台的连接,用户可以对系统进行操作,可以在输入自己的相关信息后,通过后台加工,完成对数据库的查找、修改、添加,而理解了这些关系与实现的方法后。再去完善整个系统的功能就更加清晰与简单了。此次的项目它涉及了前台与后台系统的搭建,在学校所学的知识基础上,此次的项目,让我对于一个系统的前端开发,以及后台的作用都有了一个更深切的认知。
[1]苏格诺,葛筱轩,王心雨,等.智慧农业环境数据采集与远程控制系统设计[J].物联网技术,2024,14(03):137-139+142.DOI:10.16667/j.issn.2095-1302.2024.03.034.
[2]赵浩弘,曾亚光,陈勇.基于眼科参数测量仪的高速数据采集系统研究[J].现代信息科技,2024,8(05):7-11+16.DOI:10.19850/j.cnki.2096-4706.2024.05.002.
[3]肖无病,刘菲,黄结兵.基于HXDSP JESD204B的高速数据采集系统设计[J].中国集成电路,2024,33(03):32-35.
[4]钱琦珅,董胜利,韩冰.基于Linux的智能船舶数据采集系统设计[J].上海船舶运输科学研究所学报,2024,47(01):31-39.
[5]郭威,彭卫东,漆军,等.基于FPGA的大动态范围数据采集系统设计[J].仪表技术与传感器,2024,(02):56-64.
[6]周玮.基于网络爬虫技术的财务大数据采集系统设计[J].中国新技术新产品,2024,(03):37-40.DOI:10.13612/j.cnki.cntp.2024.03.023.
[7]Ishan R ,Prakash C ,K. P T , et al.Python-Based Open-Source Tool for Automating Seleno-Referencing of Chandrayaan-2 Hyper-Spectral Data Cubes[J].Journal of the Indian Society of Remote Sensing,2024,52(2):305-313.
[8]韩江鹏,尚宇,石现峰.便携式振动数据采集系统的设计[J].电子设计工程,2024,32(03):27-30+36.DOI:10.14022/j.issn1674-6236.2024.03.006.
[9]Maurer J V ,Siggel M ,Kosinski J .PyTME (Python Template Matching Engine): A fast, flexible, and multi-purpose template matching library for cryogenic electron microscopy data[J].SoftwareX,2024,25101636-.
[10]潘旻琪.配电自动化无线数据采集系统研究[J].电气传动自动化,2024,46(01):39-42.
[11]Boghetti R ,Kämpf H J .Verification of an open-source Python library for the simulation of district heating networks with complex topologies[J].Energy,2024,290130169-.
[12]石佳节,张研,李进武,等.红外探测器振动噪声自动采集系统设计[J].红外,2024,45(01):20-26.
[13]蒲明辉,赵仁东,黄学创,等.基于Modbus/TCP的电容式扭矩传感器数据采集系统设计[J].仪表技术与传感器,2024,(01):46-51.
[14]徐敬波,田永强,赵振学,等.油库多源设备数据采集和处理系统设计研究[J].自动化仪表,2024,45(01):80-85.DOI:10.16086/j.cnki.issn1000-0380.2022090035.
[15]张璇,王筱蓉,姜熠豪,等.基于LabVIEW的定容燃烧弹控制与数据采集系统设计[J].河北工业科技,2024,41(01):69-76.
[16]Xavier V .Machine Learning Theory and Applications:Hands‐on Use Cases with Python on Classical and Quantum Machines[M].John Wiley Sons, Inc.:2024-01-12.
[17]陈晓媛.基于大数据的计量数据采集与存储系统设计[J].集成电路应用,2024,41(01):122-123.DOI:10.19339/j.issn.1674-2583.2024.01.050.
[18]谭光兴,甘景,戚秋晨.基于Java语言的远程数据采集系统设计与实现[J].科技与创新,2024,(01):19-22.DOI:10.15913/j.cnki.kjycx.2024.01.005.
[19]McBrayer N D ,Signoretti C ,Pesce M , et al.Development of a Python-based electron ionization mass spectrometry amino acid and peptide fragment prediction model.[J].PloS one,2024,19(2):e0297752-e0297752.
[20]赖义汉,王宇松,傅智河.基于RS485通信的远程数据采集系统设计[J].新乡学院学报,2023,40(12):36-41.
逝者如斯夫,不舍昼夜。转眼间,大学生活便已经接近尾声,人面对着离别与结束,总是充满着不舍与茫然,我亦如此,仍记得那年秋天,我迫不及待的提前一天到了学校,面对学校巍峨的大门,我心里充满了期待:这里,就是我新生活的起点吗?那天,阳光明媚,学校的欢迎仪式很热烈,我面对着一个个对着我微笑的同学,仿佛一缕缕阳光透过胸口照进了我心里,同时,在那天我认识可爱的室友,我们携手共同度过了这难忘的两年。如今,我望着这篇论文的致谢,不禁又要问自己:现在,我们就要说再见了吗?
感慨莫名,不知所言。遥想当初刚来学校的时候,心里总是想着工科学校会过于板正,会缺乏一些柔情,当时心里甚至有一点点排斥,但是随着我对学校的慢慢认识与了解,我才认识到了她的美丽,她的柔情,并且慢慢的喜欢上了这个校园,但是时间太快了,快到我还没有好好体会她的美丽便要离开了,但是她带给我的回忆,永远不会离开我,也许真正离开那天我的眼里会满含泪水,我不是因为难过,我只是想将她的样子映在我的泪水里,刻在我的心里。最后,感谢我的老师们,是你们教授了我们知识与做人的道理;感谢我的室友们,是你们陪伴了我如此之久;感谢每位关心与支持我的人。
少年,追风赶月莫停留,平荒尽处是春山。
免费领取项目源码,请关注❥点赞收藏并私信博主,谢谢~