基于python实现的百度音乐下载器python pyqt改进版(附代码)


Posted in Python onAugust 05, 2019

前言

之前写过一个用python实现的百度新歌榜、热歌榜下载器的文章,实现了百度新歌、热门歌曲的爬取与下载。但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒。而且用Pyqt做的界面,在下载的过程中进行窗口操作,会出现UI阻塞的现象。

前两天有时间调整了一下,做了几方面的改进:

1.修改了UI界面阻塞的问题,下载的过程中可以进行其它的UI操作;

2.爬虫程序采用一个主线程,8个子线程的方式快速爬取,网络状况一致的情况下,将扫描100首歌曲的时间提高到了8、9秒左右;(本地下载速度大概300K左右)

3.解析网页的方法由之前的HtmlParser变成了现在的BeautifulSoup;

要运行此功能需要安装PyQt、BeautifulSoup。运行之前需要在settings.py文件中配置百度账号和密码。

username = "your baidu acount" #配置你的百度账号 
password = "your baidu password" #配置你的百度密码

配置好账户和密码后,直接双击spiderMan.py文件运行即可。

运行流程

1.首先由spiderMan.py进入主程序,开始运行。

2.主程序将控制权交给dispatcher调度程序,调度程序首先登录百度。

3.如果登录成功,调度程序开启8个子线程,由这8个子线程抓取百度新歌榜或百度热歌榜的歌曲链接,分析链接,获取真正的下载地址,并将下载地址、歌曲名称、歌手信息写入一个文本文件。

4.当子线程执行完毕,主程序读取上一步生成的文本文件,加载UI窗体。

整个过程如下图:

基于python实现的百度音乐下载器python pyqt改进版(附代码)

正常运行后的效果如下图:

基于python实现的百度音乐下载器python pyqt改进版(附代码)

问题:

在github上tigerstudent提出了两个问题:

1.文件spiderMan.py中获取当前脚本所在的目录 root = os.path.dirname(__file__)+"/" 获取到的目录为空,建议应该用os.getcwd()。

这里我实际想要的是当前脚本所在的绝对路径,正确的脚本应该是这样的:os.path.abspath(os.path.dirname(__file__))+"/"

那么为什么os.path.dirname(__file__)os.getcwd()为什么都不行呢?os.path.dirname(__file__)是当前脚本相对于脚本的执行目录的相对路径,而os.getcwd()是脚本实际执行的目录。新建test.py文件,代码如下:

import os 
print("os.path.dirname(__file__):"+os.path.dirname(__file__)) 
print("os.getcwd():"+os.getcwd())

首先定位到计算机根目录/,执行如下命令:python /home/fengzheng/vimPython/BaiduMusicSpider-master/test.py,输出结果:

os.path.dirname(__file__):/home/fengzheng/vimPython/BaiduMusicSpider-master 
os.getcwd():

 定位到/home/fengzheng/vimPython/,执行如下命令:python BaiduMusicSpider-master/test.py,输出结果:

os.path.dirname(__file__):BaiduMusicSpider-master 
os.getcwd():/home/fengzheng/vimPython

这样说吧,抛开执行上的参数值,在windows下把命令理解为单击鼠标直接运行的操作,os.path.dirname(__file__)就是所执行的脚本文件对于当前所处的目录的相对路径,而os.getcwd()就是当前执行这个脚本所在的路径,即在哪个位置执行就是那个位置的路径。

2.有一些路径字符串中用的是”\”,正确的写法应该是”/”,因为当时是在windows上写的,没太注意。

github下载地址如下:下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
Python对excel文档的操作方法详解
Dec 10 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
python的一些加密方法及python 加密模块
Jul 11 Python
face++与python实现人脸识别签到(考勤)功能
Aug 28 Python
Python Django 前后端分离 API的方法
Aug 28 Python
python实现飞行棋游戏
Feb 05 Python
基于python实现数组格式参数加密计算
Apr 21 Python
pycharm下pyqt4安装及环境配置的教程
Apr 24 Python
Python常用数据分析模块原理解析
Jul 20 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
Dec 07 Python
Python入门之使用pandas分析excel数据
May 12 Python
使用coverage统计python web项目代码覆盖率的方法详解
Aug 05 #Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 #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
You might like
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
PHP hex2bin()函数用法讲解
2019/02/25 PHP
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
JavaScript截取、切割字符串的技巧
2016/01/07 Javascript
JS图片放大效果简单实现代码
2016/09/08 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
用jquery获取select标签中选中的option值及文本的示例
2018/01/25 jQuery
详解vue项目打包后通过百度的BAE发布到网上的流程
2018/03/05 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
vue通过点击事件读取音频文件的方法
2018/05/30 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
Javascript地址引用代码实例解析
2020/02/25 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python实现寻找最长回文子序列的方法
2018/06/02 Python
OpenCV+Python识别车牌和字符分割的实现
2019/01/31 Python
python实现静态web服务器
2019/09/03 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
经济管理专业自荐信
2013/12/30 职场文书
物业公司采购员岗位职责
2013/12/31 职场文书
编辑找工作求职信分享
2014/01/03 职场文书
大学生学年自我鉴定
2014/02/10 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
车间安全生产标语
2014/06/06 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
工程项目经理岗位职责
2015/02/02 职场文书
教导主任个人总结
2015/03/03 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
浅谈@Value和@Bean的执行顺序问题
2021/06/16 Java/Android
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
MySQL窗口函数的具体使用
2021/11/17 MySQL
Java 超详细讲解ThreadLocal类的使用
2022/04/07 Java/Android
nginx容器方式反向代理实战
2022/04/18 Servers