Giter Club home page Giter Club logo

baidumusic_getlrc's Introduction

baiduMusic_getLrc

最前言:我会有猫的,一定会的。——海叔


写在前言后面:原本准备做“**摇滚音乐究竟在唱什么”,利用云词图分析**目前摇滚乐所唱的内容。

        可是要想获取摇滚乐所唱内容,就必须获取摇滚乐的歌词。

        因此问题从“获取摇滚乐主要内容”变成“获取摇滚乐歌词”+“歌词分析”+“云图制作”


所以第一步就是获取摇滚乐歌词:

    1,首先想到利用开放的歌词API来获取歌词,于是找到歌词迷提供的API(http://geci.me

            但是本人认为该API不是很方便,因为只能通过“歌曲名称”和“歌手名”来获取歌词,虽然返回为json格式,但是如果批量操作存在两个缺陷①多次请求造成接口拥堵而失败。②批量操作很繁琐 所以放弃使用这种方法。

    2,使用歌词网获取歌词,但苦于目前没有找到结构清晰,采集方便的歌词网。所以放弃这个办法。


但是一想到我未来可爱的猫纯洁的眼神,我就告诉自己“不能放弃”

所以有了方法③自己造“轮子” 自己动手丰衣足食 

过程如下:

                一:几经周折选择了百度音乐。优点:(1)所有歌曲都是以ID的方式来辨别,不存在转码的问题。(2)可以直接在页面抓取歌词

                二:例如陈奕迅的歌手ID为1077(别问我怎么知道,我测试的都要吐了)所以歌手的主页就是“http://music.baidu.com/artist/+ID”

                在这个页面就可以获取歌曲了。

                那么问题①来了:百度音乐有一个问题就是每一页只能显示25首歌曲,比如陈奕迅在百度音乐有501首歌曲,那么就需要21页来显示。但是在切换页面的时候并没有通过“普通方式”(例如:在地址栏加上“&page=n”此类)而是通过get获取数据。解决办法:通过抓包得到提交地址为“http://music.baidu.com/data/user/getsongs?start=+N” 其中的N为25的倍数,如果不是25的倍数,则会显示出错。提交后返回json数据。那么问题②来了,一个页面抓取之后怎么进行第二个页面的抓取呢?不急,我们从某歌手主页可以通过正则找到他在百度音乐被收录了多少歌曲。所以实际的页数也就是N%25+1(此处%为C语法,在Python3中为//)为什么+1呢?因为第一次请求json数据为“http://music.baidu.com/data/user/getsongs?start=0” 从开始,所以务必+1。将所有的歌曲ID提取,做成一个list,返回即可。

                三:我们得到了所有的音乐ID,那么我们只需要得到歌词下载地址即可。百度歌曲的地址为“http://music.baidu.com/song/+ID” 此处的ID我们已经提取完毕。通过对这个页面的分析,我们得出该歌曲的下载地址。万事俱备,让我们来下载吧!


                四:通过下载我们终于下载了陈奕迅将近500首的歌曲歌词了。

海叔的小猫咪表示很开心(然而我并没有猫,这是我虚构的)



baidumusic_getlrc's People

Contributors

pidbid avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.