基于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格式化压缩后的JS文件的方法
Mar 05 Python
Python多线程编程(六):可重入锁RLock
Apr 05 Python
Python 迭代器工具包【推荐】
May 06 Python
python 查找字符串是否存在实例详解
Jan 20 Python
Python Requests模拟登录实现图书馆座位自动预约
Apr 27 Python
解读python如何实现决策树算法
Oct 11 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
sklearn线性逻辑回归和非线性逻辑回归的实现
Jun 09 Python
Python中re模块的元字符使用小结
Apr 07 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文件读写操作之文件写入代码
2011/01/13 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
2016/01/03 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
Firefox window.close()的使用注意事项
2009/04/11 Javascript
Javascript对象中关于setTimeout和setInterval的this介绍
2012/07/21 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
举例详解JavaScript中Promise的使用
2015/06/24 Javascript
JavaScript子窗口调用父窗口变量和函数的方法
2015/10/09 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
Javascript中arguments对象的详解与使用方法
2016/10/04 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python生成器表达式和列表解析
2016/03/10 Python
Python解析excel文件存入sqlite数据库的方法
2016/11/15 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
深入理解css中vertical-align属性
2017/04/18 HTML / CSS
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
全球性的女装店:storets
2019/06/12 全球购物
俄罗斯卫浴采暖及维修用品超级市场:Dkrussia
2020/05/12 全球购物
上海中网科技笔试题
2012/02/19 面试题
C#笔试题
2015/07/14 面试题
为什么要用EJB
2014/04/17 面试题
后勤采购员岗位职责
2013/12/19 职场文书
给女朋友的道歉信
2014/01/10 职场文书
演讲稿开场白
2014/01/13 职场文书
2015元旦晚会主持人开场白+结束语
2014/12/14 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
优秀创业计划书分享
2019/07/19 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
css3新特性的应用示例分析
2022/03/16 HTML / CSS
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL