1、主程序文件

import os
import json import requests
from contextlib import closing
from progressbar import ProgressBar from down_line import ProgressBar # start_url = 'https://www.ximalaya.com/revision/play/album?albumId=' \
# '3595841&pageNum={}&sort=-1&pageSize=30'
# 3595841 分类ID
# pageNum={} 分页码 # 运行主目录程序 def xi_ma():
# 找URL
start_url = 'https://www.ximalaya.com/revision/play/album?albumId=' \
'9723091&pageNum={}&sort=-1&pageSize=30' # 解析url 得到的网页
# 增加header头 简单的反扒技术
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 '
'(KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
} for i in range(2):
url = start_url.format(i + 1) # 翻页效果相当于提交分页,也就是下一页
print(url)
# 提交网址
r = requests.get(url, headers=headers)
# 获取数据
ret = r.content.decode('utf-8')
# 转换JSON格式
result = json.loads(ret)
# 遍历测试结果
for i in result['data']['tracksAudioPlay']:
# print(i['trackName'], '' + i['src'])
src = i['src']
name = i['trackName']
# 保存数据
# with open('./img/{}.m4a' .format(name), 'ab') as f:
# f.write(music.content) with closing(requests.get(src, headers=headers, stream=True)) as response:
chunk_size = 1024
content_size = int(response.headers['content-length'])
progress = ProgressBar(name, total=content_size, unit='KB', chunk_size=chunk_size,
run_status='正在下载', fin_status='下载完毕')
if not os.path.exists('img'):
os.mkdir('img')
with open('./img/{}.m4a' .format(name), 'ab') as file:
for data in response.iter_content(chunk_size=chunk_size):
file.write(data)
progress.refresh(count=len(data)) if __name__ == '__main__':
xi_ma()

2.down_lin source 源代码 下载进度条

  1 class ProgressBar(object):
2
3 def __init__(self, title,
4 count=0.0,
5 run_status=None,
6 fin_status=None,
7 total=100.0,
8 unit='', sep='/',
9 chunk_size=1.0):
10 super(ProgressBar, self).__init__()
11 self.info = "【%s】%s %.2f %s %s %.2f %s"
12 self.title = title
13 self.total = total
14 self.count = count
15 self.chunk_size = chunk_size
16 self.status = run_status or ""
17 self.fin_status = fin_status or " " * len(self.status)
18 self.unit = unit
19 self.seq = sep
20
21 def __get_info(self):
22 # 【名称】状态 进度 单位 分割线 总数 单位
23 _info = self.info % (self.title, self.status,
24 self.count/self.chunk_size, self.unit, self.seq, self.total/self.chunk_size, self.unit)
25 return _info
26
27 def refresh(self, count=1, status=None):
28 self.count += count
29 # if status is not None:
30 self.status = status or self.status
31 end_str = "\r"
32 if self.count >= self.total:
33 end_str = '\n'
34 self.status = status or self.fin_status
35 print(self.__get_info(), end=end_str)
36

python 喜马拉雅 音乐下载 演示代码的更多相关文章

  1. python 音乐下载演示源代码

    import requests import re api = 'http://music.taihe.com/search?' header = { 'User-Agent': 'Mozilla/5 ...

  2. 用Python实现自己下载音乐的统计

    今天看Python实例,学习了如何对文件进行操作,突然想把自己网易云音乐下载到本地的歌曲名单写到一个txt中,看看具体情况.当然,我现在肯定无法做到直接去网易云音乐上爬取,就做个最简单的吧,嘻嘻^-^ ...

  3. Python 应用爬虫下载QQ音乐

    Python应用爬虫下载QQ音乐 目录: 1.简介怎样实现下载QQ音乐的过程: 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首 ...

  4. Python + Selenium +Chrome 批量下载网页代码修改【新手必学】

    Python + Selenium +Chrome 批量下载网页代码修改主要修改以下代码可以调用 本地的 user-agent.txt 和 cookie.txt来达到在登陆状态下 批量打开并下载网页, ...

  5. Python 应用爬虫下载酷狗音乐

    应用爬虫下载酷狗音乐 首先我们需要进入到这个界面 想要爬取这些歌曲链接,然而这个是一个假的网站,虽然单机右键进行检查能看到这些歌曲的链接,可进行爬取时,却爬取不到这些信息. 这个时候我们就应该换一种思 ...

  6. python爬虫之下载文件的方式总结以及程序实例

    python爬虫之下载文件的方式以及下载实例 目录 第一种方法:urlretrieve方法下载 第二种方法:request download 第三种方法:视频文件.大型文件下载 实战演示 第一种方法: ...

  7. 从jsTree演示代码中提取的在线文件查看

    从jsTree演示代码中提取的在线文件查看 jsTree 请参考:https://www.jstree.com/ 效果如下: 代码下载:http://files.cnblogs.com/files/z ...

  8. JAVA Web 之 struts2文件上传下载演示(二)(转)

    JAVA Web 之 struts2文件上传下载演示(二) 一.文件上传演示 详细查看本人的另一篇博客 http://titanseason.iteye.com/blog/1489397 二.文件下载 ...

  9. JAVA Web 之 struts2文件上传下载演示(一)(转)

    JAVA Web 之 struts2文件上传下载演示(一) 一.文件上传演示 1.需要的jar包 大多数的jar包都是struts里面的,大家把jar包直接复制到WebContent/WEB-INF/ ...

随机推荐

  1. 如何将maven项目打包上传到私服

    比如我们想要把项目通过maven生产源码包和文档包并发布到自己的私服上,有两个maven插件可以做到这些工作,一个是maven-source-plugin,另一个是maven-javadoc-plug ...

  2. 从C简单程序的汇编代码入手,以理解计算机工作原理。

    贺邦  原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000#/info 知识准备 ...

  3. CSS——【元素内边距padding、元素外边距margin、元素边框border-width、元素大小width/height】与【元素显示大小】的关系

    一.基本知识 padding:元素内边距,指的是元素内边框到元素中内容的距离. 用法: padding:长度|百分比 padding-top:长度|百分比 padding-bottom:长度|百分比 ...

  4. Git 笔记——如何处理分支合并冲突

    1.前言 学习使用 Git 也有一段时间,但一直都是把 Git 当作一个代码仓库,使用的命令无非就是 clone, add, commit ,往往课程作业也没有过多人合作开发,没有体验过 Git 的分 ...

  5. 对象函数的readFileSyc类

    对于所有的Syc后缀都是表示同步,默认不加是异步操作.

  6. helm 替换源的方法

    网上找了一个 helm 替换源的方法 挺好用的 mark 一下 helm repo remove stable helm repo add stable https://kubernetes.oss- ...

  7. 一条sql语句搞定基于mysql的sql执行顺序的基本理解

    对数据库基本操作是每个程序员基本功,如何理解并快速记住sql执行的顺序呢,其实一条复杂的sql就能搞定: SELECT DISTINCT <select_list> FROM <le ...

  8. Fitts’ Law / 菲茨定律(费茨法则)

     Fitts’ Law / 菲茨定律(费茨法则) 补充一张雅虎ued绘制的关于Fitts’ Law的Q版小漫画,先初步了解下:   Fitts’ Law / 菲茨定律(费茨法则) Fitts’ Law ...

  9. SSM框架 mapper.xml中 value的空值判断问题

    先看解决方案,其他的都是问题的出处 解决方案:if中使用 _parameter,#{value}不变 <if test="_parameter!='' and _parameter!= ...

  10. youcompleteme 自动补全

    1. 拷贝配置文件 cp ~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py ~/.vim/.ycm_extra_conf.py 2. 修改配 ...