基于python实现的百度新歌榜、热歌榜下载器(附代码)


Posted in Python onAugust 05, 2019

前言

首先声明,本工具仅仅为学习之用,不涉及版权问题,因为百度音乐里面的歌曲本身是可以下载的,而且现在百度也提供了”百度音乐播放器”,可以通过这个工具进行批量下载。

我当时做这个工具的时候,百度还没有提供”百度音乐播放器”,而我又想批量下载,所以做了这样的一个下载工具。当然,主要还是为了学习。

工具采用Python2.7.3+PyQt开发。

功能:

1.集中展示百度新歌榜或热歌榜可下载的歌单。

2.支持单个、多个歌曲的下载。

3.可复制歌单中所有的链接内容,方便在迅雷等下载工具中创建下载组。

缺陷:

目前采用单线程,效率不高,UI界面容易假死。

本工具运行流程:

1.模拟用户登录百度。

2.若登录成功,采集并解析页面内容,加载歌单列表。

3.用户点击下载按钮或者批量下载按钮后,下载歌曲。

基于python实现的百度新歌榜、热歌榜下载器(附代码)

使用方法:

1.在配置文件setting.py的最后,配置可登录百度的账号和密码,及百度热歌榜或新歌榜的URL.

username = "your baidu acount"  #配置你的百度账号 
password = "your baidu password" #配置你的百度密码  
musiclistUrl = "http://music.baidu.com/top/dayhot" #  http://music.baidu.com/top/new

2.直接运行mainWindow.py文件即可,如果网速不给力的话可能要等上3、4分钟。

运行后如图:

基于python实现的百度新歌榜、热歌榜下载器(附代码)

用到的知识:

1.首先用到了PyQt的GUI编程,窗体布局及QTableWidget、QProgressBar、QPushButton等控件及控件的重写

2.用到了网络编程的部分内容,利用urllib,urllib2,cookielib请求网页,模拟登录百度。

3.利用HTMLParser解析网页内容,匹配网页元素。

4.利用codecs进行文件的读写。

遇到的问题:

1.编码问题,由于在创建文件时将文件编码设置为UTF-8,当需要向文件写入的内容为中文等非ASCII码内容时,总是提示编码问题。其实,百度音乐的网页全部为UTF-8格式,因此从网页中获取的内容也是UTF-8格式,但是,要讲内容写入UTF-8的文本中,必须将网页内容进行decode(“utf8”)解码为unicode格式,才能正常写入。

检测内容编码,可以用chardet模块的chardet.detect(“内容”)的方法。

另外,HTMLParser解析网页内容过程中,有的下载页面会出现问题,根据提示信息发现还是编码问题,将feed()方法中的内容参数进行decode(“utf8”)后,结果正常。

decode将内容根据参数内容解码为unicode类型,具体要根据所采集的页面的编码。

github下载地址:点这里

Python 相关文章推荐
python赋值操作方法分享
Mar 23 Python
python list转dict示例分享
Jan 28 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
python中如何使用正则表达式的集合字符示例
Oct 09 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
Jan 11 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
详解如何修改python中字典的键和值
Sep 29 Python
selenium2.0中常用的python函数汇总
Aug 05 #Python
Django中使用CORS实现跨域请求过程解析
Aug 05 #Python
Flask使用Pyecharts在单个页面展示多个图表的方法
Aug 05 #Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 #Python
用django设置session过期时间的方法解析
Aug 05 #Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 #Python
Python中typing模块与类型注解的使用方法
Aug 05 #Python
You might like
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
How do I change MySQL timezone?
2008/03/26 PHP
PHP 透明水印生成代码
2012/08/27 PHP
php 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
mysql_escape_string()函数用法分析
2016/04/25 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
在JavaScript中实现命名空间
2006/11/23 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
Javascript/Jquery——简单定时器的多种实现方法
2013/07/03 Javascript
jQuery实现彩带延伸效果的网页加载条loading动画
2015/10/29 Javascript
JavaScript获取IP获取的是IPV6 如何校验
2016/06/12 Javascript
解决bootstrap导航栏navbar在IE8上存在缺陷的方法
2016/07/01 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
jQuery 全选 全不选 事件绑定的实现代码
2017/01/23 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
Vue2.0权限树组件实现代码
2017/08/29 Javascript
vue的安装及element组件的安装方法
2018/03/09 Javascript
模块化react-router配置方法详解
2019/06/03 Javascript
[01:19:46]EG vs Secret 2019国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
python将多个文本文件合并为一个文本的代码(便于搜索)
2011/03/13 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
基于pandas中expand的作用详解
2019/12/17 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
查看已安装tensorflow版本的方法示例
2020/04/19 Python
Python轻量级web框架bottle使用方法解析
2020/06/13 Python
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
中专毕业生个人职业生涯规划
2014/02/19 职场文书
家长写给老师的建议书
2014/03/13 职场文书
儿童生日会策划方案
2014/05/15 职场文书
会计专业求职信
2014/08/10 职场文书
党员证明信
2015/06/19 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
Python进程池与进程锁之语法学习
2022/04/11 Python