基于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中二维阵列的变换实例
Oct 09 Python
浅谈function(函数)中的动态参数
Apr 30 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
python中正则表达式的使用方法
Feb 25 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
python3+PyQt5实现自定义分数滑块部件
Apr 24 Python
详解python selenium 爬取网易云音乐歌单名
Mar 28 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
Python 3.6打包成EXE可执行程序的实现
Oct 18 Python
python 实现方阵的对角线遍历示例
Nov 29 Python
Python 文件数据读写的具体实现
Jan 24 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 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
PHP生成UTF8文件的方法
2010/05/15 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
CodeIgniter扩展核心类实例详解
2016/01/20 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
谈谈PHP连接Access数据库的注意事项
2016/08/12 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
PHP时间戳和日期相互转换操作实例小结
2018/12/18 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
jQuery 使用手册(一)
2009/09/23 Javascript
extjs_02_grid显示本地数据、显示跨域数据
2014/06/23 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
javascript操作表格排序实例分析
2015/05/06 Javascript
JavaScript中使用指数方法Math.exp()的简介
2015/06/15 Javascript
JavaScript中的Repaint和Reflow用法详解
2015/07/27 Javascript
jQuery多个版本和其他js库冲突的解决方法
2016/08/11 Javascript
微信小程序 wx.login解密出现乱码的问题解决办法
2017/03/10 Javascript
Node.js 利用cheerio制作简单的网页爬虫示例
2018/03/01 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
python根据出生日期获得年龄的方法
2015/03/31 Python
详解Python中最难理解的点-装饰器
2017/04/03 Python
深入学习Python中的上下文管理器与else块
2017/08/27 Python
python 函数传参之传值还是传引用的分析
2017/09/07 Python
对Python实现累加函数的方法详解
2019/01/23 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
Python实现实时数据采集新型冠状病毒数据实例
2020/02/04 Python
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
什么是反射?如何实现反射?
2016/07/25 面试题
《绿色蝈蝈》教学反思
2014/03/02 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
爱耳日宣传活动总结
2014/07/05 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python