1、本人签名: 日期: 2015.5.15 摘要随着社会的进步与电脑的普及,网络逐渐取代了传统的信息平台,成为人们迅速获得和发布资讯的重要工具。在这一背景下,在线数字音乐服务因为其方便、快捷的特点受到大众的普遍欢迎。目前虽然数字音乐服务提供商众多,却同质化现象严重,跟不上部分用户的需求。互联网上的歌曲难以计数,然而用户想要找到自己喜欢的歌曲往往要花费大量的精力去搜索歌曲和浏览各种歌单。本文力求通过开发一个音乐网站,通过数据爬取与算法分析,使得人们找到自己喜欢的歌曲不再困难。该音乐网站采用B/S结构进行开发。使用python + tornado + mysql +redis搭建该网站系统。在软件工程
2、相关规范的约束下,结合实际情况对系统进行开发。 本文首先介绍了目前市面上的音乐电台存在的问题,并且介绍开发环境及开发者运用到的关键技术。之后对网站系统的一些关键技术进行研究和实现。关键词:音乐电台;网络电台;B/S结构 ABSTRACTAs our society develops, computer is becoming more and more important in our daily life , and Internet becomes an important medium for people to get the information quickly. In this
3、context , because online digital music service is convenient and fast, it is welcomed by the general public. Although there are many digital music service providers, but they failed to meet the demand of some of the users. The songs on the Internet are difficult to count, however, that the user need
4、s to spend a lot of energy to search for songs and browse all kinds of playlist in order to find songs they enjoy. This article seeks to develop a music website, so that users can easily find their favorite songs. The music website uses B/S structure to develop. Use python+tornado+mysql+redis to bui
5、ld the website system. The whole system development process followed the software engineering related specification and the actual situation.This paper first introduces the existing problems of the music websites, and then introduces the development environment and the key technology which the autho
6、r uses. Then we studyand realize some keytechnologies of the website system.Key words: music radio ;Web crawler ;B/S structure1 绪论1.1论文的选题的目的和意义随着社会的进步与电脑的普及,互联网成为人们快速获取传递信息的重要媒介。例如豆瓣FM需要用户花费大量的时间来调试电台,让电台学习用户独特的口味;世面上已经有根据情绪来推荐歌曲的应用,比如jing.fm和XX音乐,但是他们推荐的音乐和用户的喜好并没有关联,推荐的只是比较流行的音乐;另外诸如酷狗音乐,QQ音乐这些大型
7、音乐收听平台,虽然乐库庞大,但是对音乐的分类粗糙,用户想要找到自己喜爱的音乐往往如同大海捞针一般艰难。对于一些喜欢花费时间享受音乐的用户而言,把时间浪费到自己并不感兴趣的曲目上会大大减小音乐带来的乐趣。 本音乐电台能根据用户自己的音乐喜好,来推荐相应的情绪音乐;音乐电台能够在知晓用户的音乐口味下,播放用户曾经喜欢的歌曲以及推荐用户有可能感兴趣的歌曲。用户同时可选择相应的情绪来收听情绪电台。本电台通过api爬取用户在last.fm上大量的收听记录,对用户的音乐口味更为准确,且几乎无需花费时间来学习用户口味;用户可以选择相应的情绪电台.1.2国内外关于该论题的研究现状和发展趋势在欧美社会,数字音乐
8、已经发展地相当成熟。因为互联网的普及极大地降低了数据流动的成本,以及音乐这种媒介非常容易被数字化的特征,音乐数据在互联网上被快速广泛得传播是必然的事情,相对于从传统的唱片店里购买CD,通过互联网搜索和下载音乐更加的快捷、经济和方便。目前在数字音乐领域,国外占主导地位的有以iTunes为代表的音乐搜索与下载模式,以潘多拉网络电台为代表的歌曲分类与个性推荐模式,和以last.fm为代表的社交音乐推荐模式。iTunes乐库丰富,用户通过搜索可以轻易地下载自己喜欢的歌曲,通过歌曲榜单和歌曲分类,用户可以探索自己可能感兴趣的音乐。潘多拉网络电台颠覆了以往的音乐电台模式,具体地讲这个电台其实就是一个针对用
9、户高度定制的个性化电台。通过用户对所播放歌曲的反馈行为(喜爱或者讨厌)以及歌曲本身的一些属性,找到与之风格相似的的音乐,推荐给用户。与传统播放器不同的是,潘多拉网络电台没有音乐播放列表,用户无法选定下一首歌曲,这样一来用户可以专注于音乐本身,从而提供一种连续的音乐体验。Last.fm的用户交互与潘多拉网络电台比较相似,不同的是为用户推荐歌曲的算法有所不同。潘多拉网络电台中每首音乐都有对应的风格、情绪等一系列属性,电台通过这些属性来推荐可能符合用户口味的歌曲。Last.fm的设计思想则是,如果两个用户同时喜欢同一首歌曲或者相同的几首歌曲,那么用户A喜欢听的其它歌曲中有很大几率也符合用户B的口味,
10、从而针对性的进行歌曲的推荐。目前,国内的音乐网站也如雨后春笋般层出不穷,老牌的音乐网站有酷狗音乐、QQ音乐等;还有对国外音乐网站的借鉴产品,例如豆瓣fm、虾米音乐等;在智能机日益普及的今天,也涌现出一大批移动端的音乐应用,例如天天动听,多米音乐等。但是目前国内音乐网站缺乏原创性以及对版权的保护,大多数只是对国外同类网站的简单模仿。对于用户而言,很难满足一些个性化的需求,通常一个用户要找到一首符合自己口味的歌曲会花费大量的时间,难以体会到音乐带给人的愉悦和心灵上的享受。此外,国内音乐网站同质化趋势严重,各大音乐网站没有自己的特色,仅仅在外观设计上有所区别,而内容模块基本上大同小异,千篇一律的都是
11、一些“推荐歌曲”,“音乐榜单”,“推荐歌单”,“分类乐库”等内容,久而久之使得用户产生审美疲劳。在中国已成为世界网民最多国家的今天,数字音乐在我国有着巨大的发展空间。我们不应该仅仅满足于对国外技术的模仿,更应该自主创新,才能抓住这一巨大市场,在业内竞争中取得优势地位。1.3 论文主攻方向本论文所研究的主要内容是设计能够为用户提供个性化歌曲的音乐电台,对电台界面进行设计,开发针对Last.fm个人网站的网络爬虫,并提高网络爬虫的性能。1.4 论文的主要内容 本文分为五章。 第一章绪论,介绍了本文的研究目的和意义,以及国内外在此方面的研究现状,并说明了本文的研究内容。 第二章开发环境及关键技术,介
12、绍了音乐电台的开发的环境及关键技术,包括python编程技术、json可拓展标记语言、tornado、MySQL、Redis、Nginx服务器。 第三章为音乐网站概要设计,对网站进行了需求分析,界面设计以及一些总体上的把握。 第四章为数据库的设计。 第五章是网络爬虫的设计和实现与网站各模块的实现。1.5 论文的研究方法和技术路线 本论文主要采用B/S的结构,使用python+tornado+mysql+redis的框架和技术来开发这个系统。 其中B/S结构就是浏览器/服务器结构,传统的客户端/服务器结构(C/S)有着客户端负担重的缺点,采用B/S架构的应用,客户端只需要有浏览器即可,极大的减少
13、了客户端的负荷。而且B/S架构的应用界面也比C/S架构应用界面更加美观、大方。因此本系统采用的就是B/S结构。当然,C/S结构的应用也有它的优点,它的安全性更高,可能功能性也更加强大,但是本系统的功能已可以在B/S架构下实现,所以,B/S架构就是本系统的最适合的结构。Mysql是一个关系型数据库管理系统,它创建数据库非常简单,它占据了中小型企业Web开发数据库使用的大部分市场。即使是一些大型的企业,也有的会使用Mysql作为其web应用的数据库。Mysql数据库的优点是体积小,速度快,而且拥有成本极低。tornado框架是目前最流行的python Web应用开发框架,它强大的标签库以及精妙的架
14、构设计无一不使得开发者开发程序变得轻松而富有创造性。2 技术支持2.1 python编程技术 在1989年圣诞节期间,著名的Guido van Rossum在圣诞节期间没有事情可做,为了打发时间,他编写了一门编程语言,这就是python。现在,全世界的编程语言五花八门,加起来有数百种,但其中的佼佼者大概有二十来种。而Python语言在最近的十年,一直能够屹立于TIOBE排行榜前十,所以这是一门十分优秀的编程语言。同样作为编程语言中的常青树,c语言和Python相比,更加的贴近硬件。因此,当程序员需要编写的程序对运行速度和性能的要求更加苛刻时,他们往往会偏向于使用C语言。而Python作为为编写
15、应用程序而生的高级语言,它的基础代码库异常的丰富和繁杂,包括了文件、网络、数据库、文本、GUI等各式各样的内容。所以通过Python来进行程序开发是一件非常简单的过程,因为有大量现成的代码可以使用,不需要程序员从头编写。总而言之,Python代码是简洁,优雅的代名词。有很多类型的应用都适合用python进行开发,比如一些网络应用,脚本任务等等。2.2 json可拓展标记语言 JSON 是一种轻量级的数据交换格式,易于机器解析和生成,同时也方便人们阅读和编写。Json被用来储存和交换文本信息,和xml有着相似的功能。我们在javascript中不需要任何其它数据包就可以处理json数据,因为js
16、on是javascript的原生格式。Json的文本格式完全独立于语言,而且由于它的语言习惯和从语言家族类似,所以它常常被用来作为数据交换语言。与XML相比较,json的优势在于网络传输更加方便,但是却不够一目了然。2.3 tornado Tornado 是一个开源的网络服务器框架,该平台基于社交聚合网站 FriendFeed 的实时信息服务开发而来。它是 FriendFeed 使用的可扩展的非阻塞式 web 服务器及其相关工具的开源版本。这个 Web 框架看起来有些像 web.py 或者 Google 的 webapp,不过为了能有效利用非阻塞式服务器环境,这个 Web 框架还包含了一些相关
17、的有用工具和优化。 Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。得利于其非阻塞的方式和对 epoll 的运用,Tornado 每秒可以处理数以千计的连接,这意味着对于实时 Web 服务来说,Tornado 是一个理想的 Web 框架。Tornado 是个轻量级框架,它的模块不多,最重要的一个模块是web,它就是包含了 Tornado 的大部分主要功能的 Web 框架。其它的模块都是工具性质的,以便让web模块更加有用.2.4 MySQL MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开
18、发,目前属于Oracle公司。MySQL作为最流行的关系型数据库管理系统,在Web应用方面是最好的RDBMS(Relational Database Management System,关系数库管理系统)应用软件之一。 MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。MySQL软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站的数据库。由于其社区
19、版的性能卓越,搭配PHP和Apache可组成良好的开发环境。由于自己开发只是一个小型的Web应用,这个应用仅仅涉及了五张数据表,所以在开发的过程中采用了MySQL数据库。同时为了便于对于数据库数据进行管理,自己采用了MySQL workbench这一款数据库管理工具,只需要简单的配置,就能对MySQL数据库进行管理。 MySQL具备很多特性:使用C和C+编写,并使用了多种编译器进行测试,保证源代码的可移植性;支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统;为多种编程
20、语言提供了API。这些编程语言包括C、C+、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等;支持多线程,充分利用CPU资源;优化的SQL查询算法,有效地提高查询速度;既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名;提供TCP/IP、ODBC和JDBC等多种数据库连接途径;提供用于管理、检查、优化数据库操作的管理工具;可以处理拥有上千万条记录的大型数据库。 MySQL提供很多种链接方法,其中JDBC就是一种很
21、常用的Java数据库连接方法,它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。2.5 Redis Redis是一个key-value存储系统。和Memcached类似,但是解决了断电后数据完全丢失的情况,而且她支持更多无化的value类型,除了和string外,还支持lists(链表)、sets(集合)和zsets(有序集合)几种数据类型。这些数据类型都支持push/pop、add/remove及取交集并集和差集及更丰富的操作
22、,而且这些操作都是原子性的。Redis在很多方面与其他数据库解决方案不同:它使用内存提供主存储支持,而仅使用硬盘做持久性的存储;它的数据模型非常独特,用的是单线程。另一个大区别在于,用户可以在开发环境中使用Redis的功能,但却不需要转到Redis。Redis能够替代memcached,让用户的缓存从只能存储数据变得能够更新数据,因此用户不再需要每次都重新生成数据了。2.6 Nginx Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第
23、一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。Nginx 可以在UNIX、GNU/Linux、BSD、Mac OS X、Solaris,以及Microsoft Windows等操作系统中运行。Nginx 官方提供的各种功能模块应有尽有,结合这些模块可以完整各种各样的配置要求,例如:压缩、防盗链、集群、FastCGI、流媒体服务器、Memcached 支持、URL 重写等等,更关键的是 Nginx 拥有 Apache 和其他 HTTP 服务器无法比拟的高性能。用户甚至可以在不改变原有网站的
24、架构上,通过在前端引入 Nginx 来提升网站的访问速度。2.7前端技术 CSS,即级联样式表,为网页设计和开发提供了一个全新的方法。通过 CSS,我们可以将使用 HTML(即超文本标记语言)创建的网页上显示的文本与用于描述如何显示和表示该文本(使用 CSS 进行定义)的信息完全分隔开。CSS 旨在解决问题并帮助设计者节省时间,同时它还使设计人员能够以更多的方式设计网页外观。Css的应用非常地普遍,大多数网页都会使用css技术设计外观。举一个典型的示例:某些网页以特定的方式突出显示其链接。它们的颜色不同于该页上其他文本的颜色,并且将鼠标移动到这些链接上方时,它们的颜色会发生变化或者出现下划线。
25、此操作就是通过 CSS 样式定义而不改动 HTML 代码来实现的。 Html(HyperText Markup Language),即超文本标记语言,它是以标准通用标记语言(SGML)为模板开发的下一代语言。准确的来说,html是一个规范,一个标准,通过成对的标签,它规定了在网页(Page)中每一块该显示何种内容,图片或者文字,以及其相应的排版格式。通常,html语言是会结合其他页面相关技术一起使用,以达到十分强大的界面显示效果。Html语言的标签库并不复杂,而且简单易学,随着时代的发展,它慢慢的由1.0版本过渡到5.0版本,其功能性、实用性得到不断的加强。它是基于web的应用开发的核心技术之
26、一,虽然并不如其他技术一般复杂,但是其重要性却是许多web开发技术所不能比拟的。 Jquery是一个十分优秀的轻量级javascript库,所谓javascript库,就是说它是基于javascript语言开发的,内部实现了许多重要、常用的功能的方法的一个集合。它的目的是为了使网站开发人员在实现网页交互或者说前后台交互中更加方便易行,它的核心是简单、易用,代码量少。Jquery功能强大,可以简单的操作document对象,制作动画效果,易于进行事件处理,其中,特别重要的一点是,它的为Ajax功能的使用提供了十分简单方便的接口,极大的减少了与后台交互并局部更新的代码量。通过Jquery的Api,
27、开发者们对于网站的开发可以更加具有创造性。2.8 MVC设计模式 MVC,即Model(模型)、View(视图)、Controller(控制器)。在MVC框架出现之前,java web开发者经历了Model 1 与Model 2 开发时代。早期的web应用都是静态页面,没有动态的显示效果,也无法动态的与用户进行交互。 MVC框架采用分层的思想,将web应用开发分为三层来分别开发,这不仅使得开发的目标变得更加明确也使得各层之间的耦合度得到降低,因此,降低了后期再次开发的成本,便于维护,可扩展性较强。然而,MVC框架并不总是好的,对于开发大型项目来说,自然采用MVC框架能够极大的提高工作效率,降低
28、后期维护的成本,但是对于一些小型的Web项目来说,本身功能比较简单,若采用MVC框架,则会将一些简单的代码分割成复杂的三层,既增加了代码的复杂度,也降低了代码编写的效率,并且小型web项目的维护也不像大型项目那么频繁,所以,Model 1模式在小型项目中也是有用武之地的。2.9 网络爬虫 2.9.1 网络爬虫的分类 网络爬虫通过技术和功能等不同角度有很多种分类。基于整个web的网络爬虫:简称全网爬虫,是最基本的网络爬虫。这种网络爬虫指从某一个或某几个初始种子 URL开始,对整个web的资源不断进行爬取和分析,直到满足一定的停止条件。这种网络爬虫消耗的资源非常大,需要抓取的页面非常多,所以一般被
29、用来为搜索引擎和大型网络内容提供商提供数据采集服务;基于主题的网络爬虫(也被称作聚集型网络爬虫):这种网络爬虫会定义一个主题范围,然后有选择性的爬取相关页面。区别于全网爬虫不加甄别的进行页面爬取,聚集型网络爬虫需要爬取的页面少,对于网络和硬件资源的消耗也大为减少,可以在内容方面得到更快的更新,满足人们对特定信息的需要。为了进行主题甄别,聚集型网络爬虫增加了两个模块,一个是链接评价模块,另一个是内容评价模块。通过对页面内容和链接的重要性进行计算,来决定链接的访问顺序。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同;增量式网络爬虫
30、:爬取的是新增的和发生变化的页面数据。传统的网络爬虫在根据自己的设定爬取一定的数据后就会停止对数据的继续抓取,在一定的周期以后,重新进行一轮数据抓取以替代以前的过时的数据。但是这样做会爬取大量的重复资源,在时间和资源上的浪费比较大。增量式网络爬虫则较好地解决了这个问题,减少了重复和浪费。但是为了实现这种数据抓取方式,需要更高的算法复杂度和技术难度;其它类型的网络爬虫:在现实应用中,为了提高性能或者满足用户个性化需要,衍生出了一些其它类型的网络爬虫。例如,基于用户个性化的网络爬虫:这种爬虫根据用户的兴趣过通过与用户的交互来为用户提供个性化的数据信息,不同用户搜索同一个关键词会返回不同的结果;基于元搜索的网络爬虫:把用户提交的关键字提交到多个搜索引擎,然后在分析整合所得结果后,再把内容返回给用户。2.9.2 网络爬虫常见搜索策略 由于工作量巨大,所以全网爬虫通常会采用一些爬行策略来提高效率。常见的策略有如下三种:深度优先策略,核心思想是访问被搜索结构的叶子节点。从初始的页面开始,进行深度优先的搜索,不断访问下一级链接,直到不能继续深入为止。因此只有当爬虫爬完一个分支后才可以爬取其它分支。深度优先搜索策略的优点在于,对于深层嵌套的内容,可以被尽可能的遍历。但是这种策略也有先天不足,即如果某链接形成一个死循环的话,这种爬行策略会做大量无用功,造成大量的资源损失。广度优先策略,这种搜索策略
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1