片来源@视觉中国
文 | 互联网深读(ID:internetshendu),作者丨纳豆烧酒
2月5日0点,虾米音乐终将迎来最后的谢幕。
一个月前,虾米的关停公告猝不及防成为2021年第一个流泪时刻。
“让我爱你,然后把我抛弃?”一位虾米忠实用户在微博写下《残酷月光》歌词,甚是应景。更多的用户蜂拥而至,在互联网大型心碎现场评论留言,将话题送上热搜。
作为互联网早期音乐平台,虾米音乐曾是在线音乐平台的典范,承载了数千万网友的音乐记忆,以下我们将以一年一个关键词的形式,回顾虾米音乐波澜壮阔的一生,但愿虾米的故事,也能对你有所启发。
2008年11月,虾米网正式上线。
往前倒推5个月,同年6月,待字闺中的虾米已经拿下深创投A轮融资,几乎是含着“金汤匙”出生。
彼时,正赶上在线音乐创业热潮。酷我音乐、酷狗音乐、新浪乐库、巨鲸网势头初盛,QQ音乐在QQ渠道的加持下快速扩张,早期巨头千千静听则加入百度MP3麾下。
当几乎所有播放器都在以“免费”为噱头圈地跑马时,虾米却选择了一种混合了“P2P、电子购物、虚拟货币、社区”的模式入局,把音乐与互联网更深度融合起来,引来投资人的青眼有加。
这与虾米音乐创始人的风格息息相关。虾米音乐的1号员工王皓,是个不折不扣的乐迷,如今你能想到他的种种都是音乐相关的,都与音乐扯上关系。
网名“南瓜”来源于心仪的摇滚乐队Smashing Pumpkins,大学组过一支名叫“黑水”的乐队,里面的吉他手朱七,后来也成为虾米的创始人之一;开过卖乐器的网站;给本地音乐人办过一个类似豆瓣同城的论坛——“声音网”,在当时杭州的文教区乃至摇滚圈都小有名气,很多外地乐队来杭演出,都是王皓给牵线搭桥的,而他也发现,比起搞音乐自己更擅长把人组合起来做事。
学生时代,他的存在恰好连接起了这座城市的音乐人和乐迷,这与几年后他所创办的虾米音乐,异曲同工。
但他同时也是个如假包换的工科男,对互联网技术很感兴趣。互联网和音乐的化学反应,是他穷其一生探究的话题。
2003年,关掉网站的王皓加入阿里做一个普通的IT男。三年后,他拉上地产公司策划朱七,和在阿里的前同事王小玮、陈恩卫、吴轶群,在杭州的一家小咖啡屋里相聚,重新点燃音乐梦。
在他们的规划中,虾米音乐原名EMUMO(EARN MUSIC&MONEY),大概意思是既要让大众收获音乐,也要让音乐人赚到钱。
虾米网站的简介是这样写的:
“音乐让他感动的在于,上千场的演出中真正赚钱的很少,但是这些清苦的歌者们仍然保持着对音乐宗教式的信仰和追求。对于歌者,这仿佛并不是一个好的时代。”
如何用音乐体面地赚钱?这是虾米初生时就希望解决的问题,没想到的是,12年后,虾米依然无法回答。
虾米音乐最为人津津乐道的,就是它对音乐流派近乎变态的分类。很多文青的音乐启蒙,都是从虾米这里开始的。
而虾米在内容上也确实下了一番苦功夫。在大家都忙着从各处找更多的曲库来吸引用户的时候,虾米最关心的,是如何完善、优化已有的曲库。于是,虾米音乐做了三件事:
第一,在网站运营中强化内容编辑制度,以唱片公司的思路来做在线音乐。尽可能完善网站中三四百个音乐分支流派的介绍;在多人演唱的歌曲中,必须显示每一个歌手名,而非简单使用“群星”代替;音乐品质必须保证320K;歌曲的排列必须按照专辑顺序排列……死磕细节的背后,是主创团队对音乐的理想主义。
第二,重视小众长尾音乐流派运营。据时任运营经理的王小玮介绍,在虾米刚有10万用户时,就已经有了6位语种编辑,同时,网站也支持包括中、英、日、韩、俄、泰、西班牙等语言的检索。
第三,广泛发动UGC的力量。借鉴百科词条的编辑模式,虾米招募300多个来自世界各地的资深音乐爱好者,鼓励他们编辑、修改、上传音乐资料和内容。乐迷们满怀热情“为爱发电”,不仅为后续运营打下了良好的基础,更给平台带来弥足珍贵的社区氛围。
风格多元的音乐曲库、全面专业的流派分类,让每个听众都像是走进了一家精心维护的音乐图书馆。而这样的口碑效应也在乐迷群中不断发酵,越来越多的音乐爱好者涌入其中。
另一个有利条件是,虾米音乐初长成的日子,也恰好是中国在线音乐的快速发展期。2008年发布的《第21次中国互联网络发展状况调查统计报告》显示,网络音乐是当时中国网民使用率最高的网络应用,半年内86.6%的网民收听过网络音乐,下载比例为71.2%。这一比例在后来几年中一直居高不下,网络音乐稳坐头把交椅。
顺势而为,有内容、有技术、有热爱,从某种程度来说,虾米音乐是占据了天时地利人和的。时间走过2009年,虾米音乐就像乌托邦般承载着音乐爱好者的理想,一切都在向着最好的方向发展,除了商业化还有没更多进展之外。
经历最初几年的野蛮生长,在线音乐混乱不清的版权问题终于被摆上了台面。
2009年8月,文化部印发《文化部关于加强和改进网络音乐内容审查工作的通知》,加强网络音乐内容管理,打击盗版行为,拉响整顿序曲。受此影响,百度开始收敛MP3业务,虾米音乐也没逃过这一劫。
在王皓的设想中,虾米音乐的定位类似于“音乐中转交易站”,即用户先上传音乐,网站通过筛选后将优质音乐再售卖给用户,当音乐人、唱片公司找上门来时再付版权费,你可以理解为是“音乐版淘宝”。
但这种“先上车后补票”的行为,过于前卫且风险巨大,用户上传的内容既然是未经授权的,又何来收费的道理,确实惹恼了不少音乐人。
2010年9月,李志、周云蓬联合张佺、张玮玮、郭龙、小河、钟立风、万晓利、左小祖咒等数十位音乐人发布联名公告,控诉虾米音乐侵权上架独立音乐人作品的行为。这份公告,至今还留在周云蓬的豆瓣主页上。而随后一段时间里,这些音乐人的作品都在虾米上消失不见。
版权问题的突然出现,给了创始团队更多资金方面的压力。
数据显示,2003-2013年间,国内所有和音乐相关的互联网企业从投资人那里获得的投资只有5000万美元。很多风投一听是搞音乐的,直接就让前台送客。在后来的采访中,王皓回忆当时有80%的时间是在找钱的,甚至几乎患上了抑郁症。
不过虾米还是相对幸运的。
在2008年A轮后,2010年又先后拿到了深创投和盛大网络数百万的B轮和B+轮投资,这才让它有了些许和版权方谈判喘息的机会。
但虾米靠的不是用户量,相反它的用户数甚至还有点少(2011年500万,对比同被阿里收购的天天动听2012年用户量已经破亿),更大程度上来源于虾米团队单纯对音乐的热爱。
当几百万个口味不同的用户都出现一个平台上,怎样才能让他们自得其所共生发展呢?虾米的回答是:音乐的个性化推荐。
2010年7月,虾米发布基于html5技术的电台服务xiami.fm,后续还推出桌面版等,这是对标豆瓣FM的拳头产品。
对于音乐推荐功能的实现,虾米不计成本全力推进。公司百余名员工中,有一大半都在做着算法分类工作。员工回忆称,王皓当时下了道“死命令”,要求后台对每个用户的音乐标签数量达到30多项,极度消耗计算成本和服务器容量,而同期的豆瓣FM仅记录4-5项。
同时,虾米的推荐算法中也更强调小众、长尾音乐所带来的惊喜感。比起90%都熟悉的流行音乐,虾米更愿意推荐剩下不为人知的10%。
2011年,虾米音乐的推荐系统基本做成。独特的个性化算法,让虾米用户在找到适合自己音乐的同时又无须担心“信息茧房”,反倒越听越发现新世界的大门。数据显示,独立音乐人在虾米曲库被收听的比例高达11%。从这种意义上来说,虾米音乐确实做到了当时音乐推荐的天花板。
如此做了几年,到2012年时虾米的内容质量、算法技术和用户数量都上来了,但赚钱这件事,却一直没走通。在第三轮融资失败后,虾米音乐陷入财务危机。
虎嗅曾将虾米的模式归为“iTunes Store + Bit Torrent + last.fm + Spotify”,这个模式看似大而全,实则多为空中楼阁。
做iTunes Store,虾米缺曲库、缺硬件;与Bit Torrent相比,虾米的模式实际上是P2P,但对品质的追求又拖了虾米的后退,在音乐数量上远不如酷狗丰富;虾米电台和UGC精选集倒是与last.fm和Spotify有些接近,但做好推荐的基础是足够的版权,而买版权又绕不开钱的问题。
抛开前期融资,虾米的盈利方式主要靠用户付费下载。2012年5月,虾米音乐的付费率为5‰。按500万用户计算,5‰仅为2.5万人,若以付费用户每人下载10首歌计算(虾米下载价格为0.8元/首),那么虾米的收入为20万,这还不算版权分成、运营费用等成本问题。如此相较,实在是杯水车薪。
事实上,虾米每年在版权上的花费远超于其收入的十倍还不止,但用户体验上却感知不到。2012年初,知乎网友提问“为什么虾米网的搜索体验那么差”,搜不到王力宏的歌,王皓对此的回复颇为无奈,“这不是搜索体验差,是王力宏新专辑都下架鸟”。
与此同时,从新浪音乐走出来的谢国民刚成立海洋音乐,就一口气签下了包括环球、华纳、索尼三大唱片在内的百余家唱片公司的独家版权代理。
王皓隐约意识到,在线音乐已经变成一个玩不起的巨头游戏,如果想要继续前进,虾米只能去找更强大的盟友,毕竟,“跟大一些的平台在一起,会安全一些”。
2012年前后,虾米与BAT几家巨头陆续接触,兜兜转转,最终选择尚无音乐业务的阿里。
2013年1月,阿里宣布以8000万价格收购虾米,随即被划入音乐事业部。庞大的阿里帝国,为小虾米带来资金、流量、技术和管理支持,王皓肩上的压力小了不少。
在接受媒体采访时,王皓甚至表示“赚钱不是我的目标”,对虾米盈利没有预期,更着眼于和淘宝业务融合,以及对产业的改造。王皓的底气,来源于他和马云对彼此音乐价值观的认同,他们都希望去改变音乐产业链。
既然如此,并入后的首要任务就是加快对音乐行业的改造。
2013年7月,虾米推出音乐人平台。独立音乐人和独立唱片公司可以在平台上发布正版音乐、自主定价,同时,平台还为音乐人提供各类运营支持、数据分析工具和结算系统。上线后的前两年,平台将为音乐人提供免费服务,音乐人能获得100%的下载收益。
如果说此前虾米只是聚拢了音乐内容和乐迷,那么音乐人平台的上线才算是真正补足了虾米的音乐生态。从此,即使虾米的存量版权受掣肘,音乐人平台也能承担起版权的自我造血功能,而虾米音乐骨血里也刻下了“独立音乐”的基因,成为当时国内独立音乐人的聚集地。
产品层面,虾米也同时发力。虾米音乐与淘宝账号体系全面打通,淘宝中开设专门的音乐频道,“音乐淘宝”计划稳步推进。
2013年12月,虾米APP3.0发布,算法主导的“猜你喜欢”功能提升到首页显著位置,进一步凸显个性化推荐功能,开启真·“千人千面”时代。
同年,虾米音乐用户数大幅提升,突破2000万大关。
趁势跟进,2014年7月,虾米在音乐人平台一周年之际推出针对音乐人的成长计划——“寻光计划”,并同步发布国内第一张互联网唱片《寻光集》。
你很难定义这张专辑的音乐风格,但可以肯定的是,这张从策划、制作到发行、推广都来自互联网的专辑,不仅重塑了传统唱片公司宣发方式,也是中国独立音乐逐渐崛起路上的一块里程碑。
《寻光集》中的音乐人,李荣浩、痛仰乐队、旅行团、逃跑计划、莫西子诗、金玟岐、声音玩具、邱比、卡奇社……如今很多都是华语乐坛的中流砥柱。
而这还只是开始。
到2015年,虾米还推出西楼、程璧、鲸鱼马戏团等13位音乐新人,帮助他们完成发专辑的梦想,后来在线音乐平台对音乐人的扶持热潮,最早也可追溯至此。
高歌猛进的虾米音乐,在版权上也不甘示弱。
那年夏天,虾米音乐一鼓作气拿下《中国好声音》第三季、《中国好歌曲》第二季音乐版权,并与节目幕后制作团队上海灿星达成战略合作,探索音乐C2B模式。
年底,虾米APP发布4.0版本,推出省流量模式和24小时音乐收听情景模式,前者解决了不少人流量“囊中羞涩”的问题,后者模式中出现开车神曲、刷题歌单等如今我们熟知的情景歌单,破解了用户找歌难的窘境。这个版本一战封神,至今仍有用户在寻找这个版本的安装包。
格调有了,版权上了,产品也好用,解决了用户的三大痛点,虾米DAU在2014年猛增至七八百万,一下子涨了百倍。从小众走向破圈的路上,虾米音乐迎来“高光时刻”,成为鄙视链顶端的APP。
2015年前后,是在线音乐行业极为混乱的时刻。音乐平台、唱片公司、综艺节目版权方之间因版权问题撕扯不断,史称“第一次版权大战”。直到2015年7月版权局发布“最严版权令”,大战才告一段落。
好在虾米有了阿里的加持,筹码充足。
坊间传闻,虾米以“十几亿资金”先后揽下滚石、华研、相信、寰亚等华语经典音乐和拥有250万曲库的BMG的版权,还与环球、华纳、索尼三大唱片公司达成合作,甚至一度接近签下杰威尔版权(周杰伦),次年,虾米又以投资入股形式拿下SM韩语版权,其中华研、SM分别是从腾讯、百度身边“虎口夺食”,相当强势。
一时间,虾米音乐和天天动听手握超60%中文音乐独家版权,独揽李宗盛、五月天、S.H.E、林宥嘉等大批港台艺人版权,在正版化进程中属于很高的起点了。
腾讯也没闲着,开年即在朋友圈封杀虾米和天天动听的分享链接,厮杀意味渐浓。
另一侧,阿里对音乐业务给予的厚望也增加了。
2015年3月,虾米音乐和天天动听共同组建阿里音乐,虾米音乐走专业音乐人的小而美路线,天天动听负责大众用户,两者并行差异化运行。整合完成后,预计阿里音乐的市场占有率将达到15%左右,仅次于海洋音乐和QQ音乐。
2015年7月,阿里音乐集团正式成立,高晓松任董事长,宋柯任CEO。高晓松许下诺言,“阿里音乐集团一定会成为一家世界级音乐机构”,内部员工情绪为之一振。
此刻的虾米,风光无二。
2016年的开局却给了虾米当头一棒。
1月,陪伴虾米八年之久的创始人王皓突然宣布转岗钉钉,他在朋友圈里灰心丧气,
“我投身这个行业已经八年了,初衷是想让这个行业跟上时代,但是现在行业现状已经荒诞到令人发指。有些行业注定要死去,我干脆等他涅槃好了。”
掌舵人的易主,意味着虾米音乐新时代的开启。而此时高晓松、宋柯的重点,则全然放在天天动听的改造上,
虾米由盛而衰,至此拉开帷幕。
5月,阿里音乐举行发布会,请来半个娱乐圈站台,高调宣布天天动听正式改名为“阿里星球”,主攻泛娱乐方向。
改版后的阿里星球将音乐产业与电商模式结合,APP集音乐播放、粉丝社交、视频直播、交易体系于一体,满足从听众、音乐人、词曲作者、经纪公司、演出机构等各方面的需求。
初衷是好的,但步子太大,用户和行业都没准备好。阿里星球的用户数从巅峰时期的3亿狂跌至2000万,次年3月就结束了短暂的一生。
虾米音乐虽然没走弯路,但这一年,它的发展是停滞的。那段时间关于虾米的新闻,除了成为阿里大文娱板块的成员外,只能听到时不时版权下架,和产品越来越臃肿的吐槽。
而被浪费的2016年,正是友商奋发图强之际。当年腾讯集团(QQ音乐)完成与海洋音乐(酷狗、酷我音乐)的整合,成立TME集团,并开启“买买买”模式囤积大量版权,而原本弱小的网易云音乐,也凭借“音乐+社区”的模式,异军突起。
阿里星球的停更,加速了高、宋等人离场,也在陡然间将阿里音乐的重担全部交到了虾米音乐的手上。
2016年10月,王皓从钉钉被召回到虾米。创始人的回归像一颗定心丸,给整个团队带来了希望。
2017年4月,中断3年的“寻光计划第二季”重新启动,王皓亲自为其站台,分享做音乐的初心。
差不多同时,环球唱片的三年一签的版权争夺战打响,虾米和腾讯、网易、百度一起加入争抢。虽然最后还是腾讯以令人咋舌的高价胜出,但虾米音乐进攻的气势,回来了。
“收回失地”的进展不止于此。
9月12日,虾米音乐与腾讯音乐达成版权互授协议,虾米音乐重新迎来索尼、华纳、杰威尔、英皇、时代峰峻、YG、JYP等音乐版权。版权外患解决了。
9月13日,时任阿里音乐CEO的张宇(语嫣)发出了阿里音乐成立28个月以来的首封“内部信”,信中提到阿里音乐未来的三大方向,一是称将秉持“富养女儿”的实业心态,加大获取优质版权作品的投入力度,广积粮、不筑墙;二是加码扶持独立音乐人;三是在虾米音乐方面提高投入。内部支援充足了。
11月,喜迎双十一,马云邀请王菲一起合唱微电影《功守道》主题曲《风清扬》,更为阿里大文娱板块注入了一剂“强心剂”。当时,《功守道》电影只能在优酷看,《风清扬》歌只能在虾米听,带动虾米的DAU一度从700万飙升到900万,整个大文娱板块的热情都被点燃了。
可是,音乐APP的转换涉及到大量本地音乐、歌单乃至使用习惯的“迁徙”,成本过高,不到万不得已,用户都不大愿意更换APP。
更何况,一直走小众精品专业路线的虾米音乐,个性过于鲜明,无论在用户数还是产品气质,它都很难在短时间内完成大众化,代替从前天天动听的位置。
好景不长,2018年初,虾米音乐原有的相信音乐、华研音乐分别易主至腾讯音乐和网易云音乐。虽然通过版权互授,这些歌曲在虾米上都还能听到,但阿里对虾米的耐心,显然已经不多了。
集团内部,对虾米的发展策略一直举棋不定,外化表现即频繁的高层变动。
二度回归的王皓再次离开,这一次,他远去东南亚,走得决绝。
不久,担任阿里音乐的CEO语嫣也被调离,空留下赴任时带来淘宝团队。他们中的大多数人都带着鲜明的电商思维,每个用户行为数据指标都门儿清,唯独少了点对音乐的热爱与敬畏。拉新人分优惠券的电商小游戏开始出现在虾米APP中,叫人摸不着头脑,虾米开始变得有点失控。
外部环境中,版权的大规模缺失成为压垮虾米的最后一根稻草。
2018年9月,阿里音乐与腾讯音乐转授合作到期后再未续约,虾米音乐被爆出大规模下架索尼、华纳、周杰伦曲库,用户哀嚎声一片。知乎“为什么虾米音乐逐渐走向没落”问题下,满屏都是对其版权少的控诉。
同年,时常与虾米音乐并称“三国杀”的腾讯音乐和网易云音乐,却越走越快形成两强态势,分流大量虾米音乐“难民”,彻底改变了在线音乐的格局。
腾讯音乐围绕“听看唱玩”搭建泛娱乐生态,逐渐形成QQ音乐专注音乐,酷狗酷我主打直播,全民K歌关注社交的全方位发展模式,并延伸至文学、影视、长音频领域,最终在2018年12月赴美上市,估值240亿美金,成为全球首个实现盈利的在线音乐平台。
网易云音乐则专注音乐垂类,一方面,在版权采买、音乐人培养方面大举发力;另一方面推出LOOK直播、音街等泛音乐产品,丰富音乐生态。2018年10月,网易云音乐获得由百度、泛大西洋投资集团、博裕资本等新一轮融资。
逆水行舟,不进则退,虾米的衰颓无可挽回。Questmobile《中国移动互联网在线音乐行业报告》显示,2018年7月,腾讯音乐和网易云音乐的MAU都在亿级阵营,而虾米音乐则仅有2277万,位列第五,已然跌出第一梯队。
2018年11月,虾米音乐发布十周年生日纪念微博,转发评论不过二三十个,相较于它超过500万的粉丝数来说,实在是太过寂寥。
2019年6月,虾米音乐第N次面临架构调整。
这一次它从大文娱板块进入了新设立的创新业务事业群,同时加入的还有UC、阿里文学、天猫精灵等不怎么待见的业务,主帅又从杨伟东换成了朱顺炎。随之而来的还有一波大裁员,仅留下少数技术运营维持APP日常运营。这也被认为是阿里高层终于决定边缘化虾米的标志之一。
随后,行业里隔三差五传出“虾米音乐与网易云音乐合并”、“网易云音乐收购虾米”,虽然相当于再度卖身,但总还曾给虾米留有一线活下去的希望。然而,当9月阿里和云锋基金向网易云音乐投资约7亿美元的交易新闻落地时,虾米音乐的“弃子”身份几乎已成定局。
对用户来说,这种感觉或许来的更早也更明显一些。
2019年5月,虾米突然下架包括陈奕迅、Taylor Swift等人在内环球音乐的版权,这也就意味着虾米全面放弃了占据全球曲库近90%的三大唱片版权。
主流版权不再续约,独立音乐人也已经迁徙到网易、腾讯等平台,此刻的虾米空有优秀的算法,但却“无歌可听”。
当一个在线音乐平台在版权上缴械投降之际,也就像被判了“死刑缓期执行”一样,只能眼睁睁看着用户流失而毫无办法,毕竟一个音乐APP的基础功能还是听歌。
2020年虾米的故事与上一年相差无几,只是在下坡路上的惯性下滑。
根据Trustdata报告,6月,虾米音乐MAU同比下降接近100%,甚至低于酷我音乐HD版。12月,易观千帆报告显示,虾米音乐MAU跌破千万,仅为928.8万。
8 月,阿里的88VIP在音乐服务中为用户提供虾米音乐和网易云音乐二选一的机会,这是阿里系以外的产品第一次进入88VIP体系。
11月,微博认证为“NOVA娱乐主理人,前华纳音乐/环球音乐中国区市场总监”网友“@相征”发博称:
“江湖传闻,虾米音乐明年1月份关闭,一个时代要结束了吗?”
紧接着,果壳旗下账号“@果壳放大灯”发微博称:
“虾米音乐有关高管目前在北京开会,回去要执行一些人员变动。虾米音乐很可能将要解散。”
对此,虾米音乐回应“不予置评”。不予置评是公关回应中的常见话术,就是既不否定也不肯定对方所说的任何观点,用大白话说就是不方便告诉你。鉴于互联网极高的辟谣率,不带辟谣性质的回复大概率可当作默认。
果然,2021年1月5日,虾米音乐关停消息终于公布。
也许是心里早有准备,听到这个消息时,只觉得长长舒了一口气,一个时代,结束了。
虾米音乐这一生,完整经历了中国数字音乐从PC时代向互联网时代演进的全过程。
它生于在线音乐创业热潮,也差点死在资本寒潮中;一度是大公司里炙手可热的明星产品,也经历过产品边缘化的痛苦;曾站上行业鄙视链的顶端,也默默承受过无人问津的艰难岁月。
时至今日,你很难说是谁杀死了虾米。
是王皓吗?他在虾米身上倾注了10多年的心血,如果没有他对音乐的热爱和虔诚,虾米就不可能有精细到极致的流派分类和推荐系统,也不可能形成虾米别具一格的气质。但提出以盗版模式付费的是他,负气离开的也是他。
是阿里吗?在虾米濒死的2012年,是阿里伸出援手,给了资金、技术、流量、还有大把的试错时间。但也是因为阿里在决策和用人上的屡次失误,让虾米错失了版权大战后最佳发展窗口期。
是版权吗?音乐正版化之路道阻且长,虾米曾是其中最坚定的信仰者。但也是因为各家平台哄抬过高的版权价格和畸形的独家版权模式,让虾米的颓势无可挽回。
是行业吗?相比十几年前,付费习惯养成了,独立音乐人起来了,有音乐审美的听众也变多了,整个音乐行业的发展大方向是积极的。但互联网真的能改造音乐行业吗?现如今,除了腾讯音乐以社交娱乐方式“曲线救国”实现盈利外,其他还没有一家在线音乐平台真正能通过音乐赚到钱。
是用户吗?将虾米音乐捧到顶端的是他们,哭着喊着舍不得虾米音乐关停的是他们,但因为曲库而自顾自放弃了一些坚守的也是他们。
在错误的时间里,由错误的人作出许多错误的决定,从某种意义上来说,虾米音乐的无可挽回,从一开始就是注定了的。
把时间往前推到12年前,创始团队在考虑虾米音乐叫什么的时候,有人提到了一个强大的竞争对手巨鲸网。这是当时中国第一家主打正版音乐付费下载的音乐平台,曾获得谷歌和姚明的投资。因此,团队最终决定把EMUMO改名叫虾米网,是希望有朝一日,小虾米也能干掉巨鲸。
结果,虾米确实活得比巨鲸更久一些,但成为巨鲸的梦想,始终是不可能了的。
参考资料:
晚点LastPost:《虾米音乐关停:一百万怀念它的人和错失音乐帝国的阿里》
老曹:《虾米网CEO王皓:我和音乐的波澜万丈十五年》
虎嗅:《虾米为什么要卖给阿里?》
摩登天空ZERO:《虾米创始人王皓:我觉得没什么好怀念的》
Techweb:《虾米网王皓:音乐商人的逻辑》
戏葡萄原创专稿,未经允许请勿转载
2014年十月底的Cocos开发者大会上,触控副总裁王哲做了一次演讲,《重新定义下的Cocos》。
当时他这样说到,“没有-X和JS框架的区别,没有2D和3D的区别,它们就在一个引擎里,Cocos集成了所有这些服务,重新定义了无缝的工作流。美术和设计人员不需要配置很复杂的工作目录,不需要配置Android NDK、SDK之类的东西,当设计完场景动画和UI之后可以直接开发工作,开发工作只是由程序员来完成的。”
那么,2014年这一年,Cocos业务特别是CocosPlay取得了哪些成绩?Cocos部门对HTML5等新方向如何看待?葡萄君最近在触控厦门分公司与王哲聊到了这些话题。
葡萄君:对于触控,CocosPlay的意义在于?
王哲:CocosPlay目前是给触控代理的几款游戏使用,先让自家游戏用好了,再考虑面向别家以及商业化。自己先趟坑,这是触控开发工具类产品一贯的做法。CocosPlay是一个在用户体验上跟HTML5接近的系统,但没有HTML5那么高的移植和性能要求,不需要重写程序内容。Cocos Play技术可以对Native游戏简单改造之后,实现两个要点:免安装,和边玩边下载,也就是以前PC页游的运行模式。
王哲:PC互联网是以网站为基础建立服务链的,现在移动互联网App之间不能连通,于是需要SDK的接入。对于大量app产生的移动互联网流量,如内涵段子、冷笑话精选、美图、酷狗音乐等,流量很大,但这些流量的变现效率肯定不如游戏。这些站点对用户来说吸引力很大,因为用很低的成本就能换取更多的资源,而他们从前的变现手段主要是靠卖广告位CPA,或者通过游戏联运,但既要联运又得和CP谈、嵌SDK,非常浪费成本。所以现在我们希望通过CocosPlay做的大联运,来让长尾流量通过触控擅长的游戏领域提高效率和收入。
王哲:对于手机游戏,流量来源已经是一个瓶颈问题。国内流量来源最重要的是渠道给的推荐位,这些位置是有限的。所以在看到这些非游戏app产生的长尾流量的商机后,我们希望能把握这一点,进而给游戏厂商和高流量app带来额外的利润。现在Coco splay还只有触控代理的游戏在用,触控要评估这个市场的潜力,在摸清市场以后才会开放。Coco splay目前有3、4款游戏在使用,但技术上没有做到完全的自动化,因为涉及到对操作系统接口很复杂的封装,所以比较麻烦。
葡萄君:怎么看待HTML5游戏?
王哲:Cocos已经有技术可以用JavaScript做大型游戏游戏,也有很多研发商在用。比如Facebook游戏收入前列的《Big Fish Casino》就是用cocos 2d-html5写的。国内高收入的代表作则有DeNA的《变形金刚》、边锋的《三国杀传奇》、心动游戏上到微信的《仙侠道》、途游的一系列棋牌游戏等,采用cocos 2d-html5开发后,通过我们的JavaScript 绑定加速方案打包到native app,发行到安卓和iOS渠道。
王哲:我一向是比较保守谨慎的风格,所以提供出来的技术方案都是让客户可进可退的。从Cocos 2d-x在2010年的设计,就是进可攻Android退可守iOS的方案,要知道当时Android还非常小。而Cocos 2d-js就是进可攻HTML5退可守Native,我没有赌性,认为不把公司命运赌在唯一的方向上,这点非常重要。而对于只打算纯守Native的公司,我们还提供了Cocos Play方案可以转化为手机页游形态。我喜欢Cocos 2d-js这种可进可退,左右逢源的技术方案。
王哲:就目前而言,我遇到很多研发商的需求是,用Cocos 2d-js开发完游戏后,用我们引擎的native runtime加速方案打包为原生形态到渠道上分发,同时用HTML5 runtime做关卡试玩来导量。HTML5一大优点的是能在朋友圈里病毒传播,点开就玩。Cocos 2d-js很好地满足了这种既要原生性能来做大游戏,又要利用HTML5做病毒式传播导量的当下需求。市面上也有其他HTML5引擎,但cocos引擎的成熟程度和生态圈发展程度大家都明白,手Q玩吧里面的HTML5游戏,有50%直接用DOM开发,有20%~30%是用Cocos 2d-html5开发的,是玩吧里市场占有率最高的游戏引擎。但HTML5领域最终能发展到怎么样不是我e们引擎提供商和中小CP说了算的,还得看大厂的态度,尤其是谷歌和苹果的态度。所以目前谨慎的态度还是先用Cocos 2d-js跨native和html5两端,先走这一步,再看HTML5市场会不会有爆发。
王哲:再进一步,HTML5只是技术手段,手段只是为了实现背后的商业目标;而对于实现同个商业目标,可以有不同的技术手段。对于游戏厂商而言,HTML5技术背后的商业目标就是:如何在手机上像页游一样来源广泛且方便地导量,如何托管于社交软件中实现病毒式传播。如前面所说,现在非游戏app的流量很高,但缺乏高效变现手段;普遍采用的广告模式导量,玩家在看到广告到进游戏开玩的时间长,流量转化率低下。缩短这个等待时间,提高转化率是手机页游关键的问题和价值所在。比如一个100MB的游戏,下载10MB就能进游戏,最好是秒进,然后一边玩一边下载后续内容,而且不要弹界面出来问用户是否安装,是否授予一堆访问权限等等。在实现这个商业目标上,触控的Cocos Play技术和HTML5都是手段而已。两者都不是针对玩家需求而制作的东西,它是满足游戏厂商运营、盈利的需求的技术手段,比如发行、CP在商业上对分发效率、玩家进入游戏的时间、玩家的留存率、转化率的问题;而玩家只关心能否在手机上方便地玩到好玩、高质量的游戏,并不关心你游戏背后用的是哪种技术。
葡萄君:那么Coco splay的效果如何?
王哲:国庆的时候做了《秦时明月》的Coco splay版,放到渠道里发现反馈的数据都比较好,包括转化率和收入水平等。投放的渠道比所有的安卓渠道整体水平要高一些。由于不知道用户的反馈会往那个方向走,所以我们做的初始版本会相对简陋,在不断测试里去调试。当时《秦时明月》上91的时候还是试玩版,没有代支付等系统,将100多M的游戏改到10m,放上去以后,收入数据很快就上去了。
葡萄君:玩家会不会觉得包太小了?
王哲:玩家会有疑问,但还是眼见为实,玩一玩才知道。关键是以下几个:1)节约首次下载时间,10MB下载wifi环境2分钟,4G环境以秒计;而100MB wifi下载10多分钟,那么前两分钟过后,玩家就可以提前体验游戏,如果觉得不好玩就可以不下剩下90m的流量。2)网络环境的变化会导致下载中断,但10MB的包之后剩下90MB可以分次下载。
葡萄君:现在CocosPlay希望先解决哪些需求?
王哲:一是完善自动化转换工具,接入提升效率。但改造单款游戏的投入成本大,制作时间长,CP需要消耗过多资源。第二是收入目标,暂定目标是增收上千万的流水,比如《秦时明月》原本能达到5000万单月,使用Coco splay以后能提高20%,达到6000万,那么就KO了,因为手机上的HTML5游戏还没单月过100万的。
葡萄君:Cocos这一年取得了哪些成绩,2015年又有哪些打算?
王哲:国内的收入排行榜前十前二十,用Cocos研发的游戏占有率很高。韩国日本也有很多,比如海贼王、SE亚瑟王系列、怪物弹珠等。
王哲:2014年Cocos的成绩还分三方面。一是cocos 3D推出,我们去年在3D技术方面的进步比较大,是从无到有的过程,2D还将占据市场一段时间,尤其是欧美和日本市场;但3D不得不准备,未来手机市场可能像PC平台一样分化为:核心手游3D化端游化、2D游戏休闲化、社交化,退守手机页游戏形态。第二是理清了Studio工作流,终于解决了多个编辑器分立的问题,同时windows和mac两个版本的代码也合到了一起。从前尽管有同一个入口,但仍然是一堆功能分立的细碎编辑器。那样分开的工作既不方便管理,也影响工作效率。而今年实现了整体的统一,后面的迭代工作会快很多,很多改进的基础功能也帮大家提高效率。第三是Code IDE解决了苹果和谷歌眼中二等公民Lua和JavaScript脚本调试的问题。
王哲:展望新的一年,首先第一点是我们希望cocos系列产品之间能相互打通,可以在各产品各编辑器和扩展里面自由的调用相互的资源,实现更好的一体化集成开发环境。而进一步就是插件和扩展系统,让研发商自由加入自己的扩展控件,如自己的UI控件等。第二点就是3D,我们发布3D功能后到现在也过了10个月左右,在去年新立项的cocos 3D游戏会在今年陆续上线。我很期待也衷心祝愿cocos游戏,不论是2D还是3D游戏,都能在今年大卖,雄踞畅销榜榜首。
虽然说XPath比正则表达式用起来方便,但是没有最方便,只有更方便。我们的BeautifulSoup库就能做到更方便的爬取想要的东西。
使用之前,还是老规矩,先安装BeautifulSoup库,指令如下:
pip install beautifulsoup4
其中文开发文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html
BeautifulSoup库是一个强大的Python语言的XML和HTML解析库。它提供了一些简单的函数来处理导航、搜索、修改分析树等功能。
BeautifulSoup库还能自动将输入的文档转换为Unicode编码,输出文档转换为UTF-8编码。
所以,在使用BeautifulSoup库的过程中,不需要开发中考虑编码的问题,除非你解析的文档,本身就没有指定编码方式,这才需要开发中进行编码处理。
下面,我们来详细介绍BeautifulSoup库的使用规则。
下面,我们来详细介绍BeautifulSoup库的重点知识。
首先,BeautifulSoup库中一个重要的概念就是选择解释器。因为其底层依赖的全是这些解释器,我们有必要认识一下。博主专门列出了一个表格:
解释器 | 使用方式 | 优点 | 缺点 |
Python标准库 | BeautifulSoup(code,'html.parser') | Python的内置标准库,执行速度适中,容错能力强 | Python2.7.3以及Python3.2.2之前的版本容错能力差 |
lxml HTML解析器 | BeautifulSoup(code,'lxml') | 解析速度快,容错能力强 | 需要安装C语言库 |
lxml XML解析器 | BeautifulSoup(code,'xml') | 解析速度快,唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(code,'html5lib') | 最好的容错性,以浏览器的方式解析文档,生成HTML5格式的文档 | 解析速度慢 |
从上面表格观察,我们一般爬虫使用lxml HTML解析器即可,不仅速度快,而且兼容性强大,只是需要安装C语言库这一个缺点(不能叫缺点,应该叫麻烦)。
要使用BeautifulSoup库,需要和其他库一样进行导入,但你虽然安装的是beautifulsoup4,但导入的名称并不是beautifulsoup4,而是bs4。用法如下:
from bs4 import BeautifulSoup
soup = BeautifulSoup('<h1>Hello World</h1>', 'lxml')
print(soup.h1.string)
运行之后,输出文本如下:
基础的用法很简单,这里不在赘述。从现在开始,我们来详细学习BeautifulSoup库的所有重要知识点,第一个就是节点选择器。
所谓节点选择器,就是直接通过节点的名称选择节点,然后再用string属性就可以得到节点内的文本,这种方式获取最快。
比如,基础用法中,我们使用h1直接获取了h1节点,然后通过h1.string即可得到它的文本。但这种用法有一个明显的缺点,就是层次复杂不适合。
所以,我们在使用节点选择器之前,需要将文档缩小。比如一个文档很多很大,但我们获取的内容只在id为blog的div中,那么我们先获取这个div,再在div内部使用节点选择器就非常合适了。
HTML示例代码:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="utf-8">
<title>我是一个测试页面</title>
</head>
<body>
<ul class="ul">
<li class="li1"><a href="https://liyuanjinglyj.blog.csdn.net/">我的主页</a></li>
<li class="li2"><a href="https://www.csdn.net/">CSDN首页</a></li>
<li class="li3"><a href="https://www.csdn.net/nav/python" class="aaa">Python板块</a></li>
</ul>
</body>
</html>
下面的一些示例,我们还是使用这个HTML代码进行节点选择器的讲解。
这里,我们先来教会大家如何获取节点的名称属性以及内容,示例如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'lxml')
# 获取节点的名称
print(soup.title.name)
# 获取节点的属性
print(soup.meta.attrs)
print(soup.meta.attrs['charset'])
# 获取节点的内容(如果文档有多个相同属性,默认获取第一个)
print(soup.a.string)
# 也可以一层一层的套下去
print(soup.body.ul.li.a.string)
运行之后,效果如下:
这里的注释代码都很详细,就不在赘述。
一般来说一个节点的子节点有可能很多,通过上面的方式获取,只能得到第一个。如果要获取一个标签的所有子节点,这里有2种方式。先来看代码:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'lxml')
# 获取直接子节点
print("获取直接子节点")
contents = soup.head.contents
print(contents)
for content in contents:
print(content)
children = soup.head.children
print(children)
for child in children:
print(child)
运行之后,效果如下:
如上面代码所示,我们有2种方式获取所有子节点,一种是通过contents属性,一种是通过children属性,2者遍历的结果都是一样的。
但需要特别注意,这里获取所有子节点,它是把换行符一起算进去了,所以你会看到控制台输出了很多空行。所以,在实际的爬虫中,遍历之时一定要删除这些空行。
既然能获取直接子节点,那么获取所有子孙节点也是肯定可以的。BeautifulSoup库给我们提供了descendants属性获取子孙节点,示例如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'lxml')
# 获取ul的所有子孙节点
print('获取ul的所有子孙节点')
lis = soup.body.ul.descendants
print(lis)
for li in lis:
print(li)
运行之后,效果如下:
同样的,descendants获取子孙节点也算入了换行符。而且需要特别注意的是,descendants属性把文本内容本身也算作子孙节点。
同样的,在实际的爬虫程序中,我们有时候也需要通过逆向查找父节点,或者查找兄弟节点。
BeautifulSoup库,给我们提供了parent属性获取父节点,同时提供了next_sibling属性获取当前节点的下一个兄弟节点,previous_sibling属性获取上一个兄弟节点。
示例代码如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html, 'lxml')
# 获取第一个a标签的父亲节点的class属性
print(soup.a.parent['class'])
li1 = soup.li
li3 = li1.next_sibling.next_sibling.next_sibling.next_sibling
li2 = li3.previous_sibling.previous_sibling
print(li1)
print(li2)
print(li3)
for sibling in li3.previous_siblings:
print(sibling)
运行之后,效果如下:
前面已经提示了,节点选择器是把换行符‘\n’也算一个节点,所以第一个li需要通过两个next_sibling才能获取到下一个li节点。同样的,上一个也是。其实还有一个更简单的方法,能避免这些换行符被统计在内,那就是在获取网页源代码的时候,直接去掉换行与空格即可。
对于节点选择器,博主已经介绍了相对于文本内容较少的完全可以这么做。但实际的爬虫爬的网址都是大量的数据,开始使用节点选择器就不合适了。所以,我们要考虑通过方法选择器进行先一步的处理。
find_all()方法主要用于根据节点的名称、属性、文本内容等选择所有符合要求的节点。其完整的定义如下所示:
def find_all(self, name=None, attrs={}, recursive=True, text=None,
limit=None, **kwargs):
参数 | 意义 |
name | 指定节点名称 |
attrs | 指定属性名称与值,比如查找value="text"的节点,attrs={"value":"text"} |
recursive | 布尔类型,值True查找子孙节点,值False直接子节点,默认为True |
text | 指定需要查找的文本 |
limit | 因为find_all返回的是一个列表,所以可长可短,而limit与数据库语法类似,限制获取的数量。不设置返回所有 |
【实战】还是测试上面的HTML,我们获取name=a,attr={"class":"aaa"},并且文本等于text="Python板块"板块的节点。
示例代码如下所示:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html.strip(), 'lxml')
a_list = soup.find_all(name='a', attrs={"class": 'aaa'}, text='Python板块')
for a in a_list:
print(a)
运行之后,效果如下所示:
find()与find_all()仅差一个all,但结果却有2点不同:
1.find()只查找符合条件的第一个节点,而find_all()是查找符合条件的所有节点2.find()方法返回的是bs4.element.Tag对象,而find_all()返回的是bs4.element.ResultSet对象
下面,我们来查找上面HTML中的a标签,看看返回结果有何不同,示例如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html.strip(), 'lxml')
a_list = soup.find_all(name='a')
print("find_all()方法")
for a in a_list:
print(a)
print("find()方法")
a = soup.find(name='a')
print(a)
运行之后,效果如下:
首先,我们来了解一下CSS选择器的规则:
1..classname:选取样式名为classname的节点,也就是class属性值是classname的节点2.#idname:选取id属性为idname的节点3.nodename:选取节点名为nodename的节点
一般来说,在BeautifulSoup库中,我们使用函数select()进行CSS选择器的操作。示例如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html.strip(), 'lxml')
li = soup.select('.li1')
print(li)
这里,我们选择class等于li1的节点。运行之后,效果如下:
因为,我们需要实现嵌套CSS选择器的用法,但上面的HTML不合适。这里,我们略作修改,仅仅更改<ul>标签内的代码。
<ul class="ul">
<li class="li"><a href="https://liyuanjinglyj.blog.csdn.net/">我的主页</a></li>
<li class="li"><a href="https://www.csdn.net/">CSDN首页</a></li>
<li class="li"><a href="https://www.csdn.net/nav/python" class="aaa">Python板块</a>
</ul>
我们仅仅删除了li后面的数字,现在我们可以实现一个嵌套选择节点的效果了。示例代码如下所示:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html.strip(), 'lxml')
ul = soup.select('.ul')
for tag in ul:
a_list = tag.select('a')
for a in a_list:
print(a)
运行之后,效果如下:
我们再次将上面的代码改造一下,因为上面获取的标签,现在我们来获取其中的文本以及href属性的值,示例如下:
from bs4 import BeautifulSoup
with open('demo.html', 'r', encoding='utf-8') as f:
html = f.read()
soup = BeautifulSoup(html.strip(), 'lxml')
ul = soup.select('.ul')
for tag in ul:
a_list = tag.select('a')
for a in a_list:
print(a['href'], a.get_text())
运行之后,效果如下:
可以看到,我们通过['属性名']进行属性值的获取,通过get_text()获取文本。
与XPath类似,我们可以直接通过F12浏览器进行Copy任何节点的CSS选择器代码。具体操作如下图所示:
copy之后,直接将上面复制的内容粘贴到select()方法中即可使用。
上面基本上是BeautifulSoup库的全部用法,既然我们已经学习掌握了,不抓紧爬点什么,总感觉自己很亏,所以我们选择酷狗飙升榜榜单进行爬取。
如上图所示,我们的榜单信息全在id="rankWrap"的div标签下的ul之中。所以,首先我们必须获取ul。示例代码如下:
from bs4 import BeautifulSoup
import requests
url = "https://www.kugou.com/yy/html/rank.html"
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
result = requests.get(url=url, headers=headers)
print(result.text)
soup = BeautifulSoup(result.text.strip(), 'lxml')
ul = soup.select('#rankWrap > div.pc_temp_songlist.pc_rank_songlist_short > ul')
print(tbody)
获取ul之后,我们就可以在获取其中的所有li节点信息,然后分解li的标签,获取重要的歌曲作者,歌曲名称等。不过,我们先来分析网页li内部代码:
可以看到,我们要的歌曲名称与作者就在li的title属性中,而歌曲的网页链接在li下,第4个span的标签下的a节点的href属性之中(也可以直接就是第一个a标签之中)。知道这些之后,我们可以完善代码了。
from bs4 import BeautifulSoup
import requests
url = "https://www.kugou.com/yy/html/rank.html"
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
result = requests.get(url=url, headers=headers)
soup = BeautifulSoup(result.text.strip(), 'lxml')
ul = soup.select('#rankWrap > div.pc_temp_songlist.pc_rank_songlist_short > ul')
lis = ul[0].select('li')
for li in lis:
print("歌曲名称与歌曲作者:", li['title'])
print("歌曲链接:", li.find('a')['href'])
如上面代码所示,我们只用了不到14行代码,就可以爬取酷狗音乐的飙升榜单,BeautifulSoup库是不是非常的强大呢?
*请认真填写需求信息,我们会在24小时内与您取得联系。