电子灵魂

golang,go,C#,JAVA,PYTHON,PHP

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理


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 
posted on 2018-10-21 13:14  conncent  阅读(725)  评论(0编辑  收藏  举报