荔枝FM语音批量下载

动机

最近想下载一下自己在蜻蜓FM上上传的音频,发现不支持批量下载。于是去找了一些下载器,万万没想到,该下载器只能下载前十条,再下要注册,注册费5元。尼玛,不能忍。本来就不是太难的技术,还搞这种收费, 真无语了。

声明

对于使用通用资源格式(如mp3)传输的音频资源,使用python爬虫获取要比去寻找破解的下载器要方便的多。而且平台不对音频做编码和隐藏也相当于默认了支持用户下载。
但是还是要强调一下,我们要尊重法律和平台的版权

  • 不要破解付费资源
  • 不要将音频用于商业盈利

下载

由于荔枝FM网页版做的很差,也不提供搜索框,所以想要搜到自己的作品就需要花费一段功夫了。
首先进入荔枝的个人主页,拿到自己的FMid,如图中的右上角。
在这里插入图片描述
在这里插入图片描述
将荔枝的官网url和id拼在一起就能进入网页版的个人作品了:https://www.lizhi.fm/29…72
在这里插入图片描述

这里就是我们的音频所在地了,此时复制地址栏的url一般形如https://www.lizhi.fm/user/53…6,这就是我们下载的起始url了。

下载的逻辑很简单:首先将当前页的音频链接提取出来,分别下载;然后找到标签<next>即下一页的链接,拉取新的页面下载,直到全部下载结束。代码如下:修改url为你自己的链接即可下载。

import urllib.request
import requests
from urllib.error import URLError, HTTPError, ContentTooShortError
from bs4 import BeautifulSoup
import time

def GetData(url, proxy='', retry =2):
    print('download : ' + url)
    if proxy == '':
        proxy= 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11'

    request = urllib.request.Request(url)
    request.add_header('User-Agent',proxy)
    try:
        html = urllib.request.urlopen(request).read()
        return html
    except (URLError, HTTPError, ContentTooShortError) as e:
        print('download error :', e.reason)
        if retry>0:                                #递归重试下载
            if hasattr(e, 'code') and 500<e.code<600 :
                GetData(url, proxy, retry-1)

# 替换为你自己的url
url = 'https://www.lizhi.fm/user/53................6'
while url is not None:
    html = GetData(url)
    soup = BeautifulSoup(html, 'html.parser')
    # 获取所有音频的链接
    trs = soup.find_all(attrs={'class':'clearfix js-play-data audio-list-item'})
    for tr in trs:
        link = 'https://www.lizhi.fm/' + tr['href']
        music_name = './download' + '//' + tr['data-title'] + '.mp3'
        print("the link is : "link, "downloads file to "music_name)
        music_file = requests.get(link).content
        with open(music_name, "wb") as f:
            f.write(music_file)
        time.sleep(2)
    # 获取下一页的链接
    if soup.find(attrs={'class':'next'}):
        url = 'https://www.lizhi.fm' + soup.find(attrs={'class':'next'})['href']
    else:
    	break;
    print("The next page:", url)
    time.sleep(6)

最后声明一下,尊重他人创作,不要随意传播。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值