Python爬虫学习记录(3)——用Python获取虾米加心歌曲,并获取MP3下载地址

在第一篇里记录了获取虾米热门歌曲,听了一段时间后,加心了很多歌曲,因此想要批量下载加心过的虾米收藏夹歌曲。

虾米好评歌曲页只保存最近的2000首。。之前star过的3k首歌有1k首都不在了。所以起了备份的念头。


  • 首先获取虾米个人加心歌曲的地址

    虾米的个人好评歌曲页在 http://www.xiami.com/space/lib-song/u/241400/page/1 ,把241400换成自己的id就可以。

    歌曲所在网页


  • 得到歌曲的MP3地址

    假设歌曲所在网页地址为 http://www.xiami.com/song/1768993653,虾米播放器会请求 http://www.xiami.com/widget/xml-single/uid/0/sid/1768993653 页,里面有个Location存放MP3地址。

    <location>7h%1.3F3E59%.t2.n3315E35mtFxe83%%16Epp%it27227563%2a%1%F56383Fm2%5%28_7AfiF2E5%966</location>

    location用凯撒阵列加密,实际上这串字符加几个回车后变成这样

7表示有7行,从左到右竖着看。连起来是 http%3A%2F%2Ff1.xiami.net%2F33821%2F337%5E31%2F%5E5%252%5E1768993653_6%5E6876.mp3

    经过urldecode后变成 http://f1.xiami.net/33821/337^31/^5%2^1768993653_6^6876.mp3

    把^变成0,就是 http://f1.xiami.net/33821/337031/05%201768993653_606876.mp3


    location转MP3的代码如下

def str2url(s):
    import urllib2
    #s = '9hFaF2FF%_Et%m4F4%538t2i%795E%3pF.265E85.%fnF9742Em33e162_36pA.t6661983%x%6%%74%2i2%22735'
    num_loc = s.find('h')
    rows = int(s[0:num_loc])
    strlen = len(s) - num_loc
    cols = strlen/rows
    right_rows = strlen % rows
    new_s = s[num_loc:]
    output = ''
    for i in xrange(len(new_s)):
        x = i % rows
        y = i / rows
        p = 0
        if x <= right_rows:
            p = x * (cols + 1) + y
        else:
            p = right_rows * (cols + 1) + (x - right_rows) * cols + y
        output += new_s[p]
    return urllib2.unquote(output).replace('^', '0')


  • 下载

    得到MP3地址后用qq旋风和迅雷好像都没速度

    用wget可能会快点,建议设个ua。。

    wget -i urls.txt --user-agent="Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20100101 Firefox/15.0.1"

    就是音质寒碜了点。2k个文件才5G多一点。。


PS.. 用这个和wget写了个一键下虾米加心歌曲,album,artist的东西。。很丑陋,就不放上来了


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试

关闭